使用scikit-learn进行多项式回归


29

我正在尝试使用scikit-learn进行多项式回归。从我的理解中,多项式回归是线性回归的特例。我希望可以对scikit的广义线性模型之一进行参数化以适合高阶多项式,但是我认为没有选择的余地。

我确实设法使用了支持向量回归器和多核。这对我的数据子集效果很好,但是要适应较大的数据集需要花费很长时间,因此我仍然需要更快地找到某些东西(即使以某种精度进行交易)。

我在这里错过明显的东西吗?

Answers:


25

给定数据(列向量)和y(目标向量),您可以通过附加x的多项式来执行多项式回归。例如,考虑是否xyx

x=[2113]

在线性回归中仅使用此向量意味着模型:

y=α1x

我们可以添加作为上述向量的幂的列,这些列表示将多项式添加到回归中。下面我们展示了高达3的多项式的多项式:

X=[24811113132133]

这是我们在sklearn的线性回归中使用的新数据矩阵,它表示模型:

y=α1x+α2x2+α3x3

请注意,我没有添加的常数向量的,因为sklearn会自动包含这一点。1


26

理论

多项式回归是线性回归的一种特殊情况。关于如何选择功能的主要思想。查看具有2个变量的多元回归:x1x2。线性回归将如下所示:y = a1 * x1 + a2 * x2.

现在您要进行多项式回归(让我们做2度多项式)。我们将创造一些额外的功能:x1*x2x1^2x2^2。因此,我们将得到您的“线性回归”:

y = a1 * x1 + a2 * x2 + a3 * x1*x2 + a4 * x1^2 + a5 * x2^2

这很好地显示了数的一个重要概念诅咒,因为随着多项式次数的增加,新特征的数量增长快于线性增长。您可以在这里了解这个概念

练习scikit-learn

您无需在scikit中完成所有这些操作。那里已经可以使用多项式回归(在0.15版本中。请在此处查看如何更新)。

from sklearn.preprocessing import PolynomialFeatures
from sklearn import linear_model

X = [[0.44, 0.68], [0.99, 0.23]]
vector = [109.85, 155.72]
predict= [[0.49, 0.18]]
#Edit: added second square bracket above to fix the ValueError problem

poly = PolynomialFeatures(degree=2)
X_ = poly.fit_transform(X)
predict_ = poly.fit_transform(predict)

clf = linear_model.LinearRegression()
clf.fit(X_, vector)
print clf.predict(predict_)

1
如果我不想将交互项设为x1 * x2,该怎么办,我必须手动构造X_吗?PolynomialFeatures()构造函数中有一个参数“ interaction_only”,默认情况下为False。但它设置为True使得我想的正好相反:它只有在互动方面,不要让X1 ^ 2,X2 ^ 2,等等
DenisFLASH

指向youtube的链接声称该视频不再存在。您还有其他链接吗?
马肯

@Markon,此列表中的任何视频都足够好:youtube.com/results?
萨尔瓦多·达利

@SalvadorDali是降维的对象
user3916597 '16

我想知道我们应该在申请之前还是之后将数据居中PolynomialFeatures吗?
renakre'5

2

X1个X2ÿ=一种1个X1个+一种2X2+一种3X1个2+一种4X22+一种5X1个X2一种5X1个X2)是我正在谈论的那个。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.