欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Scikit-Learn实现线性回归

程序员文章站 2023-11-20 23:43:40
Scikit-learn最早由数据科学家David Cournapeau 在2007 年发起,需要NumPy和SciPy等其他包的支持,是Python语言中专门针对机器学习应用而发展起来的一款开源框架。作为专门面向机器学习的Python开源框架,Scikit-learn可以在一定范围内为开发者提供非常好的帮助。它内部实现了各种各样成熟的算法,容易安装和使用,样例丰富,而且教程和文档也非常详细。线性回归模型(linear-reggration)是机器学习中最基础也是最简单的算法。主要是拟合y =...

Scikit-learn最早由数据科学家David Cournapeau 在2007 年发起,需要NumPy和SciPy等其他包的支持,是Python语言中专门针对机器学习应用而发展起来的一款开源框架。

  • 作为专门面向机器学习的Python开源框架,Scikit-learn可以在一定范围内为开发者提供非常好的帮助。它内部实现了各种各样成熟的算法,容易安装和使用,样例丰富,而且教程和文档也非常详细。

  • 线性回归模型(linear-reggration)是机器学习中最基础也是最简单的算法。主要是拟合y = ax + b这样一个公式,其中a,b都是向量。通过输入数据利用最小二乘法直接求出参数a,b
    线性回归在scikit -learn的linear_model模块中,只需从相应的位置导入即可,首先我们先导入sklearn ,Python数值处理模块numpy和Python的画图工具matploylib。

from sklearn import datasets 
from sklearn.linear_model import LinearRegression
import numpy as np 
import matplotlib.pyplot as plt 
from sklearn.model_selection import train_test_split
  • 然后从sklearn的datasets中导入波士顿房价数据集
loaded_data = datasets.load_boston() 
X_data = loaded_data.data 
y_data = loaded_data.target
  • 查看一下波士顿 房价数据集的特征名称
loaded_data.feature_names
>> array(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD',
       'TAX', 'PTRATIO', 'B', 'LSTAT'], dtype='<U7')
  • 下面划分数据集,一部分用于训练,另一部分用来做测试,sklearn中自然也有相应的方法可以直接实现,其中random_state是一个随机种子,可以是任意一个数
X_train,X_test,y_train,y_test = train_test_split(X_data,y_data,test_size = 0.3,random_state = 42) 
model = LinearRegression() 
model.fit(X_train,y_train)
  • 上述过程已经训练好了一个线性回归模型,调用model.predict可以预测某一个或者某一些输入值相应的输出
model.predict(X_test[:5,:])
>> array([28.64896005, 36.49501384, 15.4111932 , 25.40321303, 18.85527988])
  • 我们可以通过查看y_test的真实值,对比模型预测值与真实值的差距。
y_test[:5]
>> array([23.6, 32.4, 13.6, 22.8, 16.1])
  • 同时可以查看模型的斜率和截距,也就是线性回归模型y = ax + b中的a,b
a = model.coef_                        # 模型的斜率(权重)
b = model.intercept_                   #模型的截距(偏置)
print('模型的斜率是:{0} \n相应的截距是:{1}'.format(a,b))
>> 模型的斜率是:[-1.33470103e-01  3.58089136e-02  4.95226452e-02  3.11983512e+00  
   -1.54170609e+01  4.05719923e+00 -1.08208352e-02  -1.38599824e+00   
    2.42727340e-01 -8.70223437e-03 -9.10685208e-01  1.17941159e-02 
   -5.47113313e-01]
   相应的截距是:31.63108403569312
  • 下面查看R²拟合优度和模型得分,R²拟合优度是指回归直线对观测值的拟合程度。R²的范围是0-1。R²的值越接近1,说明回归直线对观测值的拟合程度越好;反之,R²的值越小,说明回归直线对观测值的拟合程度越差。
y_hat = model.predict(X_test) 
from sklearn.metrics import r2_score 
r2_score(y_hat,y_test)                      #  0.669370269149561
r2_score(y_test,y_hat)                      # 0.711226005748496 
r2 = model.score(X_test,y_test)
r2                                          # 0.711226005748496
>> 0.711226005748496
  • 可以画图更直观的查看一下模型的拟合情况
plt.plot(range(len(y_test)),sorted(y_test),c='k',label = 'real')
plt.plot(range(len(y_hat)),sorted(y_hat),c='r',label = 'predict')
plt.legend()
plt.show()
 

Scikit-Learn实现线性回归

本文地址:https://blog.csdn.net/qq_44971458/article/details/107092324