Python学习多项式预处理和量纲问题

Python学习多项式预处理和量纲问题,python,machine-learning,scikit-learn,polynomial-math,lreshape,Python,Machine Learning,Scikit Learn,Polynomial Math,Lreshape,我正在试验1-3次多项式变换对原始数据的拟合,每次使用100个预测值。I首先1)重塑原始数据,2)在测试集和预测空间(数据特征)上应用fit_变换,3)在预测空间上获得线性预测,4)使用以下代码将其导出到数组中: 从sklearn.linear\u模型导入线性回归 从sklearn.preprocessing导入多项式特征 从sklearn.model\u选择导入列车\u测试\u拆分 np.random.seed(0) n=100 x=np.linspace(0,10,n)+np.randn(

我正在试验1-3次多项式变换对原始数据的拟合,每次使用100个预测值。I首先1)重塑原始数据,2)在测试集和预测空间(数据特征)上应用fit_变换,3)在预测空间上获得线性预测,4)使用以下代码将其导出到数组中:

从sklearn.linear\u模型导入线性回归
从sklearn.preprocessing导入多项式特征
从sklearn.model\u选择导入列车\u测试\u拆分
np.random.seed(0)
n=100
x=np.linspace(0,10,n)+np.randn(n)/5
y=np.sin(x)+n/6+np.randn(n)/10
x=x。重塑(-1,1)
y=y。重塑(-1,1)
pred_data=np.linspace(0,10100)。重塑(-1,1)
结果=[]
因为我在[1,2,3]中:
多边形=多项式特征(阶数=i)
x_序列,x_测试,y_序列,y_测试=序列测试分割(x,y,随机状态=0)
x_poly1=多边形拟合变换(x_序列)
pred_数据=多边形拟合变换(pred_数据)
linreg1=线性回归()
pred=linreg1.predict(pred_数据)
结果追加(pred)
结果

首先,正如我在评论中所建议的,您应该始终对测试数据调用
transform()
pred\u data

但即使这样做,也会出现不同的错误。错误是由以下行引起的:

pred_数据=多边形拟合变换(pred_数据)

在这里,您将使用转换后的版本替换原始的
pred_数据。因此,对于循环的第一次迭代,它是有效的,但对于第二次和第三次迭代,它变得无效,因为它需要原始
pred_数据
,其形状(100,1)在for循环上方的这一行中定义:

pred_data=np.linspace(0,10100)。重塑(-1,1)

将循环中变量的名称更改为其他名称,所有操作都会正常进行

for i in [1, 2, 3] :
    poly = PolynomialFeatures(degree = i)
    x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=0)
    x_poly1 = poly.fit_transform(x_train)

    # Changed here
    pred_data_poly1 = poly.transform(pred_data)

    linreg1 = LinearRegression().fit(x_poly1, y_train)
    pred = linreg1.predict(pred_data_poly1)
    results.append(pred)
results

您应该始终只调用测试数据上的
transform()
,在您的情况下调用
pred\u数据
fit_transform()
call会忘记以前的调用并再次学习数据,可能会导致不同的维度。我尝试在pred_数据上使用poly.transform(),Python仍然返回错误消息:X形状与训练形状不匹配。