Python scikit-learn 做线性回归的示例代码
作者:陆勤 发布时间:2022-05-03 11:00:54
一、概述
机器学习算法在近几年大数据点燃的热火熏陶下已经变得被人所“熟知”,就算不懂得其中各算法理论,叫你喊上一两个著名算法的名字,你也能昂首挺胸脱口而出。当然了,算法之林虽大,但能者还是有限,能适应某些环境并取得较好效果的算法会脱颖而出,而表现平平者则被历史所淡忘。随着机器学习社区的发展和实践验证,这群脱颖而出者也逐渐被人所认可和青睐,同时获得了更多社区力量的支持、改进和推广。
以最广泛的分类算法为例,大致可以分为线性和非线性两大派别。线性算法有著名的逻辑回归、朴素贝叶斯、最大熵等,非线性算法有随机森林、决策树、神经网络、核机器等等。线性算法举的大旗是训练和预测的效率比较高,但最终效果对特征的依赖程度较高,需要数据在特征层面上是线性可分的。因此,使用线性算法需要在特征工程上下不少功夫,尽量对特征进行选择、变换或者组合等使得特征具有区分性。而非线性算法则牛逼点,可以建模复杂的分类面,从而能更好的拟合数据。
那在我们选择了特征的基础上,哪个机器学习算法能取得更好的效果呢?谁也不知道。实践是检验哪个好的不二标准。那难道要苦逼到写五六个机器学习的代码吗?No,机器学习社区的力量是强大的,码农界的共识是不重复造轮子!因此,对某些较为成熟的算法,总有某些优秀的库可以直接使用,省去了大伙调研的大部分时间。
基于目前使用python较多,而python界中远近闻名的机器学习库要数scikit-learn莫属了。这个库优点很多。简单易用,接口抽象得非常好,而且文档支持实在感人。本文中,我们可以封装其中的很多机器学习算法,然后进行一次性测试,从而便于分析取优。当然了,针对具体算法,超参调优也非常重要。
二、Scikit-learn的python实践
本篇文章利用线性回归算法预测波士顿的房价。波士顿房价数据集包含波士顿郊区住房价值的信息。
第一步:Python库导入
%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import sklearn
第二步:数据获取和理解
波士顿数据集是scikit-learn的内置数据集,可以直接拿来使用。
from sklearn.datasets import load_boston
boston = load_boston()
print(boston.keys())
dict_keys([‘data', ‘target', ‘feature_names', ‘DESCR'])
print(boston.data.shape)
(506, 13)
print(boston.feature_names)
[‘CRIM' ‘ZN' ‘INDUS' ‘CHAS' ‘NOX' ‘RM' ‘AGE' ‘DIS' ‘RAD' ‘TAX' ‘PTRATIO''B' ‘LSTAT']
结论:波士顿数据集506个样本,14个特征。
print(boston.DESCR)
bos = pd.DataFrame(boston.data)
print(bos.head())
0 1 2 3 4 5 6 7 8 9 10 \
0 0.00632 18.0 2.31 0.0 0.538 6.575 65.2 4.0900 1.0 296.0 15.3
1 0.02731 0.0 7.07 0.0 0.469 6.421 78.9 4.9671 2.0 242.0 17.8
2 0.02729 0.0 7.07 0.0 0.469 7.185 61.1 4.9671 2.0 242.0 17.8
3 0.03237 0.0 2.18 0.0 0.458 6.998 45.8 6.0622 3.0 222.0 18.7
4 0.06905 0.0 2.18 0.0 0.458 7.147 54.2 6.0622 3.0 222.0 18.7
11 12
0 396.90 4.98
1 396.90 9.14
2 392.83 4.03
3 394.63 2.94
4 396.90 5.33
bos.columns = boston.feature_names
print(bos.head())
print(boston.target[:5])
bos['PRICE'] = boston.target
bos.head()
第三步:数据模型构建——线性回归
from sklearn.linear_model import LinearRegression
X = bos.drop('PRICE', axis=1)
lm = LinearRegression()
lm
lm.fit(X, bos.PRICE)
print('线性回归算法w值:', lm.coef_)
print('线性回归算法b值: ', lm.intercept_)
import matplotlib.font_manager as fm
myfont = fm.FontProperties(fname='C:/Windows/Fonts/msyh.ttc')
plt.scatter(bos.RM, bos.PRICE)
plt.xlabel(u'住宅平均房间数', fontproperties=myfont)
plt.ylabel(u'房屋价格', fontproperties=myfont)
plt.title(u'RM与PRICE的关系', fontproperties=myfont)
plt.show()
第四步:数据模型应用——预测房价
lm.predict(X)[0:5]
array([ 30.00821269, 25.0298606 , 30.5702317 , 28.60814055, 27.94288232])
mse = np.mean((bos.PRICE - lm.predict(X)) ** 2)
print(mse)
21.897779217687486
总结
1 使用.DESCR探索波士顿数据集,业务目标是预测波士顿郊区住房的房价;
2 使用scikit-learn针对整个数据集拟合线性回归模型,并计算均方误差。
思考环节
1 对数据集分割成训练数据集和测试数据集
2 训练数据集训练线性回归模型,利用线性回归模型对测试数据集进行预测
3 计算训练模型的MSE和测试数据集预测结果的MSE
4 绘制测试数据集的残差图
来源:http://shujuren.org/article/510.html


