多输出回归器和sklearn的RFE模块

时间:2019-07-16 14:48:19

标签: python scikit-learn rfe

我想知道是否可以使用带有sklearn包的多元估计量进行RFE。我检查了documentation,但找不到支持它的任何内容。这是最小的代码:

import sklearn.linear_model as skl
from sklearn.feature_selection import RFE
from scat import *
from sklearn import metrics, model_selection

# -- params
n_folds = 5
N       = 5000
# -- regressor
regress = skl.RidgeCV(alphas=[1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1])

# -- cross-validation
P = np.random.permutation(N).reshape((n_folds, -1))
cross_val_folds = []

for i_fold in range(n_folds):
    fold = (np.concatenate(P[np.arange(n_folds) != i_fold], axis=0), P[i_fold])
    cross_val_folds.append(fold)

my_X = np.random.normal(0,1,[N, 315])
my_y = np.random.normal(0,1,[N, 2])
my_pred = model_selection.cross_val_predict(regress, X=my_X, y=my_y, cv=cross_val_folds)

MAE = metrics.mean_absolute_error(my_y, my_pred)
RMSE = np.sqrt(metrics.mean_squared_error(my_y, my_pred))
print('MAE: {}, RMSE: {}'.format(round(MAE, 5), round(RMSE, 5)))

rfe = RFE(regress, 300)
feature_final = rfe.fit_transform(my_X, my_y)

但是在测试时出现以下错误

  

ValueError:输入形状错误(5000,2)

没有提供太多信息。


编辑:

显然,使用RFE功能,y会通过

y = column_or_1d(y, warn=True)

,它要求y为向量。有解决方法吗?

1 个答案:

答案 0 :(得分:1)

RFE不支持多标签格式,因为每个目标都将导致选择输入功能的不同组合。因此,您需要为每个目标变量创建单独的RFE

例如:

rfe = {}
for i in range(my_y.shape[1]):
    rfe[i] = RFE(regress, 300) 
    rfe[i].fit(my_X, my_y[:,i])

feature_final = rfe[0].transform(my_X)
feature_final.shape
# (5000, 300)

来自cross_val_predict的{​​{3}}的注释:

  

将这些预测传递到评估中是不合适的   指标。使用cross_validate来度量泛化误差。