1. 程式人生 > >機器學習實現——線性迴歸

機器學習實現——線性迴歸

線性迴歸,作為機器學習入門,比較好理解,小學數學中y=kx+b到研究生階段開始進行了深度研究,之前用兩對引數確定兩個未知數,現在用n對引數來估計一套近似值,不過由於未知數的數量,以及線性模型的不確定,要讓線性迴歸達到一個預測未來還是相當有難度的。隨著一些重要的模型和深度學習的引入,線性迴歸雖然效果不夠,不過最初的思想仍然不變,用資料來預測資料,讓資料給我一個更理性的判斷。
我們採用scikit-learn和pandas庫進行學習。
1.資料匯入

# 匯入相關庫檔案
import matplotlib.pyplot as plt
%matplotlib inline
import
pandas as pd
import numpy as np from sklearn import datasets,linear_model #讀取資料 data=pd.read_csv('...\...\learn.csv') data.head()

如果讀取成功的話,會顯示csv檔案裡的部分資料
2.準備執行演算法資料

#輸出資料的維度
data.shape
#準備輸入樣本
x=data[['AT','V','AP','RH']]
x.head()
#準備輸出樣本
y=data[['PE']]
y.head()

3.劃分測試集和訓練集

from sklearn.cross_validation import
train_test_split x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=1) #輸出訓練集和測試集的維度 print x_train.shape print x_test.shape print y_train.shape print y_test.shape

4.執行sciki-learn的線性模型

from sklearn.linear_model import LinearRegression
linreg=linearRegression()
linreg.fit(x_train,y_test)
#輸出模型係數
print linreg.intercept_ print linreg.cofe_

5.模型評估

#擬合測試集
y_pred=linreg.predict(X_test)
from sklearn import metrics
#用scikit-learn計算MSE,RMSE
print "MSE:",metrics.mean_squared_error(y_test,y_pred)
print "RMSE:",np.sqrt(metrics.mean_squared_error(y_test,y_pred))

#我們去掉,輸入中的一類樣本,測試MSE,RMSE
x=data[['AT','V','AP']]
y=data[['PE']]
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=1)
linreg.fit(x_train,y_train)
y_pred=linreg.predict(X_test)
print "MSE:",metrics.mean_squared_error(y_test,y_pred)
print "RMSE:",np.sqrt(metrics.mean_squared_error(y_test,y_pred))

6.交叉驗證

from sklearn.model_selection import cross_val_predict
predicted=cross_val_predict(linreg,X,y,cv=10)
print "MSE:",metrics.mean_squared_error(y,predicted)
print "RMSE:",np.sqrt(metrics.mean_squared_error(y,predicted))

7.畫圖展示結果

fig,ax=plt.subplots()
ax.scatter(y,predicted)
ax.plot([y.min(),y.max()],[y.min(),y.max()],'k--',lw=4)
ax.set_xlabel('Measured')
ax.set_ylabel('Predicted')
plt.show()