python多类分类XGBClassifier的交叉验证
我试图使用以下改编自的代码对XGBClassifier执行交叉验证,以解决多类分类问题python多类分类XGBClassifier的交叉验证,python,classification,cross-validation,xgboost,Python,Classification,Cross Validation,Xgboost,我试图使用以下改编自的代码对XGBClassifier执行交叉验证,以解决多类分类问题 其中y\u列包含从0到4的标签。但是,当我运行此代码时,我从xgb.cv函数xgboost.core.xgboothror得到以下错误:参数num_类的值0应该大于等于1。在XGBoost文档中,我看到在多类情况下,xgb根据目标向量中的标签推断类的数量,所以我不知道发生了什么 必须将参数'num_class'添加到xgb_参数字典中。参数说明和您在上面提供的链接中的评论中也提到了这一点。这解决了我的问题。我
其中
y\u列
包含从0到4的标签。但是,当我运行此代码时,我从xgb.cv
函数xgboost.core.xgboothror得到以下错误:参数num_类的值0应该大于等于1
。在XGBoost文档中,我看到在多类情况下,xgb根据目标向量中的标签推断类的数量,所以我不知道发生了什么 必须将参数'num_class'添加到xgb_参数字典中。参数说明和您在上面提供的链接中的评论中也提到了这一点。这解决了我的问题。我之前尝试在XGBClassifier初始化中设置num_class
,但它无法识别参数。非常感谢!我不明白,当我把它添加到参数网格中时,我得到了ValueError:assistor XGBClassifier的无效参数num_类。用
estimator.get_params().keys()检查可用参数列表。我认为这个答案没有充分面对这个问题,没有解释应该如何设置参数。与sklearn包装器相关的错误,但很多人都有这个问题,解决方案并不明显。@LetsPlayYahtzee没有这样解释,人们应该如何设置参数:xgb_参数['num_class']=k#k=类数
,这就是原始问题的答案<代码>与sklearn相关的错误
不是OP问题中的错误,而是另一个人评论中的错误。这是完全错误的答案!API()说{num_class}不是参数的一部分!他是怎么安排的?
import numpy as np
import pandas as pd
import xgboost as xgb
from xgboost.sklearn import XGBClassifier
from sklearn.preprocessing import LabelEncoder
from sklearn import cross_validation, metrics
from sklearn.grid_search import GridSearchCV
def modelFit(alg, X, y, useTrainCV=True, cvFolds=5, early_stopping_rounds=50):
if useTrainCV:
xgbParams = alg.get_xgb_params()
xgTrain = xgb.DMatrix(X, label=y)
cvresult = xgb.cv(xgbParams,
xgTrain,
num_boost_round=alg.get_params()['n_estimators'],
nfold=cvFolds,
stratified=True,
metrics={'mlogloss'},
early_stopping_rounds=early_stopping_rounds,
seed=0,
callbacks=[xgb.callback.print_evaluation(show_stdv=False), xgb.callback.early_stop(3)])
print cvresult
alg.set_params(n_estimators=cvresult.shape[0])
# Fit the algorithm
alg.fit(X, y, eval_metric='mlogloss')
# Predict
dtrainPredictions = alg.predict(X)
dtrainPredProb = alg.predict_proba(X)
# Print model report:
print "\nModel Report"
print "Classification report: \n"
print(classification_report(y_val, y_val_pred))
print "Accuracy : %.4g" % metrics.accuracy_score(y, dtrainPredictions)
print "Log Loss Score (Train): %f" % metrics.log_loss(y, dtrainPredProb)
feat_imp = pd.Series(alg.booster().get_fscore()).sort_values(ascending=False)
feat_imp.plot(kind='bar', title='Feature Importances')
plt.ylabel('Feature Importance Score')
# 1) Read training set
print('>> Read training set')
train = pd.read_csv(trainFile)
# 2) Extract target attribute and convert to numeric
print('>> Preprocessing')
y_train = train['OutcomeType'].values
le_y = LabelEncoder()
y_train = le_y.fit_transform(y_train)
train.drop('OutcomeType', axis=1, inplace=True)
# 4) Extract features and target from training set
X_train = train.values
# 5) First classifier
xgb = XGBClassifier(learning_rate =0.1,
n_estimators=1000,
max_depth=5,
min_child_weight=1,
gamma=0,
subsample=0.8,
colsample_bytree=0.8,
scale_pos_weight=1,
objective='multi:softprob',
seed=27)
modelFit(xgb, X_train, y_train)