使用python的多项式回归

使用python的多项式回归,python,numpy,scikit-learn,Python,Numpy,Scikit Learn,据我所知,多项式回归是回归分析的一种特殊类型,它比线性回归更复杂。 有一个python模块可以做到这一点吗? 我在matplotlib、scikit和numpy中查找过,但只能找到线性回归分析 并且可以计算出非线性直线的相关系数?scikit支持线性和多项式回归 查看“多项式回归:用基函数扩展线性模型”部分的页面 例如: >>> from sklearn.preprocessing import PolynomialFeatures >>> import nu

据我所知,多项式回归是回归分析的一种特殊类型,它比线性回归更复杂。 有一个python模块可以做到这一点吗? 我在matplotlib、scikit和numpy中查找过,但只能找到线性回归分析


并且可以计算出非线性直线的相关系数?

scikit支持线性和多项式回归

查看“多项式回归:用基函数扩展线性模型”部分的页面

例如:

>>> 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.])
基于多项式特征训练的线性模型能够准确地恢复输入多项式系数


在某些情况下,不需要包含任何单个功能的更高的功能,而只需要所谓的交互功能,这些功能最多可以叠加在一起。这些可以通过设置
interaction\u only=True
PolynomialFeatures
中获得。您看过NumPy的
polyfit
吗?看

从他们的例子来看:

>>> 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]

您可以首先使用sklearn中的多项式特征创建多项式特征,然后使用线性模型

以下函数可用于预测经过训练的模型

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)

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