回歸算法--多元線性回歸


一.什么是多元線性回歸

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

 

二.多元線性回歸的一些推導過程

 

 

 

 

 

三.使用代碼來實現多元線性回歸

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.兩種方式的對比

在上述兩種方法中,看上去第一種方法的精確度比第二中方法的精確度要高,但是我們能說第一種算法的精確度比第二種方法的精確度好嗎?答案是否定的,因為兩種方法的精確度的計算方法是不一樣的,比較的指標參數也是不一樣的,因此,我們不能武斷的下結論說算法一比第二種算法的精確度高。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM