Python实现多项式回归实战——以及与线性回归的拟合效果对比
对于给出的 数据做出散点图,可以大致看出模型是否适合做线性回归,但是,线性回归一定是拟合最好的模型吗?答案是否定的。有时候,多项式回归会得出拟合效果更好的模型,但是也需要注意过拟合的线性。
下面,还是以房屋面积预测房屋价格的数据为例:
读取数据,绘制散点图:
多项式回归
import matplotlib.font_manager as fm
import matplotlib.pyplot as plt
from sklearn import linear_model
import numpy as np
from sklearn.linear_model import LinearRegression #导入线性回归模型
from sklearn.preprocessing import PolynomialFeatures # 导入多项式回归模型# 字体
myfont = fm.FontProperties(fname='C:\Windows\Fonts\simsun.ttc')
# plt.figure() # 实例化作图变量
plt.title('房价面积价格样本', fontproperties = myfont) # 图像标题
plt.xlabel('面积(平方米)', fontproperties = myfont) # x轴文本
plt.ylabel('价格(万元)', fontproperties = myfont) # y轴文本
# plt.axis([30, 400, 100, 400])
plt.grid(True) # 是否绘制网格线# 训练数据(给定的房屋面积x和价格y)
X = [[50], [100], [150], [200], [250], [300]]
y = [[150], [200], [250], [280], [310], [330]]# 做最终效果预测的样本
X_test = [[250], [300]] # 用来做最终效果测试
y_test = [[310], [330]] # 用来做最终效果测试# 绘制散点图
# plt.plot(X, y, 'b.')#点
# plt.plot(X, y, 'b-')#线
plt.scatter(X, y, marker='*',color='blue',label='房价面积价格样本')
# plt.show()
先做出线性模型:
# 线性回归
model = LinearRegression()
model.fit(X,y)
# 模型拟合效果得分
print('一元线性回归 r-squared',model.score(X_test,y_test))
x2=[[30],[400]] # 所绘制直线的横坐标x的起点和终点
y2=model.predict(x2)
plt.plot(x2,y2,'g-') # 绿色的直线
# plt.show()
做出二项式回归模型,看拟合效果,同线性模型进行比较:
# 二次多项式回归
# 实例化一个二次多项式特征实例
quadratic_featurizer=PolynomialFeatures(degree=2)
# 用二次多项式对样本X值做变换
X_train_quadratic = quadratic_featurizer.fit_transform(X)
# 创建一个线性回归实例
regressor_model=linear_model.LinearRegression()
# 以多项式变换后的x值为输入,带入线性回归模型做训练
regressor_model.fit(X_train_quadratic,y)
# 设计x轴一系列点作为画图的x点集
xx=np.linspace(30,400,100)
# 把训练好X值的多项式特征实例应用到一系列点上,形成矩阵
xx_quadratic = quadratic_featurizer.transform(xx.reshape(xx.shape[0], 1))yy_predict = regressor_model.predict(xx_quadratic)# 用训练好的模型作图
plt.plot(xx, yy_predict, 'r-')X_test_quadratic = quadratic_featurizer.transform(X_test)
print('二次回归 r-squared', regressor_model.score(X_test_quadratic, y_test))
# plt.show() # 展示图像
得到图像:
红色的线就是二项式的回归模型,可以看出它是比线性回归模型对本案例的数据拟合效果要好一些,二者的拟合效果得分分别为:
那么,当前的二次回归是否是最好的呢?我们再做三次回归看一下:
# 三次回归
cubic_featurizer = PolynomialFeatures(degree=3)
X_train_cubic = cubic_featurizer.fit_transform(X)
regressor_cubic = LinearRegression()
regressor_cubic.fit(X_train_cubic, y)
xx_cubic = cubic_featurizer.transform(xx.reshape(xx.shape[0], 1))
plt.plot(xx, regressor_cubic.predict(xx_cubic))X_test_cubic = cubic_featurizer.transform(X_test)
print('三次回归 r-squared', regressor_cubic.score(X_test_cubic, y_test))
plt.show() # 展示图像
得到的图形为:
从图形来看,它和二次回归模型的拟合效果不相上下,分辨不出孰好孰坏,下面看一下拟合得分。
图形模型拟合效果得分为:
可以看出,三次回归的模型拟合得分比二次回归高,但是相差不多,从图形看来二者拟合效果都很好,因此我们在此种情况下选择二次回归,原因为三次回归可能出现了过拟合的现象。
Python实现多项式回归实战——以及与线性回归的拟合效果对比相关推荐
- python 立体匹配算法_OpenCV3.4两种立体匹配算法效果对比
以OpenCV自带的Aloe图像对为例: 1.BM算法(Block Matching) 参数设置如下: int numberOfDisparities = ((imgSize.width / 8) + ...
- 这本《Python+TensorFlow机器学习实战》给你送到家!
小伙伴们,本公众号很久没用送书啦,是不是很是期待呀?放心啦,这次每个大佬送5本书,一共25本!包邮到你家楼下,哈哈! 怎么送书呢? 方法当然是很简单啦,关注下面公众号,后台回复「抽奖」,弹出小程序二维 ...
- python线性回归可视化_【Python可视化5】Seaborn之线性回归
Seaborn是基于matplotlib的Python可视化库.它提供了一个高级界面来绘制有吸引力的统计图形.Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图更 ...
- python数据挖掘笔记】十八.线性回归及多项式回归分析四个案例分享
python数据挖掘课程]十八.线性回归及多项式回归分析四个案例分享 #2018-03-30 18:24:56 March Friday the 13 week, the 089 day SZ SSM ...
- Python数据分析与实战挖掘
<Python数据分析与实战挖掘> 张良均 基础篇 书推荐:<用python做科学计算> 扩展库 简介 Numpy数组支持,以及相应的高效处理函数 Scipy矩阵支持,以及相应 ...
- 【笔记】《Python数据分析与实战挖掘》
<Python数据分析与实战挖掘> 张良均 基础篇 书推荐:<用python做科学计算> 扩展库 简介 Numpy数组支持,以及相应的高效处理函数 Scipy矩阵支持,以及相应 ...
- Python 毕设精品实战案例——快速索引目录
1. 基于 python 的银行信贷风险评估 信贷业务又称为信贷资产或贷款业务,是商业银行最重要的资产业务,通过放款收回本金和利息,扣除成本后获得利润,所以信贷是商业银行的主要赢利手段.信用风险是金融 ...
- 精选合辑 | 30个Python数据分析及实战项目(含源码)
今天给大家推荐一个优质的Python公众号「法纳斯特」,作者:小F. 小F是211机械专业毕业的,上学的时候还造了两辆车(FSC.无碳小车),毕业以后又在车企搬了一年的砖,最终决定转行IT,从零开始学 ...
- python风控建模实战(分类器模型+回归模型)
在全球数字经济时代,有一种金融优势,那就是基于消费者大数据的纯信用! 我们不妨称之为数据信用,它是一种面向未来的财产权,它是数字货币背后核心的抵押资产,它决定了数字货币时代信用创造的方向.速度和规模. ...
最新文章
- nlopt 二次优化
- VS Code 配置 Python 开发环境
- oracle10 监听日志,windows 清空oracle的监听日志listener.log
- ios 自定义字体_如何仅用几行代码在iOS应用中创建一致的自定义字体
- php面试题2018mysql_PHP程序员必会的MySQL面试题
- ffmpeg mp4 html5,FFMPEG mkv to mp4 conversion lacks audio in HTML5 player
- 微信小程序API之getLocal
- 03_ Flume采集(监听)目录到HDFS案例
- TeaVM编译耗时太长,为节省时间,跳过test
- 【比较】2022 程式语言排名与分析,该学习哪一种程式语言?
- NVIDIA驱动报错解决方案
- 二级路由器设置为何要关闭DHCP服务
- 图论最短路 之 弗洛伊德Floyd(详细分析)
- 鸡兔同笼,今又鸡和兔关在一个笼子里面,动物的头的总数是35,动物的脚的总数是94,问你鸡和兔子各有多少只?提示:利用二重循环解决问题
- 50个明星区块链项目跌破发行价,超10家项目几近归零
- java 代码加壳,关于java加壳和代码混淆
- 【Ybt OJ】[数学基础 第3章] 同余问题
- C语言入门 -- 计算两骰子之和出现概率(2021/2/2)
- Android 忘记锁屏密码的解决办法
- 用计算机图形画一个杯子的代码,六年级LOGO小海龟编程教程.doc