線性回歸-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')

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')

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ù)值分析中的線性擬合。
工程師必備
- 項(xiàng)目客服
- 培訓(xùn)客服
- 平臺(tái)客服
TOP




















