1、有了特征,构造出多项式特征,常用工具:PolynomialFeatures()

#生成由所有多项式组合组成的新特征矩阵度小于或等于指定度的特性的
#如:[a, b]的二次多项式特征为[1,a, b, a^2, ab, b^2]
#PolynomialFeatures(degree=2, interaction_only=False, include_bias=True, order='C'),默认degree是2
from sklearn.preprocessing import PolynomialFeatures
a = [[3, 4], [2, 3]]
model = PolynomialFeatures(include_bias=False)#为1的那列没了,否则有一列1作为偏置项
b = model.fit_transform(a)
print(b)
'''
[[ 3.  4.  9. 12. 16.][ 2.  3.  4.  6.  9.]]
'''
mode2 = PolynomialFeatures(interaction_only=True)#各自平方项没了,只有交叉项和偏置项,2*3=6,3*4=12
c = mode2.fit_transform(a)
print(c)
'''
[[ 1.  3.  4. 12.][ 1.  2.  3.  6.]]
'''

2、使用多项式回归预测矩阵面积

2.1问题描述

假定现在你知道矩形的面积公式,而不知道求解梯形的面积公式,且同时你手上有若干个类似下图的梯形块儿。已知上底和下底,并且上底均等于高。现在让你建立一个模型,当给定一个上述梯形时你能近似的给出其面积。该如何建模呢?

2.2 建模

用多特征线性回归建模也可以,但是不太好。​h(x)=w1x1+w2x2+bh(x)=w_{1} x_{1}+w_{2} x_{2}+bh(x)=w1​x1​+w2​x2​+b,毕竟我们学过梯形面积公式,需要有底边乘以高,仅仅只用多变量线性去拟合,估计不行,因为没交叉项和高次项。对于这个梯形:左边可以看成是正方形,所以可以人为的构造第三个特征(x1)2(x_1 )^2(x1​)2;而整体可以看成是长方形的一部分,又可以认为的构造出x1∗x2x_1 *x_2x1​∗x2​;最后,整体还可以看成是大正方形的一部分,因此可以构造出(x2)2(x_2 )^2(x2​)2。故,我们便可以得到如下模型:

h(x)=x1w1+x2w2+(x1)2w3+x1x2w4+(x2)2w5+bh(x)=x_{1} w_{1}+x_{2} w_{2}+\left(x_{1}\right)^{2} w_{3}+x_{1} x_{2} w_{4}+\left(x_{2}\right)^{2} w_{5}+bh(x)=x1​w1​+x2​w2​+(x1​)2w3​+x1​x2​w4​+(x2​)2w5​+b

这样特征比较多,有从左侧方形去计算的特征,有从长方形入手计算的特征,有人可能会问,有的部分重复加了,计算出来的面积岂不大于实际面积?但这当然不会,因为每一项都有一个权重参数[公式]做系数。同时,可以看出h(x)h(x)h(x)中包含了x1∗x2x_1 *x_2x1​∗x2​,(x1)2(x_1 )^2(x1​)2,(x2)2(x_2 )^2(x2​)2这些项(其次数高于1),因此我们将其称之为多项式回归(Poloniumial Regression)。
但是,只要我们做如下替换,便又回到了普通的线性回归:
h(x)=x1w1+x2w2+x3w3+x4w4+x5w5+bh(x)=x_{1} w_{1}+x_{2} w_{2}+x_{3} w_{3}+x_{4} w_{4}+x_{5} w_{5}+bh(x)=x1​w1​+x2​w2​+x3​w3​+x4​w4​+x5​w5​+b
其中x3=(x1)2,x4=x1x2,x5=(x2)2x_{3}=\left(x_{1}\right)^{2}, x_{4}=x_{1} x_{2}, x_{5}=\left(x_{2}\right)^{2}x3​=(x1​)2,x4​=x1​x2​,x5​=(x2​)2,只是在实际建模时我们先要将原始两个特征的数据转化为五个特征的数据;同时在做正式预测时,输入给模型h(x)h(x)h(x)也将是包含五个特征的数据

2.3导入包并构造数据集

from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3ddef make_data():np.random.seed(10)x1 = np.random.randint(5, 10, 50).reshape(50, 1)x2 = np.random.randint(10, 16, 50).reshape(50, 1)x = np.hstack((x1, x2))# 在这里我们便得到了一个50行2列的样本数据,#其中第一列为上底,第二列为下底y = 0.5 * (x1 + x2) * x1return x, yx,y=make_data()

查看数据形式,x1,x2,y

x1=x[:,0]
x2=x[:,1]
ax = plt.subplot(projection = '3d')  # 创建一个三维的绘图工程
ax.set_title('3d_image_show')  # 设置本图名称
ax.scatter(x1, x2, y, c = 'r')   # 绘制数据点 c: 'r'红色,'y'黄色,等颜色
ax.set_xlabel('x1')  # 设置x1坐标轴
ax.set_ylabel('x2')  # 设置x2坐标轴
ax.set_zlabel('y')  # 设置y坐标轴


如果用平面​h(x)=w1x1+w2x2+bh(x)=w_{1} x_{1}+w_{2} x_{2}+bh(x)=w1​x1​+w2​x2​+b去拟合上图数据,其实不妥,最好用曲面。

求解数据,暂时只有x1、x2,建立交互项与高次方项,使用工具PolynomialFeatures()

