python线性回归
一.理论基础
1.回归公式
对于单元的线性回归,我们有:f(x) = kx + b 的方程(k代表权重,b代表截距)。
对于多元线性回归,我们有:
或者为了简化,干脆将b视为k0·x0,,其中k0为1,于是我们就有:
2.损失函数
3.误差衡量
MSE,RMSE,MAE越接近于0越好,R方越接近于1越好。
MSE平均平方误差(mean squared error)
RMSE,是MSE的开根号
MAE平均绝对值误差(mean absolute error)
R方
其中y_hat是预测值。
二.代码实现
本次,我们将用iris数据集实现单元线性回归的机器学习,使用boston数据集实现多元线性回归的机器学习。在python中,单元线性回归与多元线性回归的操作完全一样,这里只是为了演示而将其一分为二。
1.鸢尾花花瓣长度与宽度的线性回归
# 导入鸢尾花数据集
from sklearn.datasets import load_iris
# 导入用于分割训练集和测试集的类
from sklearn.model_selection import train_test_split
# 导入线性回归类
from sklearn.linear_model import LinearRegression
import numpy as np
iris = load_iris()
'''
iris数据集的第三列是鸢尾花长度,第四列是鸢尾花宽度
x和y就是自变量和因变量
reshape(-1,1)就是将iris.data[:,3]由一维数组转置为二维数组,
以便于与iris.data[:,2]进行运算
'''
x,y = iris.data[:,2].reshape(-1,1),iris.data[:,3]
lr = LinearRegression()
'''
train_test_split可以进行训练集与测试集的拆分,
返回值分别为训练集的x,测试集的x,训练集的y,测试集的y,
分别赋值给x_train,x_test,y_train,y_test,
test_size:测试集占比
random_state:选定随机种子
'''
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size = 0.25,random_state = 0)
# 利用训练集进行机器学习
lr.fit(x_train,y_train)
# 权重为lr.coef_
# 截距为lr.intercept_
# 运用训练出来的模型得出测试集的预测值
y_hat = lr.predict(x_test)
# 比较测试集的y值与预测出来的y值的前5条数据
print(y_train[:5])
print(y_hat[:5])
# 评价模型的准确性,用测试集来评价
# 导入分别用于求MSE,MAE和R方的包
from sklearn.metrics import mean_squared_error,mean_absolute_error,r2_score
# 求解MSE
print('MSE:',mean_squared_error(y_test,y_hat))
# 求解RMSE,是MSE的开根号
print('RMSE:',np.sqrt(mean_squared_error(y_test,y_hat))
# 求解MAE
print('MAE:',mean_absolute_error(y_test,y_hat))
# 求解R方,有两种方法,注意lr.score的参数是x_test,y_test
print('R方:',r2_score(y_test,y_hat))
print('R方:',lr.score(x_test,y_test))
# 导入matplotlib模块,进行可视化
from matplotlib import pyplot as plt
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['font.size'] = 15
plt.figure(figsize = (20,8))
# 训练集散点图
plt.scatter(x_train,y_train,color = 'green',marker = 'o',label = '训练集')
# 测试集散点图
plt.scatter(x_test,y_test,color = 'orange',marker = 'o',label = '测试集')
# 回归线
plt.plot(x,lr.predict(x),'r-')
plt.legend()
plt.xlabel('花瓣长度')
plt.ylabel('花瓣宽度')
就这样画出了一张很丑的图,如果想画更精美的图或者其他方面的比较,各位读者不妨自己去试一试吧。
刚刚我们做了对鸢尾花花瓣长度和宽度的线性回归,探讨长度与宽度的关系,探究鸢尾花的花瓣宽度受长度变化的趋势是怎么样的。但是在现实生活当中的数据是十分复杂的,像这种单因素影响的事物是比较少的,我们需要引入多元线性回归来对多个因素的权重进行分配,从而与复杂事物相符合。
2.boston房价预测(多元线性回归)
呐,boston数据集的介绍在这里了,我就不详细介绍了
现在,我们要探讨boston当中每一个因素对房价的影响有多大,这就是一个多因素影响的典型例子。
import pandas as pd
import numpy as np
from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
boston = load_boston()
# lr继承LinearRegression类
lr = LinearRegression()
# 因为boston.data本身就是二维数组,所以无需转置,boston.target是房价
x,y = boston.data,boston.target
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size = 0.15,random_state = 0)
lr.fit(x_train,y_train)
# 显示权重,因为有很多因素,所以权重也有很多个
print(lr.coef_)
# 显示截距
print(lr.intercept_)
y_hat = lr.predict(x_test)
# 模型评判仍然是用那几个包,这里不再赘述。
结果如下,可以发现每一个因素都有相应的权重。
[-1.24536078e-01 4.06088227e-02 5.56827689e-03 2.17301021e+00
-1.72015611e+01 4.02315239e+00 -4.62527553e-03 -1.39681074e+00
2.84078987e-01 -1.17305066e-02 -1.06970964e+00 1.02237522e-02
-4.54390752e-01]
36.09267761760974本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理
想要获取更多Python学习资料可以加
QQ:2955637827私聊
或加Q群630390733
大家一起来学习讨论吧!
python线性回归的更多相关文章
- Python 线性回归(Linear Regression) 基本理解
背景 学习 Linear Regression in Python – Real Python,对线性回归理论上的理解做个回顾,文章是前天读完,今天凭着记忆和理解写一遍,再回温更正. 线性回归(Lin ...
- python 线性回归示例
说明:此文的第一部分参考了这里 用python进行线性回归分析非常方便,有现成的库可以使用比如:numpy.linalog.lstsq例子.scipy.stats.linregress例子.panda ...
- Python 线性回归(Linear Regression) - 到底什么是 regression?
背景 学习 Linear Regression in Python – Real Python,对 regression 一词比较疑惑. 这个 linear Regression 中的 Regress ...
- Python - 线性回归(Linear Regression) 的 Python 实现
背景 学习 Linear Regression in Python – Real Python,前面几篇文章分别讲了"regression怎么理解","线性回归怎么理解& ...
- 机器学习之路: python线性回归 过拟合 L1与L2正则化
git:https://github.com/linyi0604/MachineLearning 正则化: 提高模型在未知数据上的泛化能力 避免参数过拟合正则化常用的方法: 在目标函数上增加对参数的惩 ...
- 机器学习之路: python 线性回归LinearRegression, 随机参数回归SGDRegressor 预测波士顿房价
python3学习使用api 线性回归,和 随机参数回归 git: https://github.com/linyi0604/MachineLearning from sklearn.datasets ...
- 机器学习之路:python线性回归分类器 LogisticRegression SGDClassifier 进行良恶性肿瘤分类预测
使用python3 学习了线性回归的api 分别使用逻辑斯蒂回归 和 随机参数估计回归 对良恶性肿瘤进行预测 我把数据集下载到了本地,可以来我的git下载源代码和数据集:https://gith ...
- Python线性回归算法【解析解,sklearn机器学习库】
一.概述 参考博客:https://www.cnblogs.com/yszd/p/8529704.html 二.代码实现[解析解] import numpy as np import matplotl ...
- ml的线性回归应用(python语言)
线性回归的模型是:y=theta0*x+theta1 其中theta0,theta1是我们希望得到的系数和截距. 下面是代码实例: 1. 用自定义数据来看看格式: # -*- coding:utf ...
随机推荐
- vue获取微博授权URL
1.在Vue**页面加载时动态发送请求获取微博授权url 1.1 在 components\common\lab_header.vue 中写oauth动态获取微 博授权URL // 获取微博登录地址 ...
- .nnmodel to .mlmodel
做项目时遇到.nnmodel 模型,不知道这是什么框架模型,没有头绪,抓住文件magic number是lzfse compressed, compressed tables. 在https://gi ...
- 关于热力图的loss的一点感想
网络的输出的热力图和gt相减的差矩阵,求其最大特征值的平方作为loss. 若图像h w不相等,可以使用奇异值代替特征值.奇异值往往对应着矩阵中隐含的重要信息,且重要性和奇异值大小正相关.每个矩阵A都可 ...
- 通过sql 语句将多行数据拼接到一行中
- 第7.27节 Python案例详解: @property装饰器定义属性访问方法getter、setter、deleter
上节详细介绍了利用@property装饰器定义属性的语法,本节通过具体案例来进一步说明. 一. 案例说明 本节的案例是定义Rectangle(长方形)类,为了说明问题,除构造函数外,其他方法都只 ...
- PyQt(Python+Qt)学习随笔:工具箱(QToolBox)的用途及标签部件项(tabbed widget item)作用介绍
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 1.概述 toolBox工具箱是一个容器部件,对应类为QToolBox,在其内有一列从上到下顺序排列 ...
- 自学linux——21. NFS服务器的搭建
NFS服务器的搭建 1.NFS的认识 NFS(Network File System即网络文件系统)服务最大的功能就是可以透过网络,让不同的机器.不同的操作系统.可以彼此分享文件,可以将远程 Linu ...
- RedHat操作指令第4篇
top(查看动态进程运行情况) top 是一个更加有用的命令,可以监视系统中不同的进程所使用的资源.它提供实时的系统状态信息. 显示进程的数据包括 PID.进程属主.优先级.%CPU.%memory等 ...
- buu学习记录(上)
前言:菜鸡误入buu,差点被打吐.不过学到了好多东西. 题目名称: (1)随便注 (2)高明的黑客 (3)CheckIn (4)Hack World (5)SSRF Me (6)piapiapia ( ...
- JVM 垃圾回收?全面详细安排!
写在前面: 小伙伴儿们,大家好!今天来学习Java虚拟机相关内容,作为面试必问的知识点,来深入了解一波! 思维导图: image-20201207153125210 1,判断对象是否死亡 我们在进行垃 ...