猜你喜欢
- 程序测试是展现BUG存在的有效方式,但令人绝望的是它不足以展现其缺位。——艾兹格·迪杰斯特拉(Edsger W. Dijkstra)算法审查
- 目前我使用到的python中执行cmd的方式有三种使用os.system("cmd")  
- 编写聊天程序的服务端代码和客户端代码。完成后,先启动服务端代码,然 后启动客户端程序输人问题,服务端可以返回相应的答案。要求服务端代码具 有
- 本文实例总结了Python正则表达式常用函数。分享给大家供大家参考,具体如下:re.match()函数原型:match(pattern, s
- 逻辑比较简单 ,直接上代码 定时发送直接使用了win服务器的定时任务来定时执行脚本#coding:utf-8from __futu
- pytorch中构建卷积层一般使用nn.Conv2d方法,有些情况下我们需要自定义卷积核的权值weight,而nn.Conv2d中的卷积参数
- Gravatar注册地址: https://en.gravatar.com/"""`Gravatar <
- 1.sp_helpsort SELECT SERVERPROPERTY ('Collation') 查看你的排序规则. 不过
- 实际项目中遇到python模块相互引用问题,查资料,终于算是弄明白了。首先交叉引用或是相互引用,实际上就是导入循环,关于导入循环的详细说明,
- 第一招、mysql服务的启动和停止net stop mysqlnet start mysql第二招、登陆mysql语法如下: mysql -
- 最近为了熟悉一下 js 用有道翻译练了一下手,写一篇博客记录一下,也希望能对大家有所启迪,不过这些网站更新太快,可能大家尝试的时候会有所不同
- js的setTimeout方法用处比较多,通常用在页面刷新了、延迟执行了等等。但是很多javascript新手对setTimeout的用法还
- python 线程池的四种实现方式线程简述 一个程序运行起来后,一定有一个执行代码的东西,这个东西就是线程; 一般计算(
- eval函数接收一个参数s,如果s不是字符串,则直接返回s。否则执行s语句。如果s语句执行结果是一个值,则返回此值,否则返回undefine
- 要是XHTML与CSS能面向对象。。太阳应该从北边升起了。但是,凡事都应该带着OO的思想来看问题,也勉强可以凑数拉。其实,早在零几年就有人提
- 本文实例总结了php随机取mysql记录方法。分享给大家供大家参考。具体分析如下:在php中要随机取mysql记录我们可以直接使用mysql
- mysql 5.5 安装配置方法图文教程回忆一下mysql 5.5 安装配置方法,整理mysql 5.5 安装配置教程笔记,分享给大家。My
- 我想大家在用Sql2005一般都是.NET2005自带的SQL Server 2005是SQL Server2005 Express版本的,
- ---- Oracle是关系型数据库管理系统,它功能强大、性能卓越,在当今大型数据库管理系统中占有重要地位。在我们开发的一MIS
- 本文实现的原理很简单,优化方法是用的梯度下降。后面有测试结果。先来看看实现的示例代码:# coding=utf-8from math imp