- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建这个演示是为了演示从库内部抛出的错误。此代码将数据集拆分为 train/eval/test 并使用 train/eval 进行超参数搜索、提前停止,同时保留测试集以供以后评估。我缩小了与 GridSearchCV 交叉验证相关的错误范围,但我无法找出确切的根本原因并进行修复。
from sklearn import svm, datasets
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import train_test_split
import numpy as np
import pandas as pd
import xgboost as xgb
iris = datasets.load_iris()
df = pd.DataFrame(data=np.c_[iris['data'], iris['target']], columns=iris['feature_names'] + ['target'])
X, y = df[['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']], df['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
X_train_split, X_eval_split, y_train_split, y_eval_split = train_test_split(X_train, y_train, test_size=0.25, random_state=42)
parameters = {
'max_depth': (2, 3, 4),
}
fit_params = {
'early_stopping_rounds': 2,
'eval_set': (X_eval_split, y_eval_split),
}
model = xgb.XGBClassifier()
gs = GridSearchCV(model, parameters, cv=3)
gs.fit(X_train_split, y_train_split, **fit_params)
但是我收到了这条模糊的消息:
Traceback (most recent call last):
File "/Users/foo/bar/.env/lib/python3.6/site-packages/pandas/core/indexes/base.py", line 3078, in get_loc
return self._engine.get_loc(key)
File "pandas/_libs/index.pyx", line 140, in pandas._libs.index.IndexEngine.get_loc
File "pandas/_libs/index.pyx", line 162, in pandas._libs.index.IndexEngine.get_loc
File "pandas/_libs/hashtable_class_helper.pxi", line 1492, in pandas._libs.hashtable.PyObjectHashTable.get_item
File "pandas/_libs/hashtable_class_helper.pxi", line 1500, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 0
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "t.py", line 36, in <module>
gs.fit(X_train_split, y_train_split, **fit_params)
File "/Users/foo/bar/.env/lib/python3.6/site-packages/sklearn/model_selection/_search.py", line 640, in fit
cv.split(X, y, groups)))
File "/Users/foo/bar/.env/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py", line 779, in __call__
while self.dispatch_one_batch(iterator):
File "/Users/foo/bar/.env/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py", line 625, in dispatch_one_batch
self._dispatch(tasks)
File "/Users/foo/bar/.env/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py", line 588, in _dispatch
job = self._backend.apply_async(batch, callback=cb)
File "/Users/foo/bar/.env/lib/python3.6/site-packages/sklearn/externals/joblib/_parallel_backends.py", line 111, in apply_async
result = ImmediateResult(func)
File "/Users/foo/bar/.env/lib/python3.6/site-packages/sklearn/externals/joblib/_parallel_backends.py", line 332, in __init__
self.results = batch()
File "/Users/foo/bar/.env/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py", line 131, in __call__
return [func(*args, **kwargs) for func, args, kwargs in self.items]
File "/Users/foo/bar/.env/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py", line 131, in <listcomp>
return [func(*args, **kwargs) for func, args, kwargs in self.items]
File "/Users/foo/bar/.env/lib/python3.6/site-packages/sklearn/model_selection/_validation.py", line 458, in _fit_and_score
estimator.fit(X_train, y_train, **fit_params)
File "/Users/foo/bar/.env/lib/python3.6/site-packages/xgboost/sklearn.py", line 526, in fit
for i in range(len(eval_set))
File "/Users/foo/bar/.env/lib/python3.6/site-packages/xgboost/sklearn.py", line 526, in <genexpr>
for i in range(len(eval_set))
File "/Users/foo/bar/.env/lib/python3.6/site-packages/pandas/core/frame.py", line 2688, in __getitem__
return self._getitem_column(key)
File "/Users/foo/bar/.env/lib/python3.6/site-packages/pandas/core/frame.py", line 2695, in _getitem_column
return self._get_item_cache(key)
File "/Users/foo/bar/.env/lib/python3.6/site-packages/pandas/core/generic.py", line 2489, in _get_item_cache
values = self._data.get(item)
File "/Users/foo/bar/.env/lib/python3.6/site-packages/pandas/core/internals.py", line 4115, in get
loc = self.items.get_loc(item)
File "/Users/foo/bar/.env/lib/python3.6/site-packages/pandas/core/indexes/base.py", line 3080, in get_loc
return self._engine.get_loc(self._maybe_cast_indexer(key))
File "pandas/_libs/index.pyx", line 140, in pandas._libs.index.IndexEngine.get_loc
File "pandas/_libs/index.pyx", line 162, in pandas._libs.index.IndexEngine.get_loc
File "pandas/_libs/hashtable_class_helper.pxi", line 1492, in pandas._libs.hashtable.PyObjectHashTable.get_item
File "pandas/_libs/hashtable_class_helper.pxi", line 1500, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 0
有人可以就我收到此错误的原因提供一些建议吗?
最佳答案
根据 the documentation :
eval_set (list, optional) – A list of (X, y) tuple pairs to use as a validation set for early-stopping
eval_set
应该是一个元组列表。但是你的 eval_set
只是一个元组:
fit_params = {
'early_stopping_rounds': 2,
'eval_set': (X_eval_split, y_eval_split),
}
改成这样:
fit_params = {
'early_stopping_rounds': 2,
'eval_set': [(X_eval_split, y_eval_split)],
}
您的代码将运行。
关于python - "KeyError: 0"与 xgboost、scikit-learn 和 pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52338532/
是否可以计算 xgboost 模型的内部节点预测? R 包 gbm 提供了对每棵树的内部节点的预测。 然而,xgboost 输出仅显示对模型最后一片叶子的预测。 xgboost 输出: 请注意,质量列
我想知道哪个损失函数使用 XGBoost 进行多类分类。我找到了 in this question二元情况下逻辑分类的损失函数。 我认为对于多类情况,它可能与 GBM 中的相同(对于 K 类)whic
XGBoost 使用加法训练的方法,在该方法中对先前模型的残差进行建模。 虽然这是顺序的,那么它如何并行计算呢? 最佳答案 Xgboost 不会像您提到的那样并行运行多棵树,您需要在每棵树之后进行预测
我正在看下面的图片。 有人可以解释一下它们是如何计算的吗?我以为 N 是 -1,是 +1,但后来我不明白这个小女孩怎么有 0.1。但这对于树 2 也不起作用。 最佳答案 我同意@user1808924
我已经使用 Amazon Sagemaker 构建了一个 XGBoost 模型,但是我找不到任何可以帮助我解释模型并验证它是否学习了正确的依赖关系的东西。 通常,我们可以通过 python API (
这是我的代码: xgb <- xgboost(data = as.matrix(df_all_combined), label = as.matrix(target_tr
在 xgboost 中可以设置参数 weight对于 DMatrix .这显然是一个权重列表,其中每个值都是相应样本的权重。 我找不到有关这些权重如何在梯度提升过程中实际使用的任何信息。他们是否与 e
不工作: import warnings warnings.filterwarnings('ignore') 我得到的警告: [14:24:45] WARNING: C:/Jenkins/worksp
我有一个用 Python 训练的 XGBoost 二元分类器模型。 我想在不同的脚本环境 (MQL4) 中使用纯数学运算而不使用 XGBoost 库 (.predict) 从该模型生成新输入数据的输出
我有一个仅包含分类特征和分类标签的数据模型。 因此,当我在 XGBoost 中手动构建该模型时,我基本上会将特征转换为二进制列(使用 LabelEncoder 和 OneHotEncoder),并使用
我使用 XGBoost 的 python 实现。目标之一是rank:pairwise并且最小化成对损失( Documentation )。但是,它没有说明输出的范围。我看到 -10 到 10 之间的数
我遇到了一个奇怪的问题: 我通过 hyperopt 定义了我的 XGB 超参数 'max_depth' hp.choice('max_depth',range(2,20)) 但我得到了 'max_de
我是 R 编程语言新手,我需要运行“xgboost”进行一些实验。问题是我需要交叉验证模型并获得准确性,我发现两种方法可以给我不同的结果: 使用“插入符号”: library(mlbench) lib
选择 auc、error 或 logloss 作为 XGBoost 的 eval_metric 对其性能有何影响?假设数据不平衡。它如何影响准确度、召回率和精确度? 最佳答案 在不同的评估矩阵 之间进
我是 Python 中 XGBoost 的新手,所以如果这里的答案很明显,我深表歉意,但我正在尝试使用 panda 数据框并在 Python 中获取 XGBoost 来给我使用 Scikit-Lear
我知道您可以为不平衡的数据集设置 scale_pos_weight。然而,如何处理不平衡数据集中的多分类问题。我经历过https://datascience.stackexchange.com/que
我正在使用 xgboost 的功能 pred_contribs 以便为我的模型的每个样本获得某种可解释性(shapley 值)。 booster.predict(test, pred_contribs
在 xgboost 0.81 中 cox ph 生存模型的新实现中,如何指定事件的开始和结束时间? 谢谢 例如,R 等效函数是: cph_mod = coxph(Surv(Start, Stop, S
我正在 R 中建模 claim 频率(泊松分布)。我正在使用 gbm和 xgboost包,但似乎xgboost没有将曝光考虑在内的偏移参数? 在 gbm ,人们会按如下方式考虑暴露: gbm.fit(
xgboost 包允许构建一个随机森林(实际上,它选择列的随机子集来为整棵树的 split 选择一个变量,而不是为了点头,因为它是算法的经典版本,但它可以忍受)。但是对于回归,似乎只使用了森林中的一棵
我是一名优秀的程序员,十分优秀!