機器學習實現——線性迴歸
阿新 • • 發佈:2018-11-12
線性迴歸,作為機器學習入門,比較好理解,小學數學中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()