簡單線性回歸初接觸
這次還是主要跟著猴子老師的代碼,照著敲了一遍,對於不理解的部分,通過網上查詢,添加了相關注釋。
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[:,學習時間]#標籤labelsexam_y = examDf.loc[:,分數]#繪製散點圖import matplotlib.pyplot as plt#散點圖plt.scatter(exam_X,exam_y,color=r,label="exam data111")#添加圖標標籤plt.legend(loc=2)plt.xlabel("House")plt.ylabel("Score")#顯示圖像plt.show()
train_test_split是交叉驗證中常用的函數,功能是從樣本中隨機的按比例選取訓練數據(train)和測試數據(test)第一個參數:所要劃分的樣本特徵第二個參數:所要劃分的樣本標籤train_size:訓練數據佔比,如果是整數的話就是樣本的數量from sklearn.cross_validation import train_test_split#建立訓練數據和測試數據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)
原始數據特徵: (20,) , 訓練數據特徵: (16,) , 測試數據特徵: (4,)
原始數據標籤: (20,) 訓練數據標籤: (16,) 測試數據標籤: (4,)
#繪製散點圖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()
#邏輯回歸模型#將訓練數據特徵轉換成二維數組XX行*1列X_train = X_train.reshape(-1,1)#將測試數據特徵轉換成二維數組XX行*1列X_test = X_test.reshape(-1,1)#第1步:導入線性回歸from sklearn.linear_model import LinearRegression#第2步:創建模型,線性回歸model = LinearRegression()#第3步:訓練模型model.fit(X_train,y_train)最佳擬合線:z=a+bx截距intercept:a回歸係數:b#截距a = model.intercept_#回歸係數b = model.coef_print(最佳擬合線:截距a=,a,,回歸係數b=,b)
最佳擬合線:截距a= 6.3561949993 ,回歸係數b= [ 16.89062718]
#下面進行繪圖import matplotlib.pyplot as plt#訓練數據的散點圖plt.scatter(X_train,y_train,color=blue,label=train)#對訓練數據進行預測y_train_pre = model.predict(X_train)#繪製最佳擬合線plt.plot(X_train,y_train_pre,color=black,linewidth_=3,label=best line)#添加圖標標籤plt.legend(loc=2)plt.xlabel("Hours")plt.ylabel("Score")#顯示圖像plt.show()
#返回相關係數(X和Y之間相關性),corr返回結果是一個數據框,存放的是相關係數矩陣rDf = examDf.corr()print(相關係數矩陣:)rDf
#線性回歸的score方法得到是決定係數R平方#評估模型:決定係數R平方#決定係數,也稱為擬合優度,擬合優度越大,自變數對因變數的解釋程度越高,自變數引起的變動佔總變動的百分比高。觀察點在回歸直線附近越密集model.score(X_test,y_test)
0.91617938600015003
#繪圖import matplotlib.pyplot as plt#訓練數據散點圖plt.scatter(X_train,y_train,color=blue,label=train data)#訓練數據的預測值y_train_pred = model.predict(X_train)#繪製最佳擬合線:標籤用的是訓練數據的預測值y_train_predplt.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()
推薦閱讀:
※筆記:簡單理解線性回歸
※嶺回歸-定義與歷史
※【線上直播】線性回歸——求解介紹及回歸拓展
※簡單線性回歸與機器學習基礎
※機器學習:線性回歸