python多项式运算,python 多元回归

  python多项式运算,python 多元回归

  博客里要用的资源在这里

  用资源命令我。

  多项式回归应用场景在分析数据的时候,我们会遇到不同的数据分布。当数据点呈带状分布时,我们会选择线性回归的方法进行拟合。但是当数据点是一条曲线时,用线性回归的方法去拟合效果就不那么好了。这时,我们可以用多项式回归的方法。本文主要介绍一元多项式回归。

  一元多项式回归处理方法分析:y=w0 w1 x w2 x2 w3 x3 … wd xd

  将高阶项视为一阶项特征的扩展,得到如下结果:

  y=w0 w1 x1 w2 x2 w3 x3 … wd xd

  也就是把一元多项式转换成多元线性回归来训练模型,得到的w0,w1…wn也用在原来的一元多项式中,多项式特征扩展:

  如果我们用线性回归模型来拟合散点图,结果是一条直线。

  那么如果想让这条直线转弯,应该怎么做呢?答案很简单。可以加二次项,也可以加多项。在二次项和多次项相加的过程中,特征值也会增加,从而完成特征值的展开。我们把具体的推导过程写下来。

  二元线性回归模型如下式所示:

  h(x)=w 0 w 1 x 1 w 2 x 2h(x)=w 0 w 1 x 1 w 2 x 2h(x)=w0 w1 x1 w2 x2

  因此,一元多项式回归的实现需要两步:

  结合二阶多项式的特点,加入二次项,将其从平面转化为抛物面:

  h(x)=w 0 w 1 x 1 w 2 x 2 w 3 x 1 x 2 w 4 x 1 2 w 5 x 2 2h(x)=w _ 0 w _ 1x _ 1 w _ 2x _ 2 w _ 3x _ 1x _ 2 w_4x_1^2 w_5x_2^2 h(x)=w0 w1 x1 w2 w3 x1 x2 w4 x12 w5 x22

  用z代替x得到:

  z=[ z 1,z 2,z 3,z 4,z 5 ]=[ x 1,x 2,x 1 x 2,x 1 2,x 2 2]z=[z_1,z_2,z_3,z_4,z_5]=[x_1,x_2,x_1x_2,x_1^2,x_2^2]z=[Z1,z2,z3,z4,z5 ]=[x1,x2,x1 x2,x12,x 2 2 ]

  那么可以这样写:

  h(x)=w 0 w 1 z 1 w 2 z 2 w 3 z 3 w 4 z 4 w 5 z 5h(x)=w 0 w 1 z 1 w 2 z 2 w 3 z 3 w 4 z 4 w 5 z 5h(x)=w0 w1 Z1 w2 z2 w3 z3 w4 w5 z 5

  本质上是做一个变量替换,然后把线性回归模型改回来。

  那么一元多项式回归就可以看作多元线性回归,可以用线性回归模型来训练样本数据。

  将一元多项式回归问题转化为多元线性回归问题(只给出多项式的最高次)。W1 w2 …在步骤1中获得的多项式结果中被作为样本特征,并被给予线性回归以训练多元线性模型。使用sklearn提供的数据管线实现两个步骤的顺序执行:

  导入sklearn.pipeline为pl导入sklearn .预处理为spimport sklearn.linear _ model为lm model=pl.make _ pipeline (sp .多项式特征(10),#多项式特征扩展器lm。LinearRegression()) #线性回归案例:

  import numpy as NP import sk learn . pipeline as pl import sk learn . preprocessing as sp import sk learn . linear _ model as lmimport sk learn . metrics as SMI import ma tplotlib . py plot as MP # Collect data x,y=np.loadtxt(./ml _ data/single.txt ,delimiter=,,usecols=(0,1),unpack=true)x=x . shape(-1,1)# create model(pipeline)model=pl . make _ pipeline(sp .多项式特征(10),#多项式特征扩展器lm。LinearRegression()) #线性回归# train model.fit(x,Y)#预测输出pred _ Y=model . predict(x)test _ x=NP . Lin space(x . min(),x.max(),1000)。reshape (-1,1)pred _ test _ y=model . predict(test _ x)MP . figure(多项式回归,facecolor=lightgray)mp.title(多项式回归,fontsize=20)mp.xlabel(x ,fontsize=14)mp.ylabel(y ,font size=14)MP . tick _ params(label size=10)MP . grid(line style=:)MP . scatter(x,y,c=dodgerblue ,alpha=0.75,s

  过于简单的过拟合和欠拟合模型对于训练数据和测试数据都不能给出足够高的预测精度。这种现象被称为欠拟合。

  过于复杂的模型对于训练数据可以得到较高的预测精度,但对于测试数据通常精度较低,这就是所谓的过拟合。

  一个性能可以接受的学习模型对于训练数据和测试数据都应该有接近的预测精度,精度不能太低。

  训练集R2测试集R20.3 0.4欠拟合:过于简单,无法反映数据的规律0.9 0.2过拟合:过于复杂,过于特殊,缺乏一般性0.7 0.6可接受:中等复杂,反映数据的规律,又不失一般性。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: