python - 使用 LinearRegression Python 进行递归特征消除

标签 python recursion scikit-learn linear-regression

所以我正在开发一个项目,该项目使用 RFECV 进行特征选择,然后使用所选变量进行岭回归。

数据集的结构方式我有一个 train_y = 因变量,train_x = 数据框中的其他所有内容(变量在其他模型中都很好)。

这是我正在使用的代码:

# Variable Selection with RFECV
lr = LinearRegression()
rfecv = RFECV(estimator = lr, step = 1, cv=StratifiedKFold(train_y, 2), scoring='r2')
selector = rfecv.fit(train_x, train_y)
train_X_new = selector.transform(train_x)
train_Y_new = selector.transform(train_y)

param_grid = {'alpha': sp_rand()}
# create and fit a ridge regression model, testing random alpha values
model = Ridge()
rsearch = RandomizedSearchCV(estimator=model, param_distributions=param_grid, n_iter=100)
rsearch.fit(train_X_new, train_Y_new)
expected = train_X_new
predicted = model.predict(train_Y_new)
# summarize the fit of the model
mse = np.mean((predicted-expected)**2)
print "MSE and Model Score: "
print(mse)
print(model.score(train_X_new, train_Y_new))

此行代码出错:

train_Y_new = selector.transform(train_y)

“ValueError:X 的形状与拟合期间的形状不同。”不知道是什么导致了错误。

感谢任何帮助/见解!

谢谢!

最佳答案

变换方法用于“将 X 减少到选定的特征”。此方法的目的是创建一个新的 X,其中仅包含与拟合相关的变量。

您收到错误,因为转换只需要形状与它所适合的 X 相匹配的输入。 Y 的形状不正确,也不应该。

目标变量 Y 不应发生变化。对 Y 调用转换是没有意义的,因为消除特征仅意味着更改 X。

关于python - 使用 LinearRegression Python 进行递归特征消除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43726208/

相关文章:

c++ - 不能在函数调用中使用 int 后递减

javascript - 为什么我的阶乘函数返回 NaN?

scikit-learn - 将 X.toarray 反转为 sklearn 中的 CountVectorizer

python - 将字符列编码为序数,但保持数字列相同

python - 自定义 scikit 编码器抛出转换错误

python - 如何使用 Numpy.concatenate 连接空数组?

python - 如何更改 matplotlib 在绘制时间戳对象时使用的步长?

javascript - 3D游戏引擎建议

python - 通过 pandas 数据框和 numpy 进行迭代

c++ - 如何递归调用以结构数组为参数的函数