现实世界的曲线关系都是通过增加多项式实现的,现在解决多项式回归问题

  住房价格样本

  

  样本图像

import matplotlib.font_manager as fm
import matplotlib.pyplot as plt
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 = [[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]]
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 = 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() # 展示图像

  

  

   可以看到三次回归比二次回归效果又好了一些,但是不是很明显。所以二次回归更可能是最适合的回归模型,三次回归可能有过拟合现象

  参考:http://www.aboutyun.com/thread-19073-1-1.html

python 机器学习多项式回归的更多相关文章

  1. Python机器学习--回归

    线性回归 # -*- coding: utf-8 -*- """ Created on Wed Aug 30 19:55:37 2017 @author: Adminis ...

  2. Python 机器学习实战 —— 监督学习(上)

    前言 近年来AI人工智能成为社会发展趋势,在IT行业引起一波热潮,有关机器学习.深度学习.神经网络等文章多不胜数.从智能家居.自动驾驶.无人机.智能机器人到人造卫星.安防军备,无论是国家级军事设备还是 ...

  3. 常用python机器学习库总结

    开始学习Python,之后渐渐成为我学习工作中的第一辅助脚本语言,虽然开发语言是Java,但平时的很多文本数据处理任务都交给了Python.这些年来,接触和使用了很多Python工具包,特别是在文本处 ...

  4. [Python] 机器学习库资料汇总

    声明:以下内容转载自平行宇宙. Python在科学计算领域,有两个重要的扩展模块:Numpy和Scipy.其中Numpy是一个用python实现的科学计算包.包括: 一个强大的N维数组对象Array: ...

  5. 【转】常见的python机器学习工具包比较

    http://algosolo.com/ 分析对比了常见的python机器学习工具包,包括: scikit-learn mlpy Modular toolkit for Data Processing ...

  6. python机器学习《回归 一》

    唠嗑唠嗑 依旧是每一次随便讲两句生活小事.表示最近有点懒,可能是快要考试的原因,外加这两天都有笔试和各种面试,让心情变得没那么安静的敲代码,没那么安静的学习算法.搞得第一次和技术总监聊天的时候都不太懂 ...

  7. 2016年GitHub排名前20的Python机器学习开源项目(转)

    当今时代,开源是创新和技术快速发展的核心.本文来自 KDnuggets 的年度盘点,介绍了 2016 年排名前 20 的 Python 机器学习开源项目,在介绍的同时也会做一些有趣的分析以及谈一谈它们 ...

  8. [resource]Python机器学习库

    reference: http://qxde01.blog.163.com/blog/static/67335744201368101922991/ Python在科学计算领域,有两个重要的扩展模块: ...

  9. Python机器学习包

    常用Python机器学习包 Numpy:用于科学计算的包 Pandas:提供高性能,易于使用的数据结构和数据分析工具 Scipy:用于数学,科学工程的软件 StatsModels:用于探索数据.估计统 ...

随机推荐

  1. [HDU5713]K个联通块

    [HDU5713]K个联通块 题目大意: 有一张\(n(n\le14)\)个点,\(m\)条边无重边的无向图,求有多少个边集,使得删掉边集里的边后,图里恰好有\(k\)个连通块. 思路: 一个显然的动 ...

  2. [CQOI2009]跳舞

    思路:二分答案+最大流.二分答案$m$,表示最多跳$m$轮.将每个人拆成两个点$a_i$$b_i$,$a_i$表示与任何人跳舞,$b_i$表示与不喜欢的人跳舞.对于第$i$个人,连一条从$a_i$到$ ...

  3. java基础记录(一):开发环境的配置

    一.JDK的安装与环境变量配置 1.jdk下载与安装. jdk1.8.0_192下载地址 下载完成后,双击运行安装文件.可以选择你要安装的位置或者直接下一步,等待安装完成,最后关闭. 2.配置环境变量 ...

  4. UVALive 6910 Cutting Tree 并查集

    Cutting Tree 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8& ...

  5. python使用递归实现一个分形图形

    代码如下: import turtle def main(): t = turtle.Turtle() t.hideturtle() t.speed(10) level = 12 fract(t,-8 ...

  6. nuxus 3在Maven项目的配置和POM文件的配置

    在nuxus 3中的Maven默认会创建三个仓库,这三个仓库的关系如下: public是release和snapshot的全集,release默认为关闭状态,所以在配置nexus 3时需要将其开启. ...

  7. Calculate CAN bit timing parameters

    Calculate CAN bit timing parameters TSYNC_SEG === 1 TSEG1 = Prop_Seg + Phase_Seg1 TSEG2 = Phase_Seg2 ...

  8. Web登陆实例-—同步username

    之前登陆学校的教务系统或者考试系统,进入界面都会有"欢迎***登陆本系统".当时就认为挺高级.如今轮 到自己做这个样例.突然感觉是so easy. 仅仅需简单几步,就可能够搞定. ...

  9. Java对象池

    单例模式是限制了一个类只能有一个实例,对象池模式则是限制一个类实例的个数.对象池类就像是一个对象管理员,它以Static列表(也就是装对象的池子)的形式存存储某个实例数受限的类的实例,每一个实例还要加 ...

  10. 委托、Lambda表达式、事件系列04,委托链是怎样形成的, 多播委托, 调用委托链方法,委托链异常处理

    委托是多播委托,我们可以通过"+="把多个方法赋给委托变量,这样就形成了一个委托链.本篇的话题包括:委托链是怎样形成的,如何调用委托链方法,以及委托链异常处理. □ 调用返回类型为 ...