【问题标题】:Fitting a higher degree function using PolynomialFeatures and LinearRegression使用 PolynomialFeatures 和 LinearRegression 拟合更高次函数
【发布时间】:2017-12-18 20:19:40
【问题描述】:

在一本书中,我发现以下代码将线性回归拟合到二次数据:

m = 100
X = 6 * np.random.rand(m, 1) - 3
y = 0.5 * X**2 + X + 2 + np.random.randn(m, 1)
poly_features = PolynomialFeatures(degree=2, include_bias=False)
X_poly = poly_features.fit_transform(X)
lin_reg = LinearRegression()
lin_reg.fit(X_poly, y)

但这怎么可能呢?我从documentation 知道PolynomialFeatures(degree=2, include_bias=False) 正在创建一个如下所示的数组:

[[X[0],X[0]**2]
[X[1],X[1]**2]
.....
[X[n],X[n]**2]]

但是:LinearRegression 如何拟合这些数据?表示 LinearRegression 在做什么以及其背后的概念是什么。

感谢您的任何解释!

【问题讨论】:

    标签: python scikit-learn linear-regression polynomials


    【解决方案1】:

    二阶多项式特征将创建一个如下所示的数组:

       [[1, X[0], X[0]**2]
        [1, X[1], X[1]**2]
        .....
        [1, X[n] ,X[n]**2]]
    

    我们称上面的矩阵为X。然后 LinearRegression 正在寻找 3 个数字 a,b,c 以便向量

    X* [[a],[b],[c]] - Y
    

    具有最小的均方误差(这只是上面向量中平方和的平均值)。

    请注意,乘积 X* [[a],[b],[c]] 只是矩阵 X 与列向量 [a,b,c].T 的乘积。结果是一个与Y相同维度的向量。

    关于您评论中的问题:

    1. 此函数在新功能集中是线性的:x, x**2。只需将x**2 视为模型中的附加功能即可。

    2. 对于您问题中提到的特定数组,LinearRegression 方法正在寻找使总和最小化的数字a,b,c

      (a*1+bX[0]+cX[0]**2-Y[0])**2+(a*1+bX[ 1]+cX[1]**2-Y[1])**2+..+(a*1+bX[n]+cX[n ]**2-Y[n])**2

    所以它会找到一组这样的数字a,b,c。因此建议的函数y=a+b*x+c*x**2 不仅仅基于第一行。相反,它基于所有行,因为选择的参数a,b,c 是那些使上述总和最小化的参数,并且这个总和涉及来自所有行的元素。

    1. 创建向量x**2 后,线性回归仅将其视为附加特征。你可以给它一个新名字v=x**2。那么线性回归的形式为y=a+b*x+c*v,这意味着它在xv 中是线性的。该算法不关心您如何创建v。它只是将v 视为附加功能。

    【讨论】:

    • 好的,谢谢。现在假设,LinearRegression 函数找到了 a=1、b=2 和 c=3 的最优参数,而第一行的函数变为:y=3x**2+2x+1。现在?? 1. LinearRegression 在做什么,因为这个函数不是线性的..... 2. 此外,如果 LinearRegression 对数组中的每一行都这样做,那么在一个 *m 数组中计算 n 个线性回归是否正确?还有 3. 我还是不明白线性回归是如何得到曲线形状的???
    • 附加功能意味着附加轴对吗?因此,二维坐标系中的 LinearRegression 曲线可能看起来像一条曲线,但实际上它仍然是一条直线,但在更高维空间中?
    • @2Obe 是的。
    猜你喜欢
    • 2021-06-18
    • 2018-03-06
    • 2017-04-17
    • 2014-03-01
    • 2012-07-15
    • 2023-04-02
    • 2021-11-19
    • 2019-12-13
    • 1970-01-01
    相关资源
    最近更新 更多