- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试对 sklearn 中的嵌套 CV 的内循环执行特征选择和网格搜索。虽然我可以将管道作为估算器传递给 RFECV
,但当我将 RFECV
作为估算器传递给 GridSearchCV
时,我会收到拟合错误>.
我发现将管道中模型的名称更改为“估计器”会将错误移至具有“回归无效参数”的管道,而不是在 RFECV
中,无论我将其命名为模型是无效参数。
我已经使用 rfcv.get_params().keys()
和 pipeline.get_params().keys()
验证了我正在调用的参数确实存在。
如果我将 SGDRegressor()
直接命名为“估计器”并完全忽略管道,我不会收到此错误,但此模型需要对 Y 变量进行特征缩放和对数转换。
from sklearn.compose import TransformedTargetRegressor
from sklearn.pipeline import Pipeline
from sklearn.model_selection import GridSearchCV
from sklearn.feature_selection import RFECV
from sklearn.preprocessing import MinMaxScaler
from sklearn.linear_model import SGDRegressor
import numpy as np
# random sample data
X = np.random.rand(100,2)
y = np.random.rand(100)
#passing coef amd importance through pipe and TransformedTargetRegressor
class MyPipeline(Pipeline):
@property
def coef_(self):
return self._final_estimator.coef_
@property
def feature_importances_(self):
return self._final_estimator.feature_importances_
class MyTransformedTargetRegressor(TransformedTargetRegressor):
@property
def feature_importances_(self):
return self.regressor_.feature_importances_
@property
def coef_(self):
return self.regressor_.coef_
# build pipeline
pipeline = MyPipeline([ ('scaler', MinMaxScaler()),
('estimator', MyTransformedTargetRegressor(regressor=SGDRegressor(), func=np.log1p, inverse_func=np.expm1))])
# define tuning grid
parameters = {"estimator__regressor__alpha": [1e-5,1e-4,1e-3,1e-2,1e-1],
"estimator__regressor__l1_ratio": [0.001,0.25,0.5,0.75,0.999]}
# instantiate inner cv
inner_kv = KFold(n_splits=5, shuffle=True, random_state=42)
rfcv = RFECV(estimator=pipeline, step=1, cv=inner_kv, scoring="neg_mean_squared_error")
cv = GridSearchCV(estimator=rfcv, param_grid=parameters, cv=inner_kv, iid=True,
scoring= "neg_mean_squared_error", n_jobs=-1, verbose=True)
cv.fit(X,y)
我收到以下错误,可以确认 regressor 是估算器管道的参数:
ValueError: Invalid parameter regressor for estimator MyPipeline(memory=None,
steps=[('scaler', MinMaxScaler(copy=True, feature_range=(0, 1))),
('estimator',
MyTransformedTargetRegressor(check_inverse=True,
func=<ufunc 'log1p'>,
inverse_func=<ufunc 'expm1'>,
regressor=SGDRegressor(alpha=0.0001,
average=False,
early_stopping=False,
epsilon=0.1,
eta0=0.01,
fit_intercept=True,
l1_ratio=0.15,
learning_rate='invscaling',
loss='squared_loss',
max_iter=1000,
n_iter_no_change=5,
penalty='l2',
power_t=0.25,
random_state=None,
shuffle=True,
tol=0.001,
validation_fraction=0.1,
verbose=0,
warm_start=False),
transformer=None))],
verbose=False). Check the list of available parameters with `estimator.get_params().keys()`.
谢谢
最佳答案
它必须是 estimator__estimator__regressor
因为你在 rfecv
中有管道。
试试这个!
parameters = {"estimator__estimator__regressor__alpha": [1e-5,1e-4,1e-3,1e-2,1e-1],
"estimator__estimator__regressor__l1_ratio": [0.001,0.25,0.5,0.75,0.999]}
注意:嵌套 CV 不是正确的方法。也许你可以单独进行特征选择,然后进行模型训练。
关于python - 通过嵌套 RFECV 和 GridSearchCV 传递管道的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58678439/
我对 sklearn 中的教程稍作修改 所以X有缺失值。这不适用于原始 svc,因此我尝试创建一个 clf 作为管道——一个 imputer,然后是一个 svc。但是,我仍然收到缺失值错误。将 RFE
我想使用包含的交叉验证 (RFECV) 执行递归特征消除。我的问题是,虽然我对我的数据进行了大量二次采样,但由于我的特征数量 (278),这个过程太慢了,而且可能无法在我为实验分配的时间内得出结论。
在 Sklearn 中有一个实现这个的提议 #15075 , 但与此同时,建议将 eli5 作为解决方案。但是,我不确定我是否以正确的方式使用它。这是我的代码: from sklearn.datase
我是 SKLearn 的新手,对特征选择有疑问。 我正在尝试构建一个 SVM 模型,我的数据具有大约 30 个特征,所有这些特征都大约 10k 个数据点,我目前正在尝试尽可能多地消除无用的特征。我先舍
我是 SKLearn 的新手,对特征选择有疑问。 我正在尝试构建一个 SVM 模型,我的数据具有大约 30 个特征,所有这些特征都大约 10k 个数据点,我目前正在尝试尽可能多地消除无用的特征。我先舍
我正在尝试运行 RFECV 来选择最佳功能,并运行 GridSearchCV 来获得最佳超参数。我的代码如下所示: params = {'estimator__C': [1e-4, 1e4]} est
来自 scikit-learn RFE documentation ,算法依次选择更小的特征集,只保留权重最高的特征。权重低的特征会被丢弃,这个过程会不断重复,直到剩余的特征数量与用户指定的数量相匹配
我正在尝试对 sklearn 中的嵌套 CV 的内循环执行特征选择和网格搜索。虽然我可以将管道作为估算器传递给 RFECV,但当我将 RFECV 作为估算器传递给 GridSearchCV 时,我会收
使用交叉验证 (RFECV) 的递归特征消除不起作用,得到 KeyError: 'weight' .正如我所见,它无法计算系数,因此缺少权重。 我有一个估计器作为 XGBClassifier。 最佳答
我正在使用 scikit-learn 的递归特征排名函数(http://scikit-learn.org/stable/modules/generated/sklearn.feature_select
我很难理解给定的 RFECV example在当前文档中。在情节中,它被写为“nb of misclassifications”,所以我希望它“越低越好”。但在示例图中,最好的已被选为最高的交叉验证分
受此启发:http://scikit-learn.org/stable/auto_examples/feature_selection/plot_rfe_with_cross_validation.h
我想编写一个代码,可以在几个处理器和预处理器上进行网格搜索,也可以在不同的功能组合上进行网格搜索。我通过在 gridsearchCV 中使用 RFECV 来完成此操作。然而,这需要很长时间才能运行。因
我试图使用 rfecv 缩小与我的分类器真正相关的特征的数量。这是我写的代码 import sklearn import pandas as p import numpy as np import s
我尝试使用 RFECV 进行特征选择,但每次都会给出不同的结果,交叉验证是否将样本 X 划分为随机 block 或顺序确定性 block ? 此外,为什么 grid_scores_ 和 score(X
我尝试使用 RFECV 进行特征选择,但每次都会给出不同的结果,交叉验证是否将样本 X 划分为随机 block 或顺序确定性 block ? 此外,为什么 grid_scores_ 和 score(X
我使用递归特征消除和交叉验证 (rfecv) 来找到我拥有的多个特征的最佳准确度得分 (m =154)。 rfecv = RFECV(estimator=logreg, step=1, cv=Stra
我对机器学习还很陌生,并试图自己解决问题。我正在使用 SciKit learn 并拥有一个包含大约 20,000 个特征的推文数据集 (n_features=20,000)。到目前为止,我的准确率、召
我正在使用 sklearn 的特征提取 RFECV,它有一个参数“n_jobs”来分配核心使用。 我有一个英特尔 i5-8400 CPU @ 2.80GHz(6 核) 我正在运行 ubuntu 16.
Scikit-learn 库支持递归特征消除(RFE)及其交叉验证版本(RFECV)。 RFECV 对我来说非常有用,它可以选择小特征,但我想知道 RFE 的交叉验证是如何完成的。 RFE 是减少最不
我是一名优秀的程序员,十分优秀!