对于给出的 数据做出散点图,可以大致看出模型是否适合做线性回归,但是,线性回归一定是拟合最好的模型吗?答案是否定的。有时候,多项式回归会得出拟合效果更好的模型,但是也需要注意过拟合的线性。

下面,还是以房屋面积预测房屋价格的数据为例:

读取数据,绘制散点图:

 多项式回归
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实现多项式回归实战——以及与线性回归的拟合效果对比相关推荐

  1. python 立体匹配算法_OpenCV3.4两种立体匹配算法效果对比

    以OpenCV自带的Aloe图像对为例: 1.BM算法(Block Matching) 参数设置如下: int numberOfDisparities = ((imgSize.width / 8) + ...

  2. 这本《Python+TensorFlow机器学习实战》给你送到家!

    小伙伴们,本公众号很久没用送书啦,是不是很是期待呀?放心啦,这次每个大佬送5本书,一共25本!包邮到你家楼下,哈哈! 怎么送书呢? 方法当然是很简单啦,关注下面公众号,后台回复「抽奖」,弹出小程序二维 ...

  3. python线性回归可视化_【Python可视化5】Seaborn之线性回归

    Seaborn是基于matplotlib的Python可视化库.它提供了一个高级界面来绘制有吸引力的统计图形.Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图更 ...

  4. python数据挖掘笔记】十八.线性回归及多项式回归分析四个案例分享

    python数据挖掘课程]十八.线性回归及多项式回归分析四个案例分享 #2018-03-30 18:24:56 March Friday the 13 week, the 089 day SZ SSM ...

  5. Python数据分析与实战挖掘

    <Python数据分析与实战挖掘> 张良均 基础篇 书推荐:<用python做科学计算> 扩展库 简介 Numpy数组支持,以及相应的高效处理函数 Scipy矩阵支持,以及相应 ...

  6. 【笔记】《Python数据分析与实战挖掘》

    <Python数据分析与实战挖掘> 张良均 基础篇 书推荐:<用python做科学计算> 扩展库 简介 Numpy数组支持,以及相应的高效处理函数 Scipy矩阵支持,以及相应 ...

  7. Python 毕设精品实战案例——快速索引目录

    1. 基于 python 的银行信贷风险评估 信贷业务又称为信贷资产或贷款业务,是商业银行最重要的资产业务,通过放款收回本金和利息,扣除成本后获得利润,所以信贷是商业银行的主要赢利手段.信用风险是金融 ...

  8. 精选合辑 | 30个Python数据分析及实战项目(含源码)

    今天给大家推荐一个优质的Python公众号「法纳斯特」,作者:小F. 小F是211机械专业毕业的,上学的时候还造了两辆车(FSC.无碳小车),毕业以后又在车企搬了一年的砖,最终决定转行IT,从零开始学 ...

  9. python风控建模实战(分类器模型+回归模型)

    在全球数字经济时代,有一种金融优势,那就是基于消费者大数据的纯信用! 我们不妨称之为数据信用,它是一种面向未来的财产权,它是数字货币背后核心的抵押资产,它决定了数字货币时代信用创造的方向.速度和规模. ...

最新文章

  1. nlopt 二次优化
  2. VS Code 配置 Python 开发环境
  3. oracle10 监听日志,windows 清空oracle的监听日志listener.log
  4. ios 自定义字体_如何仅用几行代码在iOS应用中创建一致的自定义字体
  5. php面试题2018mysql_PHP程序员必会的MySQL面试题
  6. ffmpeg mp4 html5,FFMPEG mkv to mp4 conversion lacks audio in HTML5 player
  7. 微信小程序API之getLocal
  8. 03_ Flume采集(监听)目录到HDFS案例
  9. TeaVM编译耗时太长,为节省时间,跳过test
  10. 【比较】2022 程式语言排名与分析,该学习哪一种程式语言?
  11. NVIDIA驱动报错解决方案
  12. 二级路由器设置为何要关闭DHCP服务
  13. 图论最短路 之 弗洛伊德Floyd(详细分析)
  14. 鸡兔同笼,今又鸡和兔关在一个笼子里面,动物的头的总数是35,动物的脚的总数是94,问你鸡和兔子各有多少只?提示:利用二重循环解决问题
  15. 50个明星区块链项目跌破发行价,超10家项目几近归零
  16. java 代码加壳,关于java加壳和代码混淆
  17. 【Ybt OJ】[数学基础 第3章] 同余问题
  18. C语言入门 -- 计算两骰子之和出现概率(2021/2/2)
  19. Android 忘记锁屏密码的解决办法
  20. 用计算机图形画一个杯子的代码,六年级LOGO小海龟编程教程.doc

热门文章

  1. ppt如何设置实现循环播放
  2. JMeter元件作用域和执行顺序
  3. 入门python多久_入的解释|入的意思|汉典“入”字的基本解释
  4. 简单几步就能将大量文件归类保存
  5. linux c语言 密码,Linux 双因子认证(密码+PIN)C语言版
  6. Idea创建Vue项目流程
  7. Java 发邮件-带附件且正文html格式
  8. python进度条打印
  9. JavaWeb之Maven
  10. AtCoder Beginner Contest 238 ABC题解 数学函数 几何 数论数学