Python PolynomialFeatures将数据转换为与原始数据不同的形状

我使用sklearn的PolynomialFeatures对数据进行不同程度的预处理,以比较它们的模型拟合效果。以下是我的代码:

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

然而,上述转换返回了一个形状为(1, 5151)的数组,而原始的x是(100, 1)。这并不是我期望的结果。我无法找出我的代码有什么问题。如果有人能指出我的代码错误或我的误解,那就太好了。我应该使用其他方法来转换原始数据吗?

谢谢你。

此致,

[更新]在我使用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)

显然,我再次在维度上犯了错误。谁能帮我解答这个问题?

谢谢你。


回答:

我想你需要像这样重塑你的x:

x=x.reshape(-1,1)

你的x的形状是(100,)而不是(100,1),而fit_transform期望的是2维。你得到5151个特征的原因是,你看到的是每个不同对的一个特征(100*99/2 = 4950),每个特征平方的一个特征(100),每个特征的一次幂的一个特征(100),以及零次幂的一个特征(1)。

对你编辑后的问题回应:你需要调用transform来转换你希望预测的数据。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注