Python PolynomialFeatures将数据转换为与原始数据

时间:2017-06-10 17:49:26

标签: python machine-learning scikit-learn polynomials

我正在使用sklearn的PolynomialFeatures将数据预处理成各种程度的转换,以便比较它们的模型拟合。 以下是我的代码:

    from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.model_selection import train_test_split
np.random.seed(0)
# x and y are the original data
n = 100
x = np.linspace(0,10,n) + np.random.randn(n)/5
y = np.sin(x)+n/6 + np.random.randn(n)/10
# using .PolynomialFeatures and fit_transform to   transform original data to degree 2
poly1 = PolynomialFeatures(degree=2)
x_D2_poly = poly1.fit_transform(x)
#check out their dimensions   
x.shape
x_D2_poly.shape

然而,上述转换从(100,1)的原始x返回(1,5151)数组。这不是我的预期。我无法弄清楚我的代码有什么问题。如果有人可以指出我的代码错误或我的误解,那将是很棒的。 我应该使用替代方法来转换原始数据吗?

谢谢。

此致

[更新] 因此,在使用x = x.reshape(-1,1)转换原始x之后,Python确实通过poly1.fit_transform(x)为我提供了所需的输出维度(100,1)。但是,当我做了train_test_split时,拟合了数据,并试图获得预测值:

x_poly1_train, x_poly1_test, y_train, y_test = train_test_split(x_poly1, y, random_state = 0)
linreg = LinearRegression().fit(x_poly1_train, y_train)
poly_predict = LinearRegression().predict(x)

    

Python返回了一条错误消息:

shapes (1,100) and (2,) not aligned: 100 (dim 1) != 2 (dim 0)

显然,必须有某个地方我再次弄错了维度。谁能对此有所了解?

谢谢。

1 个答案:

答案 0 :(得分:1)

我认为你需要重塑你的x

x=x.reshape(-1,1)

你的x有形状(100,)不是(100,1)而fit_transform需要2个尺寸。 您获得5151个功能的原因是您看到每个不同对的一个功能(100 * 99/2 = 4950),每个功能平方的一个功能(100),每个功能的第一个功能的一个功能(100),和一个0次幂(1)。

对您编辑过的问题的回复: 您需要致电transform来转换您希望预测的数据。