標籤:

機器學習入門之簡單線性回歸

機器學習是一個很複雜又很廣闊的概念,可以說是包羅萬象的。從數據分析到機器學習再到深度學習,這是一個不斷進步和發展的過程。這裡就通過一個很基礎的入門項目,來演練一下機器學習的過程。

機器學習的本質其實就是通過訓練集建立一個模型,而後可以通過這個模型實現對於特徵的識別,得出結果標籤,而這個模型可以是多種多樣的,簡單線性回歸模型只是其中的最基礎最簡單的一種模型。

1 建立一個數據集(如果不規整的數據集,需要按照數據分析的流程進行一遍數據清洗,這裡僅僅舉個例子,就跳過數據分析這一步了)

#首先我們先建立一個數據集,這也是之後用來訓練和測試的數據n#導入包,創建數據集nfrom collections import OrderedDictnimport pandas as pdnexamDict={n 學習時間:[0.50,0.75,1.00,1.25,1.50,1.75,1.75,2.00,2.25,n 2.50,2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50],n 分數: [10, 22, 13, 43, 20, 22, 33, 50, 62, n 48, 55, 75, 62, 73, 81, 76, 64, 82, 90, 93]n}nexamOrderDict=OrderedDict(examDict)nexam=pd.DataFrame(examOrderDict)n#看看數據集長什麼樣nexam.head()n

2 看看適不適合用線性回歸的模型(通過畫圖)

#接下來我們先大致看一下特徵和標籤之間的關係n#然後來判斷是否適合使用簡單線性回歸模型n#如果不適合,就換用其他模型n#這裡是舉例,肯定可以用的n#特徵是學習時間,標籤是分數n#用散點圖看一下大致情況nn#從dataframe中把標籤和特徵導出來nexam_X = exam[學習時間]nexam_Y = exam[分數]nn#繪製散點圖nn#導入包nimport matplotlib.pyplot as pltn#繪製散點圖nplt.scatter(exam_X, exam_Y, color = green)n#設定X,Y軸標籤和titlenplt.ylabel(scores)nplt.xlabel(times)nplt.title(exam data)nplt.show()n

圖1 數據散點圖

通過散點圖,很容易發現這個數據集看起來比較適合線性回歸的模型。

3 分割數據

這裡不能把這個數據集都作為訓練數據集,那樣的話就沒有數據來測試一下我們的模型好壞了,所以需要把數據集分割一下,要用到一個函數。

#train_test_split函數可以在樣本數據集中隨機的選取測試集與訓練集n#比例可以自己指定n#第一個參數為特徵,第二個參數為標籤nfrom sklearn.cross_validation import train_test_splitnX_train, X_test, Y_train, Y_test = train_test_split(exam_X,n exam_Y, n train_size = 0.8)n#這裡可以簡單的看一下分割後的結果nX_train.head()nX_train.shapen#可以發現訓練集是16行一列的數據,測試集是四行一列,符合切分比例n

4 導入模型

#第1步:導入線性回歸nfrom sklearn.linear_model import LinearRegressionn# 第2步:創建模型:線性回歸nmodel = LinearRegression()n#第3步:訓練模型nmodel.fit(X_train , y_train)nn#就像這樣直接導入模型的話會報錯n#數據集只有1個特徵的話,需要用array.reshape(-1, 1)來改變數組的形狀n#這裡注意一下就好了n

#首先,改變一下數組的形狀nX_train = X_train.values.reshape(-1, 1)nX_test = X_test.values.reshape(-1, 1)n#從skl中導入線性回歸的模型nfrom sklearn.linear_model import LinearRegressionn#創建一個模型nmodel = LinearRegression()n#訓練一下nmodel.fit(X_train, Y_train)n

#因為線性回歸一般方程為y = a+bxn#b為斜率,a為截距n#截距用intercept_方法獲得n#斜率用model.coef_方法獲得na = model.intercept_nb = model.coef_na = float(a)nb = float(b)nprint(該模型的簡單線性回歸方程為y = {} + {} * x.format(a, b))nn該模型的簡單線性回歸方程為y = 9.307829888712234 + 16.046104928457872 * xn

5 評估模型

我們得到的方程是這些點的最佳擬合曲線,那麼我們首先看一下這個曲線的具體位置。

import matplotlib.pyplot as pltn#繪製散點圖nplt.scatter(exam_X, exam_Y, color = green, label = train data)n#設定X,Y軸標籤和titlenplt.ylabel(scores)nplt.xlabel(times)nn#繪製最佳擬合曲線nY_train_pred = model.predict(X_train)nplt.plot(X_train, Y_train_pred, color = black, label = best line)nn#來個圖例nplt.legend(loc = 2)nnplt.show()n

圖2 擬合曲線

但是僅僅通過擬合曲線我們是無法準確判斷模型的擬合程度的,我們還需要更加具體的評判方式。

在線性回歸中,我們通過決定係數 R^{2} 來判別,這個數值越接近於1,說明模型的擬合度越好

,通過測試數據來判斷一下模型的擬合程度。

可以看出,模型的擬合程度為0.79左右,還算是比較可靠的。

機器學習的入門就是這樣了~

model.score(X_test, Y_test)nn0.78723491774373n

推薦閱讀:

2.3 人臉識別網路Inception代碼解析
【觀點】從優化盛會SIAM OP17看運籌學及AI發展趨勢
吳恩達深度學習課程課後習題(2課3周)

TAG:机器学习 |