如何在python中实现线性回归
作者:刘早起 发布时间:2022-03-29 00:24:30
线性回归是基本的统计和机器学习技术之一。经济,计算机科学,社会科学等等学科中,无论是统计分析,或者是机器学习,还是科学计算,都有很大的机会需要用到线性模型。建议先学习它,然后再尝试更复杂的方法。
本文主要介绍如何逐步在Python中实现线性回归。而至于线性回归的数学推导、线性回归具体怎样工作,参数选择如何改进回归模型将在以后说明。
回归
回归分析是统计和机器学习中最重要的领域之一。有许多可用的回归方法。线性回归就是其中之一。而线性回归可能是最重要且使用最广泛的回归技术之一。这是最简单的回归方法之一。它的主要优点之一是线性回归得到的结果十分容易解释。那么回归主要有:
简单线性回归
多元线性回归
多项式回归
如何在python中实现线性回归
用到的packages
NumPy
NumPy是Python的基础科学软件包,它允许在单维和多维数组上执行许多高性能操作。
scikit-learn
scikit-learn是在NumPy和其他一些软件包的基础上广泛使用的Python机器学习库。它提供了预处理数据,减少维数,实现回归,分类,聚类等的方法。
statsmodels
如果要实现线性回归并且需要功能超出scikit-learn的范围,则应考虑使用statsmodels可以用于估算统计模型,执行测试等。
scikit-learn的简单线性回归
1.导入用到的packages和类
import numpy as np
from sklearn.linear_model import LinearRegression
2.创建数据
x = np.array([5, 15, 25, 35, 45, 55]).reshape((-1, 1))
y = np.array([5, 20, 14, 32, 22, 38])
现在就生成了两个数组:输入x(回归变量)和输出y(预测变量),来看看
>>> print(x)
[[ 5]
[15]
[25]
[35]
[45]
[55]]
>>> print(y)
[ 5 20 14 32 22 38]
可以看到x是二维的而y是一维的,因为在复杂一点的模型中,系数不只一个。这里就用到了.reshape()来进行转换。
3.建立模型
创建一个类的实例LinearRegression,它将代表回归模型:
model = LinearRegression()
现在开始拟合模型,首先可以调用.fit()函数来得到优的?₀和?₁,具体有下面两种等价方法
model.fit(x, y)
model = LinearRegression().fit(x, y)
4.查看结果
拟合模型之后就是查看与模型相关的各项参数
>>> r_sq = model.score(x, y)
>>> print('coefficient of determination:', r_sq)
coefficient of determination: 0.715875613747954
.score()函数可以获得模型的?²,再看看系数
>>> print('intercept:', model.intercept_)
intercept: 5.633333333333329
>>> print('slope:', model.coef_)
slope: [0.54]
可以看到系数和截距分别为[0.54]和5.6333,注意系数是一个二维数组哦。
5.预测效果
一般而言,线性模型最后就是用来预测,我们来看下预测效果
>>> y_pred = model.predict(x)
>>> print('predicted response:', y_pred, sep='\n')
predicted response:
[ 8.33333333 13.73333333 19.13333333 24.53333333 29.93333333 35.33333333]
当然也可以使用下面的方法
>>> y_pred = model.intercept_ + model.coef_ * x
>>> print('predicted response:', y_pred, sep='\n')
predicted response:
[[ 8.33333333]
[13.73333333]
[19.13333333]
[24.53333333]
[29.93333333]
[35.33333333]]
除了可以利用样本内的数据进行预测,也可以用样本外的数据进行预测。
>>> x_new = np.arange(5).reshape((-1, 1))
>>> print(x_new)
[[0]
[1]
[2]
[3]
[4]]
>>> y_new = model.predict(x_new)
>>> print(y_new)
[5.63333333 6.17333333 6.71333333 7.25333333 7.79333333]
至此,一个简单的线性回归模型就建立起来了。
scikit-learn的多元线性回归
直接开始吧
1.导入包和类,并创建数据
import numpy as np
from sklearn.linear_model import LinearRegression
x = [[0, 1], [5, 1], [15, 2], [25, 5], [35, 11], [45, 15], [55, 34], [60, 35]]
y = [4, 5, 20, 14, 32, 22, 38, 43]
x, y = np.array(x), np.array(y)
看看数据
>>> print(x)
[[ 0 1]
[ 5 1]
[15 2]
[25 5]
[35 11]
[45 15]
[55 34]
[60 35]]
>>> print(y)
[ 4 5 20 14 32 22 38 43]
2.建立多元回归模型
model = LinearRegression().fit(x, y)
3.查看结果
>>> r_sq = model.score(x, y)
>>> print('coefficient of determination:', r_sq)
coefficient of determination: 0.8615939258756776
>>> print('intercept:', model.intercept_)
intercept: 5.52257927519819
>>> print('slope:', model.coef_)
slope: [0.44706965 0.25502548]
4.预测
#样本内
>>> y_pred = model.predict(x)
>>> print('predicted response:', y_pred, sep='\n')
predicted response:
[ 5.77760476 8.012953 12.73867497 17.9744479 23.97529728 29.4660957
38.78227633 41.27265006]
#样本外
>>> x_new = np.arange(10).reshape((-1, 2))
>>> print(x_new)
[[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
>>> y_new = model.predict(x_new)
>>> print(y_new)
[ 5.77760476 7.18179502 8.58598528 9.99017554 11.3943658 ]
所有的结果都在结果里,就不再过多解释。再看看多项式回归如何实现。
多项式回归
导入包和创建数据
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
x = np.array([5, 15, 25, 35, 45, 55]).reshape((-1, 1))
y = np.array([15, 11, 2, 8, 25, 32])
多项式回归和之前不一样的是需要对数据转换,因为模型里包含?²等变量,所以在创建数据之后要将x转换为?²。
transformer = PolynomialFeatures(degree=2, include_bias=False)
再看看数据
>>> print(x_)
[[ 5. 25.]
[ 15. 225.]
[ 25. 625.]
[ 35. 1225.]
[ 45. 2025.]
[ 55. 3025.]]
建模
接下来的步骤就和之前的类似了。其实多项式回归只是多了个数据转换的步骤,因此从某种意义上,多项式回归也算是线性回归。
model = LinearRegression().fit(x_, y)
查看结果
>>> r_sq = model.score(x_, y)
>>> print('coefficient of determination:', r_sq)
coefficient of determination: 0.8908516262498564
>>> print('intercept:', model.intercept_)
intercept: 21.372321428571425
>>> print('coefficients:', model.coef_)
coefficients: [-1.32357143 0.02839286]
预测
>>> y_pred = model.predict(x_)
>>> print('predicted response:', y_pred, sep='\n')
predicted response:
[15.46428571 7.90714286 6.02857143 9.82857143 19.30714286 34.46428571]
那么本次多项式回归的所有结果都在上面了,一目了然。
来源:https://cloud.tencent.com/developer/article/1618713


猜你喜欢
- 本文实例讲述了PHP实现的AES双向加密解密功能。分享给大家供大家参考,具体如下:<?php/* * Created on 2018-
- 前言Vux 是基于 Vue 和 Weui 开发的手机端页面 UI 组件库,开发初衷是满足公司的微信端表单需求,因为第三方的调查问卷表单系统在
- 在简略的说之前,首先要对RW锁的结构有一个大致的了解type RWMutex struct { w
- <% dim conn,mdbfile mdbfile=server.mappath("数据库名称.mdb") s
- center()方法返回集中在长度宽度的字符串。填充是通过使用specifiedfillchar。默认填充字符是一个空格。语法以
- 1. 服务器优化优化原则:内存里的数据要比磁盘上的数据访问起来快;站数据尽可能长时间地留在内存里能减少磁盘读写活动的工作量;让索引信息留在内
- 目录1.引言2.获取目标网站3.爬取目标网站4.解析爬取内容4.1. 解析全国今日总况4.2. 解析全国各省份疫情情况4.3. 解析江苏各地
- 文件和文件组简介在SQL Server中,数据库在硬盘上的存储方式和普通文件在Windows中的存储方式没有什么不同,仅仅是几个文件而已。S
- 1。formpanel数据源和grid相同,使用 Form.getForm().loadRecord(row);则数据便可自动加载在form
- 怎么从mysql从官网下载到安装到客户端的登陆呢?这篇文章给你讲的清清楚楚。第一步:到Mysql官网下载。从[https://dev.mys
- substr(string,start,length)参数:1,string 即你要截取的字符串2,start 即要截取的开始位置(0表示从
- 这些日子一直在简书上使用markdown写作,已经渐渐的痴迷于这种简洁纯粹的写作方式了。不过就我逐渐入门markdown的写作过程来看,目前
- F.avg_pool1d()数据是三维输入input维度: (batch_size,channels,width)channel可以看成高度
- 代码如下:'************************************ '截取文字长度函数,支持UT
- 如今大部分网站仍然采用表格嵌套内容的方式来制作网站,虽然此方法对于我们来说比较熟悉、比较上手;但是,它却阻碍了一种更好的、更有亲和力的、更灵
- 铺垫在大量的实践中,似乎我们总是通过类似的方式来使用异步编程:监听事件事件发生执行对应的回调函数回调完成(可能产生新的事件添加进监听队列)回
- pycurl是功能强大的python的url包,是用c语言写的,速度很快,比urllib和httplib都快调用方法:import pycu
- 前言前面安装过mysql5.6,时隔三个月,开发那边反馈需要在MySQL中处理JSON类型的数据,查看文档,JSON是在5.7支持的新特性。
- 本文实例讲述了Python面向对象程序设计类的封装与继承用法。分享给大家供大家参考,具体如下:访问限制(封装)1、概念面向对象语言的三大特征
- import osdef load() : filename = os.getcwd() + r'