【问题标题】:polynomial regression using python使用 python 进行多项式回归
【发布时间】:2015-10-03 02:39:40
【问题描述】:

据我了解,多项式回归是一种特定类型的回归分析,它比线性回归更复杂。 有没有可以做到这一点的python模块? 我查看了matplotlib、scikit和numpy,但只能找到线性回归分析。

还有可能算出一条非线性线的相关系数吗?

【问题讨论】:

    标签: python numpy scikit-learn


    【解决方案1】:

    你看过 NumPy 的 polyfit 吗?见reference

    从他们的例子中:

    >>> import numpy as np
    >>> x = np.array([0.0, 1.0, 2.0, 3.0,  4.0,  5.0])
    >>> y = np.array([0.0, 0.8, 0.9, 0.1, -0.8, -1.0])
    >>> z = np.polyfit(x, y, 3)
    >>> z
    [ 0.08703704 -0.81349206  1.69312169 -0.03968254]
    

    【讨论】:

      【解决方案2】:

      scikit 支持线性和多项式回归。

      查看多项式回归:使用基函数扩展线性模型部分的Generalized Linear Models页面。

      例子:

      >>> from sklearn.preprocessing import PolynomialFeatures
      >>> import numpy as np
      >>> X = np.arange(6).reshape(3, 2)
      >>> X
      array([[0, 1],
             [2, 3],
             [4, 5]])
      >>> poly = PolynomialFeatures(degree=2)
      >>> poly.fit_transform(X)
      array([[ 1,  0,  1,  0,  0,  1],
             [ 1,  2,  3,  4,  6,  9],
             [ 1,  4,  5, 16, 20, 25]])
      

      X 的特征已从[x_1, x_2] 转换为[1, x_1, x_2, x_1^2, x_1 x_2, x_2^2],现在可以在任何线性模型中使用。

      可以使用流水线工具简化这种预处理。可以按如下方式创建和使用表示简单多项式回归的单个对象:

      >>> from sklearn.preprocessing import PolynomialFeatures
      >>> from sklearn.linear_model import LinearRegression
      >>> from sklearn.pipeline import Pipeline
      >>> model = Pipeline([('poly', PolynomialFeatures(degree=3)),
      ...                   ('linear', LinearRegression(fit_intercept=False))])
      >>> # fit to an order-3 polynomial data
      >>> x = np.arange(5)
      >>> y = 3 - 2 * x + x ** 2 - x ** 3
      >>> model = model.fit(x[:, np.newaxis], y)
      >>> model.named_steps['linear'].coef_
      array([ 3., -2.,  1., -1.])
      

      在多项式特征上训练的线性模型能够准确地恢复输入的多项式系数。

      在某些情况下,不需要包含任何单个特征的更高幂,而只需要包含最多 d 个不同特征的所谓交互特征。这些可以从PolynomialFeatures 获得,设置为interaction_only=True

      【讨论】:

      • 我明白了,我不完全明白。在最小二乘中,我可以得到一个相关系数,它可以告诉我拟合的质量。我可以从上面的代码中得到这个号码吗?
      • 我认为你总是可以计算出Correlation Coefficient
      • 谢谢,但问题是这些是线性关系,我有一个二阶/三阶关系
      • @astrochris:在所有情况下,回归本身都是“线性的”,因为系数是线性的。 scikit-learn 方法明确显示了这一点:您正在对数据的扩展版本进行线性回归,其中包括作为新特征的特征产品。
      【解决方案3】:

      您可以先使用 sklearn 中的 PolynomialFeatures 制作多项式特征,然后使用您的线性模型。

      下面的函数可用于预测训练好的模型。

      from sklearn import linear_model
      from sklearn.preprocessing import PolynomialFeatures
      
      poly = PolynomialFeatures(degree=2)
      
      lm_polyfeats = linear_model.LinearRegression()
      lm_polyfeats.fit(poly.fit_transform(array2D),targetArray)
      
      def LM_polynomialFeatures_2Darray(lm_polyfeats,array2D):
          array2D=poly.fit_transform(array2D)
          return(lm.predict(array2D))
      
      p=LM_polynomialFeatures_2Darray(lm_polyfeats,array2D)
      

      【讨论】:

        猜你喜欢
        • 2019-07-20
        • 2019-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-03
        • 1970-01-01
        • 2013-12-26
        • 2018-12-19
        相关资源
        最近更新 更多