線性回歸-sklearn(python)

摘要:本文主要展示scikit-learn中關(guān)于線性回歸模型的使用,涉及到線性回歸,嶺回歸,Lasso回歸,ElasticNet回歸;

00 安裝scikit-learn庫(kù)

pip install scikit-learn

01 獲取sklearn中糖尿病患者數(shù)據(jù)

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets, linear_model

diabetes=datasets.load_diabetes()

train_x=diabetes.data[:342,:]
train_y=diabetes.target[:342].reshape(-1,1)
test_x=diabetes.data[342:,:]
test_y=diabetes.target[342:].reshape(-1,1)

02 線性回歸

regre=linear_model.LinearRegression()
regre.fit(train_x,train_y)

獲取回歸模型參數(shù):

regre.coef_
Out[16]:
array([[  -8.41868608, -246.87356823,  515.48111342,  302.57455473,
        -403.03503059,  160.72498918,  -73.58961448,  127.08804647,
         609.91854338,   87.69439173]])

regre.intercept_
Out[17]: array([152.09317069])

regre.score(test_x,test_y)
Out[21]: 0.5552383976823123

03 嶺回歸(有修正的線性回歸)

regre=linear_model.Ridge()
regre.fit(train_x,train_y)

regre.coef_
Out[25]:
array([[  30.23105215,  -75.59400039,  263.07606461,  171.64536287,
          16.42309993,  -18.29766085, -141.13547568,  120.87048228,
         238.88367448,  110.31896657]])

regre.intercept_
Out[23]: array([152.1268356])

regre.score(test_x,test_y)
Out[26]: 0.4486301450146465

嶺回歸中alpha參數(shù)對(duì)score的影響:

alphas=[0.01,0.02,0.05,0.1,0.2,0.5,1,2,5,10,20,50,100,200,500,1000]
scores1=[]
for i in alphas:
    regre=linear_model.Ridge(alpha=i,solver='auto')
    regre.fit(train_x,train_y)
    scores1.append(regre.score(test_x,test_y))

plt.figure(figsize=(10,6))
plt.plot(alphas,scores)
plt.xscale('log')

線性回歸-sklearn(python)的圖1


04 Lasso回歸(有修正的線性回歸)

regre=linear_model.Lasso()
regre.fit(train_x,train_y)

regre.coef_
Out[30]:
array([  0.        ,  -0.        , 333.61975523,   0.        ,
         0.        ,   0.        ,  -0.        ,   0.        ,
       331.42173214,   0.        ])

regre.intercept_
Out[31]: array([152.21167302])

regre.score(test_x,test_y)
Out[32]: 0.3719078265490897

Lasso回歸中alpha對(duì)score的影響:

alphas=[0.01,0.02,0.05,0.1,0.2,0.5,1,2,5,10,20,50,100,200,500,1000]
scores=[]
for i in alphas:
    regre=linear_model.Lasso(alpha=i)
    regre.fit(train_x,train_y)
    scores.append(regre.score(test_x,test_y))

plt.figure(figsize=(10,6))
plt.plot(alphas,scores)
plt.xscale('log')

線性回歸-sklearn(python)的圖2


05 ElasticNet回歸(有修正的線性回歸)

regre=linear_model.ElasticNet()
regre.fit(train_x,train_y)

regre.coef_
Out[36]:
array([ 0.32882513,  0.        ,  3.0804742 ,  2.00354529,  0.59170079,
        0.32935072, -1.88302997,  2.31361467,  3.07962468,  1.76365421])

regre.intercept_
Out[38]: array([152.01410108])

regre.score(test_x,test_y)
Out[39]: 0.008764469066067981

ElastieNet回歸中alpha,l1_ratio參數(shù)對(duì)score的影響:

regre=linear_model.ElasticNet(alpha=0.01,l1_ratio=0.01)
regre.fit(train_x,train_y)
regre.coef_
regre.intercept_
regre.predict(test_x)
regre.score(test_x,test_y)
Out[40]: 0.3009856651603322

總結(jié):

01 線性回歸分為:一元線性回歸和多元線性回歸;本文展示的是10個(gè)自變量的多元回歸,所以coef_有10個(gè)。

02 嶺回歸,Lasso回歸,ElasticNet回歸中,alpha參數(shù)默認(rèn)為1。

03 ElasticNet回歸中,l1_ratio參數(shù)默認(rèn)為0.5。

04 線性回歸其實(shí)就是數(shù)值分析中的線性擬合。

登錄后免費(fèi)查看全文
立即登錄
App下載
技術(shù)鄰APP
工程師必備
  • 項(xiàng)目客服
  • 培訓(xùn)客服
  • 平臺(tái)客服

TOP

6
3
1