前面介绍了线性拟合数据的情况。那么,当数据并不符合线性规律而是更复杂的时候应该怎么办呢?

一种简单的解决方法就是将每一维特征的幂次添加为新的特征,再对所有的特征进行线性回归分析。这种方法就是 多项式回归

具体做法可以从示例代码中体会一下。。。

注意

当存在多维特征时,多项式回归能够发现特征之间的相互关系,这是因为在添加新特征的时候,添加的是所有特征的排列组合。

以Scikit-Learn 中的PolynomialFeatures类为例,当原始特征为a,b,次幂为3时,不仅仅会将a3,b3a3,b3a^3, b^3作为新特征,还会添加a2b,ab2a2b,ab2a^2b,ab^2和ababab。

PolynomialFeatures(degree=d)PolynomialFeatures(degree=d)PolynomialFeatures(degree=d)将维度为nnn的原始特征转换为维度为(n+d)!d!n!" role="presentation" style="position: relative;">(n+d)!d!n!(n+d)!d!n!\frac{(n+d)!}{d!n!}的新特征(n!n!n!表示nnn的阶乘),因此,在使用 PolynomialFeatures 的时候,必须注意 特征维度爆炸 的问题。

关于(n+d)!d!n!" role="presentation" style="position: relative;">(n+d)!d!n!(n+d)!d!n!\frac{(n+d)!}{d!n!} 的求解

