1. 程式人生 > >機器學習筆記 -吳恩達(第六章:線性迴歸,tensorflow實現 附原始碼)

機器學習筆記 -吳恩達(第六章:線性迴歸,tensorflow實現 附原始碼)

(1)資料概覽

import pandas as pd
import seaborn as sns
sns.set(context="notebook", style="whitegrid", palette="dark")
import matplotlib.pyplot as plt
import tensorflow as tf
import numpy as np

raw_data = pd.read_csv('ex1data2.txt', names=['square', 'bedrooms', 'price'])
raw_data.head()

(2)繪圖觀察資料

(3)資料預處理

def get_X(df):#讀取特徵
    ones = pd.DataFrame({'ones': np.ones(len(df))})#ones是m行1列的dataframe
    data = pd.concat([ones, df], axis=1)  # 合併資料,根據列合併
    return data.iloc[:, :-1].as_matrix()  # 這個操作返回 ndarray,轉為二維矩陣

def get_y(df):#讀取標籤
    #  '''iloc選取列資料,選取所有行資料,只要最後一列,'''
    return np.array(df.iloc[:, -1])#df.iloc[:, -1]是指df的最後一列

def normalize_feature(df):
    # """Applies function along input axis(default 0) of DataFrame."""
    return df.apply(lambda column: (column - column.mean()) / column.std())#特徵縮放

data = normalize_feature(raw_data)
data.head()

(4)模型

# X_data 為特徵集,y_data為目標集,alpha 為學習率,epoch 為迭代次數,optimizer為梯度下降演算法
def linear_regression(X_data, y_data, alpha, epoch, optimizer=tf.train.GradientDescentOptimizer):
      # placeholder for graph input
    X = tf.placeholder(tf.float32, shape=X_data.shape)
    y = tf.placeholder(tf.float32, shape=y_data.shape)

    # 設計計算圖
    with tf.variable_scope('linear-regression'):

        #初始化引數矩陣 2*1
        W = tf.get_variable("weights", (X_data.shape[1], 1),initializer=tf.constant_initializer())  # n*1
        #矩陣乘法
        y_pred = tf.matmul(X, W)  # m*n @ n*1 -> m*1
        #損失函式,a.T @ a  ,相當於求平方
        loss = 1 / (2 * len(X_data)) * tf.matmul((y_pred - y), (y_pred - y), transpose_a=True)  # (m*1).T @ m*1 = 1*1

         #設定學習率,使用梯度下降演算法,優化損失函式loss
    opt_operation = optimizer(learning_rate=alpha).minimize(loss)
   

    # 開始訓練
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())

         #存放損失值列表
        loss_data = []

        for i in range(epoch):
            _, loss_val, W_val = sess.run([opt_operation, loss, W], feed_dict={X: X_data, y: y_data})
            loss_data.append(loss_val[0, 0])  # because every loss_val is 1*1 ndarray

            if len(loss_data) > 1 and np.abs(loss_data[-1] - loss_data[-2]) < 10 ** -9:  # early break when it's converged
                # print('Converged at epoch {}'.format(i))
                break

    # clear the graph
    tf.reset_default_graph()
    return {'loss': loss_data, 'parameters': W_val}  

(5) 開始訓練

X_data = get_X(data)
print (X_data)
print(X_data.shape, type(X_data))

y_data = get_y(data).reshape(len(X_data), 1)  # special treatment for tensorflow input data
print (y_data)
print(y_data.shape, type(y_data))

epoch = 2000
alpha = 0.01

optimizer_dict={'GD': tf.train.GradientDescentOptimizer,
                'Adagrad': tf.train.AdagradOptimizer,
                'Adam': tf.train.AdamOptimizer,
                'Ftrl': tf.train.FtrlOptimizer,
                'RMS': tf.train.RMSPropOptimizer
               }
results = []
for name in optimizer_dict:
    res = linear_regression(X_data, y_data, alpha, epoch, optimizer=optimizer_dict[name])
    res['name'] = name
    results.append(res)

(6)繪圖

fig, ax = plt.subplots(figsize=(16, 9))

for res in results: 
    parameters = res['parameters']
    print (parameters)
    loss_data = res['loss']
    ax.plot(np.arange(len(loss_data)), loss_data, label=res['name'])

ax.set_xlabel('epoch', fontsize=18)
ax.set_ylabel('cost', fontsize=18)
ax.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)
ax.set_title('different optimizer', fontsize=18)
plt.show()

相關推薦

機器學習筆記 -線性迴歸tensorflow實現 原始碼

(1)資料概覽 import pandas as pd import seaborn as sns sns.set(context="notebook", style="whitegrid", palette="dark") import matplotlib.pyplot

機器學習筆記 -邏輯迴歸python實現 原始碼

(1)邏輯迴歸概念 1. 迴歸(Regression) 迴歸,我的理解來說,其直觀的理解就是擬合的意思。我們以線性迴歸為例子,在二維平面上有一系列紅色的點,我們想用一條直線來儘量擬合這些紅色的點,這就是線性迴歸。迴歸的本質就是我們的預測結果儘量貼近實際觀測的結果,或者說我們

機器學習筆記 -邏輯迴歸-手寫數字識別python實現 原始碼

(1)資料集描述 使用邏輯迴歸來識別手寫數字(0到9)。 將我們之前的邏輯迴歸的實現,擴充套件到多分類的實現。 資料集是MATLAB的本機格式,要載入它到Python,我們需要使用一個SciPy工具。影象在martix X中表示為400維向量(其中有5,000個), 400

機器學習筆記 -第一緒論

