实施 XGBoost 回归器的问题
Issue implementing XGBoost Regressor
我是机器学习的初学者,正在尝试使用 Abalone 数据集。我试图预测鲍鱼的年龄(参考 this 数据集)。我 运行 一个 XGBoost 回归器,当我实现以下代码时代码运行良好:
model=XGBRegressor(n_estimators=500,learning_rate=0.05)
model.fit(X_train,y_train)
X_train_preds = model.predict(X_train)
X_test_preds = model.predict(X_test)
但是当我添加一些提前停止回合时,它停止工作:
model=XGBRegressor(n_estimators=500,learning_rate=0.05)
model.fit(X_train,y_train, early_stopping_rounds=5, eval_set=([X_test,y_test]))
X_train_preds = model.predict(X_train)
X_test_preds = model.predict(X_test)
并给出以下错误:
Traceback (most recent call last):
File "<ipython-input-55-6cfab6319852>", line 1, in <module>
runfile('C:/Users/dell/.spyder-py3/Abalone_project.py', wdir='C:/Users/dell/.spyder-py3')
File "E:\l\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 705, in runfile
execfile(filename, namespace)
File "E:\l\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/dell/.spyder-py3/Abalone_project.py", line 47, in <module>
model.fit(X_train,y_train, early_stopping_rounds=5, eval_set=([X_test,y_test]), verbose=False)
File "E:\l\Anaconda3\lib\site-packages\xgboost\sklearn.py", line 370, in fit
for i in range(len(eval_set)))
File "E:\l\Anaconda3\lib\site-packages\xgboost\sklearn.py", line 370, in <genexpr>
for i in range(len(eval_set)))
File "E:\l\Anaconda3\lib\site-packages\pandas\core\frame.py", line 2685, in __getitem__
return self._getitem_column(key)
File "E:\l\Anaconda3\lib\site-packages\pandas\core\frame.py", line 2692, in _getitem_column
return self._get_item_cache(key)
File "E:\l\Anaconda3\lib\site-packages\pandas\core\generic.py", line 2486, in _get_item_cache
values = self._data.get(item)
File "E:\l\Anaconda3\lib\site-packages\pandas\core\internals.py", line 4115, in get
loc = self.items.get_loc(item)
File "E:\l\Anaconda3\lib\site-packages\pandas\core\indexes\base.py", line 3065, 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
谁能告诉我错误的原因以及如何更正错误?
尝试更改此行
model.fit(X_train,y_train, early_stopping_rounds=5, eval_set=([X_test,y_test]))
到
model.fit(X_train,y_train, early_stopping_rounds=5, eval_set=[(X_test,y_test)]
您更新后的代码运行无误:
from xgboost import XGBRegressor
# dummy data
X_train = [[0,1], [1,2], [3,2]]
y_train = [0, 1, 0]
model=XGBRegressor(n_estimators=500,learning_rate=0.05)
model.fit(X_train,y_train, early_stopping_rounds=5, eval_set=[(X_train,y_train)])
X_train_preds = model.predict(X_train)
来自文档,
eval_set(evals, iteration=0, feval=None)
Evaluate a set of data.
Parameters
evals (list of tuples (DMatrix, string)) – List of items to be evaluated.
iteration (int) – Current iteration.
feval (function) – Custom evaluation function.
Returns
result – Evaluation result string.
evals (list of tuples (DMatrix, string)) – 要评估的项目列表。所以,它需要一个元组列表,而不是相反。
我是机器学习的初学者,正在尝试使用 Abalone 数据集。我试图预测鲍鱼的年龄(参考 this 数据集)。我 运行 一个 XGBoost 回归器,当我实现以下代码时代码运行良好:
model=XGBRegressor(n_estimators=500,learning_rate=0.05)
model.fit(X_train,y_train)
X_train_preds = model.predict(X_train)
X_test_preds = model.predict(X_test)
但是当我添加一些提前停止回合时,它停止工作:
model=XGBRegressor(n_estimators=500,learning_rate=0.05)
model.fit(X_train,y_train, early_stopping_rounds=5, eval_set=([X_test,y_test]))
X_train_preds = model.predict(X_train)
X_test_preds = model.predict(X_test)
并给出以下错误:
Traceback (most recent call last):
File "<ipython-input-55-6cfab6319852>", line 1, in <module>
runfile('C:/Users/dell/.spyder-py3/Abalone_project.py', wdir='C:/Users/dell/.spyder-py3')
File "E:\l\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 705, in runfile
execfile(filename, namespace)
File "E:\l\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/dell/.spyder-py3/Abalone_project.py", line 47, in <module>
model.fit(X_train,y_train, early_stopping_rounds=5, eval_set=([X_test,y_test]), verbose=False)
File "E:\l\Anaconda3\lib\site-packages\xgboost\sklearn.py", line 370, in fit
for i in range(len(eval_set)))
File "E:\l\Anaconda3\lib\site-packages\xgboost\sklearn.py", line 370, in <genexpr>
for i in range(len(eval_set)))
File "E:\l\Anaconda3\lib\site-packages\pandas\core\frame.py", line 2685, in __getitem__
return self._getitem_column(key)
File "E:\l\Anaconda3\lib\site-packages\pandas\core\frame.py", line 2692, in _getitem_column
return self._get_item_cache(key)
File "E:\l\Anaconda3\lib\site-packages\pandas\core\generic.py", line 2486, in _get_item_cache
values = self._data.get(item)
File "E:\l\Anaconda3\lib\site-packages\pandas\core\internals.py", line 4115, in get
loc = self.items.get_loc(item)
File "E:\l\Anaconda3\lib\site-packages\pandas\core\indexes\base.py", line 3065, 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
谁能告诉我错误的原因以及如何更正错误?
尝试更改此行
model.fit(X_train,y_train, early_stopping_rounds=5, eval_set=([X_test,y_test]))
到
model.fit(X_train,y_train, early_stopping_rounds=5, eval_set=[(X_test,y_test)]
您更新后的代码运行无误:
from xgboost import XGBRegressor
# dummy data
X_train = [[0,1], [1,2], [3,2]]
y_train = [0, 1, 0]
model=XGBRegressor(n_estimators=500,learning_rate=0.05)
model.fit(X_train,y_train, early_stopping_rounds=5, eval_set=[(X_train,y_train)])
X_train_preds = model.predict(X_train)
来自文档,
eval_set(evals, iteration=0, feval=None)
Evaluate a set of data.
Parameters
evals (list of tuples (DMatrix, string)) – List of items to be evaluated.
iteration (int) – Current iteration.
feval (function) – Custom evaluation function.
Returns
result – Evaluation result string.
evals (list of tuples (DMatrix, string)) – 要评估的项目列表。所以,它需要一个元组列表,而不是相反。