【发布时间】:2014-08-28 07:43:47
【问题描述】:
我正在使用 python 中的 scikit learn 库,我想在使用 RandomizedSearchCV 进行交叉验证期间对每个样本进行加权。当我尝试这段代码时:
search = RandomizedSearchCV(estimator, param_distributions,
n_iter=args.iterations,
scoring=mae_scorer, n_jobs=8, refit=True,
cv=KFold(X_train.shape[0], 10, shuffle=True,
random_state=args.seed), verbose=1,
random_state=args.seed,
fit_params={'sample_weight': sample_weight})
出现以下错误:
AttributeError: 'list' object has no attribute 'copy'
值得一提的是sample_weight是一个浮点数列表,包含每个类的权重。有办法解决这个问题吗?
【问题讨论】:
-
您是如何生成此列表的?通常 scikit learn api 通常接受 numpy 数组作为数据,所以要么传递它,要么从你的列表中创建一个
-
谢谢@EdChum。我也检查了
numpy.asarray(sample_weight),但我收到了这个错误:ValueError: non-broadcastable output operand with shape (1118,1) doesn't match the broadcast shape (1118,1006)你知道吗? -
尝试隔离问题,没有 KFolds 是否可以工作?它是否适用于其他训练模型?检查您传递的参数类型,这些与在线文档和代码示例相比如何?尝试所有这些,看看你的进展如何,目前很难说,但我的建议应该会有所帮助
-
@EdChum 我认为问题出在
k-fold。因为当我将折叠数从 10 更改为 2 时,错误的数字从 1006 更改为 559。你知道我应该如何解决这个问题吗? -
不确定,希望 scikit-learn 开发人员之一会看到并发表评论。
标签: python machine-learning scikit-learn cross-validation