考虑 nnn 维特征(x1,x2,…,xn" role="presentation" style="position: relative;">x1,x2,…,xnx1,x2,…,xnx_1, x_2, \dots, x_n),ddd 次幂的情况:

1a0x1a1x2a2⋯xnan" role="presentation">1a0xa11xa22⋯xann1a0x1a1x2a2⋯xnan

1^{a_0}x_1^{a_1}x_2^{a_2}\cdots x_n^{a_n}
有:

a0+a1+⋯+an=da0+a1+⋯+an=d

a_0+a_1+\cdots+a_n=d
其中, a0,a1,⋯,ana0,a1,⋯,ana_0,a_1,\cdots,a_n为非负整数。因此该问题转换为了求上式非负整数解个数的问题。

即相当于:将d个相同小球排成一排后,用n个隔板将其进行分割,组合数学告诉我们共有 Cnn+d=(n+d)!d!n!Cn+dn=(n+d)!d!n!C_{n+d}^{n}=\frac{(n+d)!}{d!n!} 种方法。

## 生成一些非线性数据
import numpy as np
# import numpy.random as rnd
np.random.seed(42)m = 100
X = 6 * np.random.rand(m, 1) - 3
y = 0.5 * X**2 + X + 2 + np.random.randn(m, 1)plt.plot(X, y, "b.")
plt.xlabel("$x_1$", fontsize=18)
plt.ylabel("$y$", rotation=0, fontsize=18)
plt.axis([-3, 3, 0, 10])
plt.show()

## use Scikit-Learn PolynomialFeature class:
from sklearn.preprocessing import PolynomialFeaturespoly_features = PolynomialFeatures(degree=2, include_bias=False)
X_poly = poly_features.fit_transform(X) # a,b,degree=2: [a, b, a^2, ab, b^2]
# a,b,degree=3: [a, b, a^2, ab, b^2, a^3, a^2b, ab^2, b^3]
# a,b,c,degree=3: [a, b, c, a^2, ab, ac, b^2, bc, c^2, a^3, a^2b, a^2c, ab^2, ac^2, abc, b^3, b^2c, bc^2, c^3]
print(X[0])
print(X_poly[0])from sklearn.linear_model import LinearRegressionlin_reg = LinearRegression()
lin_reg.fit(X_poly, y)
print(lin_reg.intercept_, lin_reg.coef_)
# output
[-0.75275929]
[-0.75275929  0.56664654]
[ 1.78134581] [[ 0.93366893  0.56456263]]
# 画出预测的曲线
X_new=np.linspace(-3, 3, 100).reshape(100, 1)
X_new_poly = poly_features.transform(X_new)
y_new = lin_reg.predict(X_new_poly)
plt.plot(X, y, "b.")
plt.plot(X_new, y_new, "r-", linewidth=2, label="Predictions")
plt.xlabel("$x_1$", fontsize=18)
plt.ylabel("$y$", rotation=0, fontsize=18)
plt.legend(loc="upper left", fontsize=14)
plt.axis([-3, 3, 0, 10])
plt.show()

多项式回归 Polynomial Regression相关推荐

  1. java求多项式回归_通过LINEST进行多项式回归(Polynomial Regression via LINEST)

    通过LINEST进行多项式回归(Polynomial Regression via LINEST) 我正在尝试通过Excel 2013中的LINEST进行二次回归,如本主题中所描述的那样精彩的答案. ...

  2. R语言 | 多项式回归, 正交多项式回归(Polynomial Regression), 滑动多项式回归(sliding polynomial regression)

    1. 多项式回归 P404/643 alloy<-data.frame(x=c(37.0, 37.5, 38.0, 38.5, 39.0, 39.5, 40.0,40.5, 41.0, 41.5 ...

  3. 多项式回归-Polynomial regression

    用线性算法去拟合非线性的y 多项式回归:叫回归但并不是去做拟合的算法 PolynomialFeatures是来做预处理的,来转换我们的数据,把数据进行升维! 注意注意!!这里是改变数据,把数据整理为类 ...

  4. R构建多项式回归模型(Polynomial Regression)

    R构建多项式回归模型(Polynomial Regression) 目录 R构建多项式回归模型(Polynomial Regression) 使用ggplot可视化数据

  5. NNs(Neural Networks,神经网络)和Polynomial Regression(多项式回归)等价性之思考,以及深度模型可解释性原理研究与案例...

    1. Main Point 0x1:行文框架 第二章:我们会分别介绍NNs神经网络和PR多项式回归各自的定义和应用场景. 第三章:讨论NNs和PR在数学公式上的等价性,NNs和PR是两个等价的理论方法 ...

  6. 多项式回归1(Polynomial regression)

    在线性回归中,我们是寻找一条直线来尽可能的拟合数据.但是我们在大部分情况下并不满足简单的线性回归的.如下图所示的这种特殊的线性回归的情况,这种特殊的回归方法被称为多项式回归(Polynomial re ...

  7. 论文翻译—PolyLaneNet Lane Estimation via Deep Polynomial Regression

    PolyLaneNet Lane Estimation via Deep Polynomial Regression 通过深度多项式回归的车道估计 Abstract   自主驾驶取得巨大进步的主要因素 ...

  8. machine learning (6)---how to choose features, polynomial regression

    how to choose features, polynomial regression:通过定义更适合我们的feature,选择更好的模型,使我们的曲线与数据更好的拟合(而不仅仅是一条直线) 可以 ...

  9. 非线性回归-Polynomial regression

    非线性回归-Polynomial regression 之前讲过线性回归.本文主要讲下非线性回归中的polynominal regression. 非线性回归包含的算法非常多,比如常见的逻辑回归,SV ...

最新文章

  1. 文档过期打不开怎么办_网络上下载文档,常见的3个问题,一招教你快速解决!...
  2. 区块链技术指2.1 区块链技术
  3. 0317复利计算3.0
  4. linux服务端搭配win7客户端的frp
  5. boost::system::system_error相关的测试程序
  6. ORB-SLAM2-金字塔求解-特征点的提取-描述子的计算
  7. CentOS6.5安装MySQL5.7详细教程
  8. staruml透明_第05组 团队项目-需求分析报告
  9. 2017-2018-1 20155234第三周《信息安全系统设计基础》学习总结
  10. Liferay被SourceForge评为7月最佳开源项目
  11. 联想服务器asp配置文件,.NET Core读取配置文件方式详细总结
  12. 集异璧摘录:pq系统-加法-乘法-合数-素数
  13. 单机:Oracle 19C 数据库一键安装
  14. mac如何打开/bin等目录
  15. OPPO R2017线刷刷机包 可解账户锁 刷机教程
  16. 多测师肖sir_高级金牌讲师_面试题
  17. 示波器的各种文件存储方式与分析
  18. 成为网络工程师后具体的工作内容的问题
  19. 读王竹峰老师 《一个数据库十年老兵的思考与总结》 有感
  20. tl494c封装区别_详解TL494的性能特点参数 TL494引脚图与功能

热门文章

  1. 十一、Redis Cluster模式
  2. sql server 2005
  3. 牛客小白月赛5 - G - 异或(xor)【找规律】
  4. 计算机辅助模拟系统 颌面,计算机辅助正颌外科手术的预测和模拟系统—颅颌面硬组织的三维重建...
  5. 邮件自动分发-08-带附件的会议邀请
  6. Java怎么保证数据一致性_连续调用多个外部系统写接口保证数据一致性的思路...
  7. Ubuntu18 安装nvidia驱动进行深度学习训练
  8. 冲破性感标签后,维密如何让中国女孩买单?
  9. Failed to execute goal on project qingcheng_web_manager: Could not resolve dependencies for project
  10. lora网关软件设计_用LoRa实现的物联网应用,到底好在哪里?