機器學習基礎:監督學習-線性迴歸模型

機器學習是一個體系龐大的學科,其中監督學習又包括線性模型,支持向量機,貝葉斯分類器,集成學習等。由於涉及內容較多,從本文開始將首先從機器學習基礎中的監督學習的線性模型入手,逐步展開對機器學習相關內容的分析說明。


機器學習基礎:監督學習-線性迴歸模型

旅遊拍攝

說明:機器學習涉及到的線性代數,概率論,Numpy庫等內容還請讀者自行補充學習。

監督學習概念:監督學習根據數據的特徵和屬性(標籤和目標值),根據這些標籤,學習調整分類器的參數,使其達到所要求性能的過程,即從已知推出未知的過程。

機器學習基礎:監督學習-線性迴歸模型

其實是一個很簡單的數學模型,線性模型就屬於監督學習中的一種簡單算法,且非常有代表性。下面就係統分析線性模型在監督學習中是怎麼用的:

線性模型的任務是:在給定樣本數據集上(假設該數據集特徵數為n),學習得到一個模型或一個函數f(z),使得對任意輸入特徵向量:

(強烈建議頭條儘快加上公式編輯的功能)

機器學習基礎:監督學習-線性迴歸模型

f(z)能表示為x的線性函數,即滿足:

機器學習基礎:監督學習-線性迴歸模型

則有:

機器學習基礎:監督學習-線性迴歸模型

其中:

機器學習基礎:監督學習-線性迴歸模型

b為模型參數,這些參數需要在實際訓練中確定。以矩陣形式表達即為:

機器學習基礎:監督學習-線性迴歸模型

其中:

機器學習基礎:監督學習-線性迴歸模型

是不是和上學時學的線性模型一樣的呀。通常線性模型可以在機器學習中做分類和迴歸,常用的分類記為兩種,一種是大家熟悉的線性迴歸,另一種是邏輯迴歸。若瞭解機器學習的就會發現上式其實和單層神經網絡的單層感知機表達一樣,其實神經網絡的單層感知機也被看作是線性模型。

機器學習基礎:監督學習-線性迴歸模型

神經網絡單層感知機

上圖即為單層感知機的模型,先有個單層神經網絡的印象。迴歸包括線性迴歸和邏輯迴歸,邏輯迴歸用於分類;線性迴歸可以做預測,限於篇幅不易過長,本文先主要分析線性迴歸模型,下節將邏輯迴歸模型。

機器學習基礎:監督學習-線性迴歸模型

該圖就是一個典型的線性迴歸模型,那麼這條線是怎麼求出來的呢?請看下面分解:首先要畫出一條線(f(x)= k*x + b),就需要知道兩個參數,k和b。那怎麼求呢?其實數學基礎好的可能一看就會。這裡還是回顧一下,號位系統學習做鋪墊。首先知道數據樣本:

機器學習基礎:監督學習-線性迴歸模型

假設有m個樣本。那麼就站在機器學習的角度來看待這些數據,其中每個輸入樣本都有其對應的目標值構成,把所有的輸入x看做向量:

機器學習基礎:監督學習-線性迴歸模型

則所有的y向量為目標值或數據標籤。那麼有了這些數據,我們怎麼擬合出來這些預測函數直線呢?這些點可以畫出無數的直線,在這些直線中選取哪一條才能反映樣本數據的特點呢?這就引出一個衡量標準,這個標準在機器學習中用代價函數來表示:

機器學習基礎:監督學習-線性迴歸模型

這個式子還是比較好理解,就是說這m個樣本點的預測值與實際值的值最小,則說明這條直線是最好的,將函數代入可得:

機器學習基礎:監督學習-線性迴歸模型

因此上面求擬合直線的問題就轉換成為了求代價函數最小值問題。求解該式就可以用下面的步驟:

1) 利用迭代法,每次迭代沿梯度的反方向,逐步靠近或收斂最小值點。

2) 利用最下二乘法,直接求出k和b;

機器學習中是要選擇第一種方法的,最小二乘法若數據多的話涉及的計算過大。通過最終的k和b值畫圖擬合曲線。

代碼實戰:使用皮馬印第安人糖尿病數據集

<code>import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score

# 加載數據集
diabetes = datasets.load_diabetes()
print(len(diabetes))
# 取有用到的數據
diabetes_X = diabetes.data[:, np.newaxis, 2]
#print(diabetes_X)
# 把數據分成訓練數據和預測數據
diabetes_X_train = diabetes_X[:-10]
diabetes_X_test = diabetes_X[-10:]
print(diabetes_X_test)
# 切分標籤
diabetes_y_train = diabetes.target[:-10]
diabetes_y_test = diabetes.target[-10:]
print(diabetes_y_test)

# 創建迴歸模型
regr = linear_model.LinearRegression()

# 訓練數據
regr.fit(diabetes_X_train, diabetes_y_train)

# 使用訓練做預測

diabetes_y_pred = regr.predict(diabetes_X_test)

# 打印係數
print('Coefficients: \\n', regr.coef_)
# 計算均方誤差
print("Mean squared error: %.2f"
% mean_squared_error(diabetes_y_test, diabetes_y_pred))
# 解釋方差得分:1為完美預測
print('Variance score: %.2f' % r2_score(diabetes_y_test, diabetes_y_pred))

#畫圖顯示
plt.scatter(diabetes_X_test, diabetes_y_test, color='black')
plt.plot(diabetes_X_test, diabetes_y_pred, color='blue', linewidth=3)
plt.title("Linear Model")
plt.show()/<code>

數據測試結果:

機器學習基礎:監督學習-線性迴歸模型


分享到:


相關文章: