- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在为我的训练集训练 XGBoostClassifier。
我的训练特征的形状是 (45001, 10338),这是一个 numpy 数组,我的训练标签的形状是 (45001,) [我有 1161 个独特的标签,所以我对标签进行了标签编码] 这也是一个 numpy 数组。
根据文档,它清楚地表明我可以从 numpy 数组创建 DMatrix。所以我直接使用上面提到的训练特征和标签作为 numpy 数组。但是我收到以下错误
---------------------------------------------------------------------------
XGBoostError Traceback (most recent call last)
<ipython-input-30-3de36245534e> in <module>()
13 scale_pos_weight=1,
14 seed=27)
---> 15 modelfit(xgb1, train_x, train_y)
<ipython-input-27-9d215eac135e> in modelfit(alg, train_data_features, train_labels, useTrainCV, cv_folds, early_stopping_rounds)
6 xgtrain = xgb.DMatrix(train_data_features, label=train_labels)
7 cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], nfold=cv_folds,
----> 8 metrics='auc',early_stopping_rounds=early_stopping_rounds)
9 alg.set_params(n_estimators=cvresult.shape[0])
10
/home/carnd/anaconda3/envs/dl/lib/python3.5/site-packages/xgboost/training.py in cv(params, dtrain, num_boost_round, nfold, stratified, folds, metrics, obj, feval, maximize, early_stopping_rounds, fpreproc, as_pandas, verbose_eval, show_stdv, seed, callbacks)
399 for fold in cvfolds:
400 fold.update(i, obj)
--> 401 res = aggcv([f.eval(i, feval) for f in cvfolds])
402
403 for key, mean, std in res:
/home/carnd/anaconda3/envs/dl/lib/python3.5/site-packages/xgboost/training.py in <listcomp>(.0)
399 for fold in cvfolds:
400 fold.update(i, obj)
--> 401 res = aggcv([f.eval(i, feval) for f in cvfolds])
402
403 for key, mean, std in res:
/home/carnd/anaconda3/envs/dl/lib/python3.5/site-packages/xgboost/training.py in eval(self, iteration, feval)
221 def eval(self, iteration, feval):
222 """"Evaluate the CVPack for one iteration."""
--> 223 return self.bst.eval_set(self.watchlist, iteration, feval)
224
225
/home/carnd/anaconda3/envs/dl/lib/python3.5/site-packages/xgboost/core.py in eval_set(self, evals, iteration, feval)
865 _check_call(_LIB.XGBoosterEvalOneIter(self.handle, iteration,
866 dmats, evnames, len(evals),
--> 867 ctypes.byref(msg)))
868 return msg.value
869 else:
/home/carnd/anaconda3/envs/dl/lib/python3.5/site-packages/xgboost/core.py in _check_call(ret)
125 """
126 if ret != 0:
--> 127 raise XGBoostError(_LIB.XGBGetLastError())
128
129
XGBoostError: b'[19:12:58] src/metric/rank_metric.cc:89: Check failed: (preds.size()) == (info.labels.size()) label size predict size not match'
请在下面找到我的型号代码:
def modelfit(alg, train_data_features, train_labels,useTrainCV=True, cv_folds=5, early_stopping_rounds=50):
if useTrainCV:
xgb_param = alg.get_xgb_params()
xgb_param['num_class'] = 1161
xgtrain = xgb.DMatrix(train_data_features, label=train_labels)
cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], nfold=cv_folds,
metrics='auc',early_stopping_rounds=early_stopping_rounds)
alg.set_params(n_estimators=cvresult.shape[0])
#Fit the algorithm on the data
alg.fit(train_data_features, train_labels, eval_metric='auc')
#Predict training set:
dtrain_predictions = alg.predict(train_data_features)
dtrain_predprob = alg.predict_proba(train_data_features)[:,1]
#Print model report:
print("\nModel Report")
print("Accuracy : %.4g" % metrics.accuracy_score(train_labels, dtrain_predictions))
我在上面的地方哪里出错了?
我的分类器如下:
xgb1 = xgb.XGBClassifier(
learning_rate =0.1,
n_estimators=50,
max_depth=5,
min_child_weight=1,
gamma=0,
subsample=0.8,
colsample_bytree=0.8,
objective='multi:softmax',
nthread=4,
scale_pos_weight=1,
seed=27)
编辑 - 2更改评估指标后,
---------------------------------------------------------------------------
XGBoostError Traceback (most recent call last)
<ipython-input-9-30c62a886c2e> in <module>()
13 scale_pos_weight=1,
14 seed=27)
---> 15 modelfit(xgb1, train_x_trail, train_y_trail)
<ipython-input-8-9d215eac135e> in modelfit(alg, train_data_features, train_labels, useTrainCV, cv_folds, early_stopping_rounds)
6 xgtrain = xgb.DMatrix(train_data_features, label=train_labels)
7 cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], nfold=cv_folds,
----> 8 metrics='auc',early_stopping_rounds=early_stopping_rounds)
9 alg.set_params(n_estimators=cvresult.shape[0])
10
/home/carnd/anaconda3/envs/dl/lib/python3.5/site-packages/xgboost/training.py in cv(params, dtrain, num_boost_round, nfold, stratified, folds, metrics, obj, feval, maximize, early_stopping_rounds, fpreproc, as_pandas, verbose_eval, show_stdv, seed, callbacks)
398 evaluation_result_list=None))
399 for fold in cvfolds:
--> 400 fold.update(i, obj)
401 res = aggcv([f.eval(i, feval) for f in cvfolds])
402
/home/carnd/anaconda3/envs/dl/lib/python3.5/site-packages/xgboost/training.py in update(self, iteration, fobj)
217 def update(self, iteration, fobj):
218 """"Update the boosters for one iteration"""
--> 219 self.bst.update(self.dtrain, iteration, fobj)
220
221 def eval(self, iteration, feval):
/home/carnd/anaconda3/envs/dl/lib/python3.5/site-packages/xgboost/core.py in update(self, dtrain, iteration, fobj)
804
805 if fobj is None:
--> 806 _check_call(_LIB.XGBoosterUpdateOneIter(self.handle, iteration, dtrain.handle))
807 else:
808 pred = self.predict(dtrain)
/home/carnd/anaconda3/envs/dl/lib/python3.5/site-packages/xgboost/core.py in _check_call(ret)
125 """
126 if ret != 0:
--> 127 raise XGBoostError(_LIB.XGBGetLastError())
128
129
XGBoostError: b'[03:43:03] src/objective/multiclass_obj.cc:42: Check failed: (info.labels.size()) != (0) label set cannot be empty'
最佳答案
您得到的原始错误是因为此指标不是为多类分类设计的(请参阅 here)。
你可以使用 scikit learn wrapper xgboost 来克服这个问题。我用这个包装器修改了你的代码,以产生类似的功能。我不确定你为什么要进行网格搜索,因为你没有枚举参数。相反,您使用的是在 xgb1
中指定的参数。这是修改后的代码:
import xgboost as xgb
import sklearn
import numpy as np
from sklearn.model_selection import GridSearchCV
def modelfit(alg, train_data_features, train_labels,useTrainCV=True, cv_folds=5):
if useTrainCV:
params=alg.get_xgb_params()
xgb_param=dict([(key,[params[key]]) for key in params])
boost = xgb.sklearn.XGBClassifier()
cvresult = GridSearchCV(boost,xgb_param,cv=cv_folds)
cvresult.fit(X,y)
alg=cvresult.best_estimator_
#Fit the algorithm on the data
alg.fit(train_data_features, train_labels)
#Predict training set:
dtrain_predictions = alg.predict(train_data_features)
dtrain_predprob = alg.predict_proba(train_data_features)[:,1]
#Print model report:
print("\nModel Report")
print("Accuracy : %.4g" % sklearn.metrics.accuracy_score(train_labels, dtrain_predictions))
xgb1 = xgb.sklearn.XGBClassifier(
learning_rate =0.1,
n_estimators=50,
max_depth=5,
min_child_weight=1,
gamma=0,
subsample=0.8,
colsample_bytree=0.8,
objective='multi:softmax',
nthread=4,
scale_pos_weight=1,
seed=27)
X=np.random.normal(size=(200,30))
y=np.random.randint(0,5,200)
modelfit(xgb1, X, y)
我得到的输出是
Model Report
Accuracy : 1
请注意,我使用的数据要小得多。对于您提到的大小,算法可能会非常慢。
关于python - XGBoostError : b'[19:12:58] src/metric/rank_metric. cc :89: Check failed: (preds. size()) == (info.labels.size()) 标签大小预测大小不匹配',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45261638/
我已经将无法编译的代码减少为以下代码: [Demo] #include // copy_if #include // cout #include // back_inserter #inc
(dissoc :a m)允许我解除给定的键。但是,有没有办法使用谓词函数来分离 pred 为真的任何键? (dissoc-with-pred pred? m) 所以给了一张 map - {:a 2
我正在尝试使用 R 中的 ROCR 包绘制 ROC 曲线,但遇到以下错误: Error in performance(pred, "tpr", "fpr") : Assertion on 'pred'
有什么更可爱的表达方式吗? #(or (:a %) (b: %) (:c %)) ;; would prefer (desired-fn :a :b :c) clojure.core 缺少“any-p
我正在 clojure 中处理一个序列。我想检索元素,直到谓词函数为真。我怎么做? 最佳答案 您可以使用 take-while连同 not user=> (take-while (comp not e
如何仅使用 succ 和 pred 制作乘法函数? 我已有的添加功能: plus :: Integer -> Integer -> Integer plus a b | a == 0 = b
我有一个 seq,(def coll '([:a 20] [:b 30] [:c 50] [:d 90])) 我想迭代 seq,并仅修改与谓词匹配的第一个元素。 谓词(def pred (fn [[a
好吧,我以为它是固定的,但我得到的结果完全不一致。我从头开始重写它以重新开始,这是我的结果。我没有收到任何错误,也没有崩溃,只是没有删除它们。它完全弄乱了树,给了我更多的叶子,把所有东西都弄混了。不知
有人可以向我解释一下 STL 算法中的 pred 字段是如何使用的吗? 谢谢 最佳答案 pred 代表 predicate,它基本上是一个可调用实体,它可以是一个函数,也可以是一个仿函数(或 lamb
Pascal 是我的学习语言,我很好奇 C# 是否也有函数 pred 和 succ。 这是我在 Pascal 中完成的,我想在 C# 中尝试 // in Pascal: pred(3) = 2 suc
这是为了让用户输入他/她希望搜索的姓名、联系方式和地址。我想做的是显示所有应用 pred 的对象是真的,但我似乎无法让它工作。 static string searchName, searchCont
是否有可能在一次递归过程中,不使用除 is_zero、succ 和 pred (n', n'+d') redBad n 0 delta = case redBad n delta 0 of (
我的代码在下面的ELSE部分中部分工作。我的部分意思是它不会插入表,但由于所有验证阶段都是正确的,它会重定向到感谢页面。 我的意思通常期望两者都是。插入表A N D,然后转到感谢页面。 我认为我的情况
在 unordered_map 的情况下,我们在使用 user-defined 键时定义 hash 和 pred 仿函数. map 的模板语法如下: template ,
这段代码: {-# LANGUAGE TypeFamilies #-} module Study where class C a where type T a :: * pred ::
我正在使用“hdnom”包中的“智能”数据集。下面提到的是我的代码。我收到以下错误。请让我知道我哪里出错了。我无法理解错误。 诺模图错误(拟合,model.type = "aenet", x, tim
这是我的数据: Anon_Student_Id Problem_Hierarchy Problem_Name Problem_View Number_Of_Steps Sum_O
来自函数 every? 的示例和对 Clojuredoc 的评论 user> (every? true? '()) ;empty is true? true user> (every? fals
我正在使用 TensorFlow 对象检测 API 运行 SSD MobileNetV2,运行以下代码后 (keras-cpu-exp) D:\Pycharm Projects\CPU\models\
library(ISLR) standardized.X=scale(Caravan [,-86]) test =1:1000 train.X=standardized.X[-test ,] test
我是一名优秀的程序员,十分优秀!