我想知道是否可以使用带有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为向量。有解决方法吗?
答案 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
来度量泛化误差。