一.什么是多元線性回歸
在回歸分析中,如果有兩個或兩個以上的自變量,就稱為多元回歸。事實上,一種現象常常是與多個因素相聯系的,由多個自變量的最優組合共同來預測或估計因變量,比只用一個自變量進行預測或估計更有效,更符合實際。因此多元線性回歸比一元線性回歸的實用意義更大。
二.多元線性回歸的一些推導過程






三.使用代碼來實現多元線性回歸
import numpy as np import matplotlib.pyplot as plt from sklearn import datasets #加載數據集 boston=datasets.load_boston() X = boston.data y = boston.target X = X[y < 50.0] y = y[y < 50.0] #加載自己的模塊 from playML.LinearRegression import LinearRegression reg = LinearRegression() #實例化過程 reg.fit_normal(X_train,y_train) #訓練數據集的過程 reg.coef_ #查看相應的特征屬性值 ''' array([-1.18919477e-01, 3.63991462e-02, -3.56494193e-02, 5.66737830e-02, -1.16195486e+01, 3.42022185e+00, -2.31470282e-02, -1.19509560e+00, 2.59339091e-01, -1.40112724e-02, -8.36521175e-01, 7.92283639e-03, -3.81966137e-01]) ''' reg.intercept_ #截距:34.16143549624022 reg.score(x_test,y_test) #查看算法的准確性 :0.8129802602658537
三.使用sklearn實現多元線性回歸
1.使用linear_model的LinearRegression模塊來解決
import numpy as np import matplotlib.pyplot as plt from sklearn import datasets #加載數據 boston=datasets.load_boston() X = boston.data y = boston.target #數據預處理過程,去掉邊界上的點 X = X[y < 50.0] y = y[y < 50.0] #采用自己寫的分割方法對原始數據進行分割,分割成為訓練數據和測試數據 from playML.model_selection import train_test_split X_train,x_test,y_train,y_test=train_test_split(X,y,seed=666) #導入相應的模塊 from sklearn.linear_model import LinearRegression lin_reg = LinearRegression() lin_reg.fit(X_train,y_train) #特征參數的值 lin_reg.coef_ ''' array([-1.18919477e-01, 3.63991462e-02, -3.56494193e-02, 5.66737830e-02, -1.16195486e+01, 3.42022185e+00, -2.31470282e-02, -1.19509560e+00, 2.59339091e-01, -1.40112724e-02, -8.36521175e-01, 7.92283639e-03, -3.81966137e-01]) ''' #截距 lin_reg.intercept_ #34.16143549624665 #測試算法的准確度 R Squared lin_reg.score(x_test,y_test) #0.8129802602658495
2.使用knn算法來解決回歸問題
1.采用系統默認的參數來進行knn測試算法的精確度
#采用系統默認的參數來進行相關的測試 from sklearn.neighbors import KNeighborsRegressor knn_reg = KNeighborsRegressor() knn_reg.fit(X_train,y_train) knn_reg.score(x_test,y_test) #0.5865412198300899
2.使用knn進行網格搜索,找到最優參數,並測出算法的精確度
from sklearn.neighbors import KNeighborsRegressor knn_reg = KNeighborsRegressor() from sklearn.model_selection import GridSearchCV param_grid = [ { 'weights': ['uniform'], 'n_neighbors':[i for i in range(1,11)] }, { 'weights':['distance'], 'n_neighbors':[i for i in range(1,11)], 'p':[i for i in range(1,6)] } ] knn_reg = KNeighborsRegressor() grid_search=GridSearchCV(knn_reg,param_grid,n_jobs=-1,verbose=2) grid_search.fit(X_train,y_train) #最優超參數 grid_search.best_params_ #{'n_neighbors': 5, 'p': 1, 'weights': 'distance'} #使用最優超參數得到的算法精確度 grid_search.best_estimator_.score(x_test,y_test) #0.7044357727037996
3.兩種方式的對比
在上述兩種方法中,看上去第一種方法的精確度比第二中方法的精確度要高,但是我們能說第一種算法的精確度比第二種方法的精確度好嗎?答案是否定的,因為兩種方法的精確度的計算方法是不一樣的,比較的指標參數也是不一樣的,因此,我們不能武斷的下結論說算法一比第二種算法的精確度高。
