機器學習入門(1):線性回歸

一、什麼是機器學習(Machine learning)

機器學習,顧名思義是讓機器模擬人的思維,進行決策的過程。機器學習(Machine Learning)的過程就如同小孩學習走路一樣,需要不斷的試錯和訓練,才能修鍊出完美的模型,達到良好的預測效果。

在人工智慧領域,常聽到人工智慧(AI)、機器學習(Machine Learning)、深度學習(Deep Learning)等名詞。其實,機器學習是實現人工智慧的一種技術,深度學習又是機器學習中一種很流行的演算法。三者的範疇如圖所示,AI>ML>DL。

如果從小白開始進階,可以沿著數據分析——機器學習——深度學習這條路前行,收入也會逐步提升。

二、什麼是特徵和標籤?

我們來舉個栗子,假如你是北京的一位鏈家小哥,現在需要評估你手中的4套房源的租金,你根據「面積」、「區域」、「小區」這個三個條件,綜合評價後給房源依次定價,這並不難。可是問題來了,領導給你1W套房源,讓你儘快定出租金額,這時你就蒙圈了!此時你在想,如果通過機器學習,建立模型,輸入某套房源「面積」、「區域」、「小區」三個值,租金會自動計算出來,那就太好了。

這裡需要強調的是,機器學習模型和普通的程序不同,它通過學習數據,調整模型,在試錯的過程中使模型更準確。

上述例子中,如面積」、「區域」、「小區」就是機器學習的特徵(Feature),代表數據的屬性。「租金」就是標籤(Label),代表對數據的預測結果。

三、scikit-learn包

Scikit-learn是Python處理機器學習強大的第三方庫,擁有線性回歸(Linear Regression)、交叉驗證(Cross-validation)、決策樹(Decision Tree)、隨機森林(Random Forest)等常見演算法。

安裝scikit-learn,首選在Anconda中安裝,使用命令conda install scikit-learn

四、線性相關性分析

(1)相關性分析是研究不同變數之間相關關係的演算法

(2)三種線性關係

若兩個變數是同方向變化,則稱正相關

若兩個變數是反方向變化,則稱負相關

若兩個變數無規律,則稱不相關

(3)協方差和相關係數

協方差既能反應兩個變數的變化方向,又能反應兩個變數相關性強弱,所以我們常用它來測量相關性,協方差的公式如下:

因為協方差會受到變數量綱的大小的影響,所以我們引入相關係數概念:

從公式可以看出,相關係數等於X,Y的協方差除以X和Y的標準差,從而使得協方差標準化。

相關係數的範圍是-1≤ρ≤1,若ρ=1,則完全線性正相關,若ρ=-1,則完全線性負相關。

如果覺得公式晦澀難懂,可以閱讀以下文章通俗易懂的了解這兩個公式。

如何通俗易懂地解釋「協方差」與「相關係數」的概念?

(4)最佳擬合線

如上圖所示,最佳擬合線是穿過散點圖的一條直線,這條直線到各個散點的距離,即誤差平方和最小。誤差平方和∑SSE=∑(實際值-預測值)2

那如何求參數a和b呢?我們使用最小二乘法就可以求出參數,具體的求解過程先不在這裡講。

五、案例

研究內容:研究學習時間和考試成績的相關性

第一步:建立兩個變數的數據集

from collections import OrderedDictimport pandas as pd#研究學習時間和考試成績的相關關係examDict={ 學習時間:[0.50,0.75,1.00,1.25,1.50,1.75,1.75,2.00,2.25, 2.50,2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50], 分數:[10,22,13,43,20,22,33,50,62,48,55, 75,62,73,81,76,64,82,90,93] }examOrderDict=OrderedDict(examDict)examDf=pd.DataFrame(examOrderDict)

第二步:提取特徵和標籤

#提取特徵值和標籤值#特徵值featuresexam_X=examDf.loc[:,學習時間]#標籤值labelexam_Y=examDf.loc[:,分數]

第三步:建立訓練數據和測試數據,並繪製散點圖

#建立訓練數據和測試數據X_train,X_test,Y_train,Y_test=train_test_split(exam_X,exam_Y,train_size=0.8)#輸出數據的大小print(原始數據特徵:,exam_X.shape, ,訓練數據特徵:,X_train.shape, ,測試數據特徵:,X_test.shape)print(原始數據標籤:,exam_Y.shape, ,訓練數據標籤:,Y_train.shape, ,測試數據標籤:,Y_test.shape)

#繪製散點圖import matplotlib.pyplot as plt#散點圖plt.scatter(X_train,Y_train,color=blue,label=train data)plt.scatter(X_test,Y_test,color=red,label=test data)#添加標籤plt.legend(loc=2)plt.xlabel(Hours)plt.ylabel(Pass)#顯示圖像plt.show()

第四步:建立最佳擬合線

#將訓練數據的特徵轉換成1列X_train=X_train.reshape(-1,1)#將測試數據的特徵轉換成1列X_test=X_test.reshape(-1,1)#第一步,導入線性回歸模型from sklearn.linear_model import LinearRegression#第二步,創建模型:線性回歸model= LinearRegression()#第三步,訓練模型model.fit(X_train,Y_train)

最佳擬合線y=a+bx截距為a回歸係數為b#截距a=model.intercept_#回歸係數b=model.coef_print(最佳擬合線:截距a=,a,,回歸係數b=,b)

#繪圖import matplotlib.pyplot as plt#訓練數據散點圖plt.scatter(X_train,Y_train,color=blue,label=train data)#訓練數據預測值Y_train_pred=model.predict(X_train)#繪製最佳擬合線plt.plot(X_train,Y_train_pred,color=black,linewidth_=3,label=best line)#測試數據散點圖plt.scatter(X_test,Y_test,color=red,label=test data)#添加標籤plt.legend(loc=2)plt.xlabel("Hours")plt.ylabel("Score")#顯示圖像plt.show()

六、如何檢驗模型的準確度

y的誤差平方和 ∑SSE=∑(y的實際值-y的預測值)2

y的總波動=∑(y的實際值-y的平均值)2

有多少百分比的y的波動沒有被線性回歸所描述=y的誤差平方和/y的總波動

決定係數R2=1-y的誤差平方和/y的總波動

(1)代表有多少百分比的y的波動被線性回歸所描述。

(2)R2越高代表模型越準確。

上個案例,可以用model.score求得決定係數,可以看出模型準確率很高。

#線性回歸模型score方法得到決定係數R2model.score(X_test,Y_test)

七、最後想說的是相關關係不代表因果關係

因果關係是A發生,必會導致B發生。然而兩個因子有相關關係不代表有因果關係,甚至也不代表兩者有實際的關係。比如有人說「哈佛畢業一定賺錢多」,這個話肯定是不完全對的,哈佛畢業只是賺錢多的一個因子,賺錢多的影響因素還有很多。


推薦閱讀:

一文讀懂回歸樣條(regression splines),附Python代碼
簡單線性回歸與機器學習基礎
機器學習入門之旅(三)線性模型之線性回歸與最小二乘法
簡單線性回歸
機器學習:線性回歸

TAG:機器學習 | 線性回歸 | Python |