python线性回归_用Python实现线性回归算法

前几天我们介绍了线性回归模型的原理,今天我们主要来看如何用Python代码将线性回归写出来。

首先,打开我们的jupyter notebook,把常用的一些包都加载上吧:

import numpy as np

import pandas as pd

然后,加载我们的线性回归模型:

from sklearn.linear_model import LinearRegression

数据集就选择sklearn包自带的“波士顿房价预测数据集”:

from sklearn.datasets import load_boston

将数据集放到boston对象中,并查看它的内容:

boston = load_boston()

boston.keys()

dict_keys(['data', 'target', 'feature_names', 'DESCR', 'filename'])

影响房价的特征在data中,房价在target中,我们先来看下有哪些特征:

boston['feature_names']

array(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD',

'TAX', 'PTRATIO', 'B', 'LSTAT'], dtype='

可以看到,一共有13个特征之多。再看下房屋价格的前5行数据:

boston['target'][:5]

array([24. , 21.6, 34.7, 33.4, 36.2])

好了,下面先把数据集分成训练集和测试集:

from sklearn.model_selection import train_test_split

X_train,X_test,y_train,y_test = train_test_split(boston['data'],boston['target'],random_state=0)

构建我们的回归模型并训练它:

lr = LinearRegression()

lr.fit(X_train,y_train)

LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None,

normalize=False)

可以看到,返回了一个训练完成的线性回归模型。我们可以看到该线性模型的系数和截距:

lr.coef_ #系数

array([-1.17735289e-01, 4.40174969e-02, -5.76814314e-03, 2.39341594e+00,

-1.55894211e+01, 3.76896770e+00, -7.03517828e-03, -1.43495641e+00,

2.40081086e-01, -1.12972810e-02, -9.85546732e-01, 8.44443453e-03,

-4.99116797e-01])

可以看出,给我们的13个特征都加了一个系数。再来看下截距:

lr.intercept_ #截距

36.933255457118975

之后我们就可以进行预测了,这里用score方法可以直接看出该模型在训练集和测试集上的性能:

lr.score(X_train,y_train) #模型在训练集上的性能

0.7697699488741149

lr.score(X_test,y_test) #模型在测试集上的性能

0.6354638433202129

我们看到,模型在训练集上的精确度是77%左右,在测试集上是64%左右。测试集的精度低于训练集,有可能是过拟合,但鉴于两者精度都不高,也有欠拟合的可能性。

但我们还是用有正则化项、防止过拟合的岭回归来试试。首先,还是加载模型:

from sklearn.linear_model import Ridge

然后在训练集上使用它:

ridge_model = Ridge().fit(X_train,y_train)

最后,评估岭回归模型的性能:

ridge_model.score(X_train,y_train)

0.7678858330771393

ridge_model.score(X_test,y_test)

0.626618220461385

从上面的代码看出,我们的岭回归模型的泛化能力并没有提高,那就很有可能是我们的模型复杂度不够,需要给原始数据增加一些特征,这个我们后面会讨论。

除了岭回归,我们还有lasso回归,也是用来防止过拟合的,我们来看看它的表现如何:

from sklearn.linear_model import Lasso

lasso_model = Lasso().fit(X_train,y_train)

print(lasso_model.score(X_train,y_train))

print(lasso_model.score(X_test,y_test))

0.7150499874336981

0.551624705904991

可以看出,Lasso回归模型在训练集和测试集上的表现都很差,而且不如我们原始的线性模型,再次说明需要增加模型的复杂度。

还需要说明的是,Ridge和Lasso回归模型中,正则化项的系数是通过alpha参数来调节的。

更多干货内容,欢迎关注今日头条账号“人人都会机器学习”;你也可以搜索知识星球“自学机器学习”,里面也有精彩内容;还可以关注公众号:“数据实干家”,为你献上数据大餐。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值