poly = PolynomialFeatures(include_bias=False)#删除偏置项,这里加不加偏置项均可,最终计算回归模型时模型都会计算偏置项b。
x_mul = poly.fit_transform(x)

假设的公式,上面代码中偏置项没用上,所以x_mul为:
xmul=x1w1+x2w2+(x1)2w3+x1x2w4+(x2)2w5xmul=x_{1} w_{1}+x_{2} w_{2}+\left(x_{1}\right)^{2} w_{3}+x_{1} x_{2} w_{4}+\left(x_{2}\right)^{2} w_{5}xmul=x1​w1​+x2​w2​+(x1​)2w3​+x1​x2​w4​+(x2​)2w5​

我们需要计算的是参数与偏置项,构建回归模型:

poly = PolynomialFeatures(include_bias=False)
x_mul = poly.fit_transform(x)
model = LinearRegression()
model.fit(x_mul, y)
print("权重为:", model.coef_)
print("偏置为:", model.intercept_)

求得权重为: [[-6.12180555e-15 4.55191440e-15 5.00000000e-01 5.00000000e-01
5.55111512e-17]]
偏置为: [-4.26325641e-14]
这里的-6.12180555e-15这种数据实在是太小,近乎0了。带入公式得:
h(x)=x1⋅0+x2⋅0+x3⋅0.5+x4⋅0.5+x5⋅0+b=0.5⋅(x1)2+0.5⋅x1⋅x2=0.5⋅x1(x1+x2)\begin{aligned} h(x) &=x_{1} \cdot 0+x_{2} \cdot 0+x_{3} \cdot 0.5+x_{4} \cdot 0.5+x_{5} \cdot 0+b \\ &=0.5 \cdot\left(x_{1}\right)^{2}+0.5 \cdot x_{1} \cdot x_{2} \\ &=0.5 \cdot x_{1}\left(x_{1}+x_{2}\right) \end{aligned}h(x)​=x1​⋅0+x2​⋅0+x3​⋅0.5+x4​⋅0.5+x5​⋅0+b=0.5⋅(x1​)2+0.5⋅x1​⋅x2​=0.5⋅x1​(x1​+x2​)​
至此,模型自己总结出了计算面积的公式,和我们已知的面积计算公式一致。

利用真实数据验证,例如:

print("上底 {},下底 {}梯形真实面积:{}".format(5, 8, 0.5 * (5 + 8) * 5))
x_mul = poly.transform([[5, 8]])
print(x_mul)
print("上底 {},下底为 {}梯形预测面积:{}".format(5, 8, model.predict(x_mul)))

上底 5,下底 8梯形真实面积:32.5
[[ 5. 8. 25. 40. 64.]]
上底 5,下底为 8梯形预测面积:[[32.5]]

多项式回归2(Polynomial regression)相关推荐

  1. 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 ...

  2. java求多项式回归_多项式回归(Polynomial Regression)(附代码)

    多项式回归有个很重要的因素就是指数(degree).如果我们发现数据的分布大致是一条曲线,那么很可能符合多项式回归,但是我们不知道degree是多少.所以我们只能一个个去试,直到找到最拟合分布的deg ...

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

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

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

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

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

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

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

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

  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. 如何自定义制表符到空格的转换因子?
  2. java中怎样计算个人所得税计算器,个人所得税计算器
  3. 信息学奥赛C++语言:数一数
  4. redis 远程主机强迫关闭了一个现有的连接_如何在 Debian 10 上安装和配置 Redis 服务...
  5. 媲美Siri语音 英朗自然语音识别系统体验
  6. cisco交换机命令大全(10)
  7. Map集合类型总结,常见Map集合有哪些?他们的优缺点分别是什么?
  8. 利用unlocker在VMware里解锁macOS操作系统
  9. 网络操作系统和分布式系统区别简介
  10. lte tm模式_请教大家个问题,LTE传输模式TM1-TM8中哪种属于MIM.. - 通信技术你问我答 - 纯技术讨论者的天地 - Powered by C114...
  11. 使用nodejs-koa2-mysql-sequelize-jwt 实现项目api接口
  12. 计算机白板培训报道,学习电子白板心得体会
  13. Thunderbird – 开源免费跨平台邮箱客户端
  14. consists of 和 is comprised of
  15. 2022-09-17青少年软件编程(C语言)等级考试试卷(四级)解析
  16. 【.NET】网站的打包与发布
  17. C++程序方法 --- 病毒感染检测
  18. mawen启动项目css样式失效问题解决方法 EL表达式无效
  19. e5408fc4a618ed2a663d0306def2cec3 (学生实验,谢谢)
  20. 《大话Java性能优化》面向对象及基础类型相关部分

热门文章

  1. IT研发/开发流程规范效能的思考总结
  2. 利用Block Design在Vivado实现三位四选一多路选择器
  3. HTML+CSS 导航
  4. Nature | 江西农大黄路生/陈从英等揭示猪血型基因调控肠道菌群的机制
  5. 生成对抗网络Generative Adversarial Nets(译)
  6. Apache 源码安装详细教程
  7. 收费企业邮箱注册和免费企业邮箱注册的区别?几大收费企业邮箱对比测评
  8. 记一次前端启动报错npm ERR! 12@1.0.0 dev: `webpack-dev-server --inline --progress --config build/webpack.dev.c
  9. PayPal绑定激活账号哪个工具好?花旗532959虚拟卡,可收验证码唯xinVIE2277
  10. pcb板子开窗_PCB做板如何处理“过孔盖油”和“过孔开窗”问题?