0.機器學習定義   一個程式由經驗E中學習,解決任務T,達到效能度量值P,當且僅當,有了經驗值E後,經過P的評判,程式在處理T的時候經驗有所提升。 1.機器學習運用領域:         資料探勘

機器學習筆記 - - 目錄

目錄 linear regreesion 線性迴歸 logistic regression 邏輯迴歸 程式碼放在了我的Github:https://github.com/youmux/machine_learning 參考: 推導過程:halfrost1 程式碼實現:何寬2

機器學習筆記--機器學習課程2

梯度下降法 對於梯度下降法而言,當偏導數 的學習效率過大或過小時,收斂的速率會變得很緩慢,α過大時甚至會無法收斂。學習效率α是一個正數。 同樣梯度下降法初始點在區域性最低點時同樣不會再更新,此時偏導數的值為0.

機器學習筆記線性迴歸回顧

本章是對線性代數的一些簡單回顧,由於之前學過,所以這裡只是簡單的將課程中的一些例子粘過來 矩陣表示 矩陣加法和標量乘法 矩陣向量乘法 用矩陣向量乘法來同時計算多個預測值 矩陣乘法 用矩陣乘法同時計算多個迴歸

(有解題思路)機器學習coursera週最後測驗習題彙總

         第六週的習題做了三遍才100%正確,其中還是參照了不少論壇裡大神的答案(比如BeiErGeLaiDe的部落格,連結點選開啟連結)         正式進入主題:ML第六週最後測驗,共五題。文中大部分屬於個人觀點,如有錯誤歡迎指正、交流。1. You are

卷積神經網路3:目標檢測學習筆記[Deep Learning]

1.目標定位 1.1 分類、定位、檢測簡介 - Image classification 影象分類,就是給你一張圖片,你判斷目標是屬於哪一類,如汽車、貓等等。 - Classification with localization 定位分類,

學習筆記——-機器學習課程-1.3 用神經網路進行監督學習

         神經網路有時媒體炒作的很厲害,考慮到它們的使用效果,有些說法還是靠譜的,事實上到目前為止,幾乎所有的神經網路創造的經濟價值都基於其中一種機器學習,我們稱之為“監督學習”,那是什麼意思呢?         我們來看一些例子, 在監督學習中輸入x,習得一個函式

學習筆記——-機器學習課程 1.2 什麼是神經網路

1.2 什麼是神經網路         “深度學習”指的是訓練神經網路,有的時候 規模很大,那麼神經網路是什麼呢?我們從一個房價預測的例子開始,假設有一個六間房屋的資料集已知房屋的面積,單位是平房英尺或者平方米,已知房屋價格,想要找到一個函式,根據房屋面積,預測房價的函式,

機器學習》--周志華 學習筆記

神經網路 神經元模型 ​ 神經網路是由具有適應性的簡單單元組成的廣泛並行互連的網路,它的組織能夠模擬生物神經系統對真實世界物體所作出的互動反應 ​ 神經網路中最基本的成分是神經元模型,即“簡單單元”,在生物神經網路中,每個神經元與其他神經元相連

機器學習|周志華|李巨集毅|演算法】清單 #收藏#

網路轉自:https://blog.csdn.net/julialove102123/article/details/78729602系列學習記錄:1、吳恩達機器學習系列;2、李巨集毅機器學習課程;3、周志華 西瓜書;4、十大演算法練習;5、系列學習資源;      周志華:

coursera《機器學習-week1-03 梯度下降演算法

梯度下降演算法 最小化代價函式J 梯度下降 使用全機學習最小化 首先檢視一般的J()函式 問題 我們有J(θ0, θ1) 我們想獲得 min J(θ0, θ1) 梯度下降適用於更一般的功能 J(θ0, θ1, θ2 …. θn) min J(θ0, θ

資料庫系統概論關係資料理論

第六章  關係資料理論6.1 問題的提出 1、關係資料庫邏輯設計 (1)針對具體問題,如何構造一個適合於它的資料模式 (2)資料庫邏輯設計的工具──關係資料庫的規範化理論 2、關係模式由五部分組成,是一個五元組:R(U, D, DOM,&n

卜若的程式碼筆記系列-Web系列-SpringBoot-使用response-3205

1.我們來形容一下response是什麼? 簡單的來說,就是我向a說了一句話,然後a對我說一句話 這就是response。 2.我們想要response第一步是什麼? 當然是張開嘴巴啦。 所以我們怎麼獲得response 在springboot中可以通過靜態的方式獲取

單利模式懶漢式餓漢式以及靜態內部類雙重檢查

文章轉自:https://blog.csdn.net/u012453843/article/details/73743997單例模式,最常見的就是飢餓模式和懶漢模式,一個直接例項化物件,一個在呼叫方法時進行例項化物件。       大家見的最多的莫過於下面這種單例模式了,這種

Andrew Ng機器學習》課程筆記11周——機器學習簡介單變數線性迴歸

吳恩達(Andrew Ng)在 Coursera 上開設的機器學習入門課《Machine Learning》: 目錄 一、引言 一、引言 1.1、機器學習(Machine Learni

Andrew Ng機器學習》課程筆記22周——多變數線性迴歸

目錄 四、多變數線性迴歸(Linear Regression with multiple variables) 4.1. 多維特徵(Multiple features) 前面介紹的是單變數線性迴歸如下圖所示:

AndrewNG機器學習課程學習小技巧

前言 因為現在是機器學習的熱潮,之前也是看過一部分的資料,比如李航的《統計學習方法》也拜讀過,但真正系統的學習還真的是沒有。也想趁著最近一段比較能自由支配的時間好好學習一段時間。現在學習了一段時間,先把這些記錄小技巧記錄下來吧。 視訊課程 視訊的話大家有很多渠道