Scikit-learn实现线性回归

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

在这里插入图片描述

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值