- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在寻找 xgboost 的最佳参数时,我遇到了一个问题。
整个过程进行得很顺利,我设法将参数附加到模型并检查其准确性,但我的解决方案非常原始并且不太好(“手动”将参数附加到先前创建的模型)
当我尝试检查模型的准确性时,出现以下错误:
AttributeError: 'Booster' object has no attribute 'score'
准确度:
accuracy = classifier.score(X_test, y_test)
print(accuracy*100,'%')
我把所有代码放在下面(都是因为我不知道错误到底发生在哪里):
# Fitting XGBoost to the Training set
from xgboost import XGBClassifier
classifier = XGBClassifier()
# Predicting the Test set results
y_pred = classifier.predict(X_test)
# here the accuracy is checked without any problem
accuracy = classifier.score(X_test, y_test)
print(accuracy*100,'%')
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)
params = {
# Parameters that we are going to tune.
'max_depth':6,
'min_child_weight': 1,
'eta':.3,
'lambda': .1,
'subsample': 1,
'colsample_bytree': 1,
# Other parameters
'objective':'reg:squarederror',
}
params['eval_metric'] = "rmse"
num_boost_round = 999
model = xgb.train(
params,
dtrain,
num_boost_round=num_boost_round,
evals=[(dtest, "Test")],
early_stopping_rounds=10
)
print("Best RMSE: {:.2f} with {} rounds".format(
model.best_score,
model.best_iteration+1))
cv_results = xgb.cv (
params,
dtrain,
num_boost_round = num_boost_round,
seed = 42,
nfold = 5,
metrics = {'rmse'},
early_stopping_rounds = 10
)
cv_results
cv_results ['test-rmse-mean']. min ()
gridsearch_params = [
(max_depth, min_child_weight)
for max_depth in range(9,12)
for min_child_weight in range(5,8)
]
min_rmse = float("Inf")
best_params = None
for max_depth, min_child_weight in gridsearch_params:
print("CV with max_depth={}, min_child_weight={}".format(
max_depth,
min_child_weight))
# Update our parameters
params['max_depth'] = max_depth
params['min_child_weight'] = min_child_weight
# Run CV
cv_results = xgb.cv(
params,
dtrain,
num_boost_round=num_boost_round,
seed=42,
nfold=5,
metrics={'rmse'},
early_stopping_rounds=10
)
# Update best RMSE
mean_rmse = cv_results['test-rmse-mean'].min()
boost_rounds = cv_results['test-rmse-mean'].argmin()
print("\RMSE {} for {} rounds".format(mean_rmse, boost_rounds))
if mean_rmse < min_rmse:
min_rmse = mean_rmse
best_params = (max_depth,min_child_weight)
print("Best params: {}, {}, RMSE: {}".format(best_params[0], best_params[1], min_rmse))
params['max_depth'] = 9
params['min_child_weight'] = 7
gridsearch_params = [
(subsample, colsample)
for subsample in [i/10. for i in range(7,11)]
for colsample in [i/10. for i in range(7,11)]
]
min_rmse = float("Inf")
best_params = None
# We start by the largest values and go down to the smallest
for subsample, colsample in reversed(gridsearch_params):
print("CV with subsample={}, colsample={}".format(
subsample,
colsample))
# We update our parameters
params['subsample'] = subsample
params['colsample_bytree'] = colsample
# Run CV
cv_results = xgb.cv(
params,
dtrain,
num_boost_round=num_boost_round,
seed=42,
nfold=5,
metrics={'rmse'},
early_stopping_rounds=10
)
# Update best score
mean_rmse = cv_results['test-rmse-mean'].min()
boost_rounds = cv_results['test-rmse-mean'].argmin()
print("\tRMSE {} for {} rounds".format(mean_rmse, boost_rounds))
if mean_rmse < min_rmse:
min_rmse = mean_rmse
best_params = (subsample,colsample)
print("Best params: {}, {}, RMSE: {}".format(best_params[0], best_params[1], min_rmse))
params['subsample'] = 1.0
params['colsample_bytree'] = 1.0
%time
# This can take some time…
min_rmse = float("Inf")
best_params = None
for eta in [.3, .2, .1, .05, .01, .005]:
print("CV with eta={}".format(eta))
# We update our parameters
params['eta'] = eta
# Run and time CV
%time cv_results = xgb.cv(\
params,\
dtrain,\
num_boost_round=num_boost_round,\
seed=42,\
nfold=5,\
metrics=['rmse'],\
early_stopping_rounds=10\
)
# Update best score
mean_rmse = cv_results['test-rmse-mean'].min()
boost_rounds = cv_results['test-rmse-mean'].argmin()
print("\tRMSE {} for {} rounds\n".format(mean_rmse, boost_rounds))
if mean_rmse < min_rmse:
min_rmse = mean_rmse
best_params = eta
print("Best params: {}, RMSE: {}".format(best_params, min_rmse))
params['eta'] = .2
classifier = xgb.train(
params,
dtrain,
num_boost_round=num_boost_round,
evals=[(dtest, "Test")],
early_stopping_rounds=10
)
num_boost_round = model.best_iteration + 1
best_model = xgb.train(
params,
dtrain,
num_boost_round=num_boost_round,
evals=[(dtest, "Test")]
)
from sklearn.metrics import mean_absolute_error
mean_absolute_error(best_model.predict(dtest), y_test)
best_model.save_model("my_model.model")
loaded_model = xgb.Booster()
loaded_model.load_model("my_model.model")
accuracy = classifier.score(X_test, y_test)
print(accuracy*100,'%')
第二次尝试检查准确性时,出现错误。
最佳答案
您的classifier
对象是一个对象类型Booster
,它不包含方法score
。
您可以使用predict
方法获取预测并使用sklearn.metrics
计算您的分数
关于python - “Booster”对象没有属性 'score' - 准确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57801762/
我是 xgboost 的新手,我想可视化我的 xgboost 模型。 这是我的代码,代码来自教程,可能没有错误。 from numpy import loadtxt from xgboost impo
首先:它是 boost::noncopyable 还是 booster::noncopyable。我在不同的地方都见过。 为什么要让一个类不可复制?能否提供一些示例用例? 最佳答案 只要你有一个类有一
Yii 助推器 documentation展示如何在按钮上制作弹出框。我想在 anchor 元素而不是按钮上创建一个。本质上我想将弹出窗口与 Yii 的 tooltip 结合起来。有谁知道该怎么做吗?
Yii 助推器 documentation显示如何在按钮上制作弹出窗口。我想在 anchor 元素而不是按钮上创建一个。本质上,我想将弹出窗口与 Yii 的 tooltip 结合起来。 .有谁知道如何
我阅读了文档, import xgboost as xgb class xgboost.XGBClassifier(max_depth=3, learning_rate=0.1, n_estimato
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我想创建一个这样的表 Yii Booster Gridview table 这是我在 Controller 中的代码: $rawData=Jobspecs::model()->with('custom
我通常使用 regr = XGBClassifier() regr.fit(X, y) regr.feature_importances_ 其中 type(regr) 是 . 但是,我有一个腌制的 m
我正在使用带有 YiiBooster 扩展的 Yii。我想要一个像这样的弹出窗口: array( 'header' => '', 'value' => function
我正在使用 Yii 和 YiiBooster 创建应用程序。当我将 TbProgress 小部件放入 td 单元格时 - 它的高度似乎有某种底部填充(如 20-30px)。它看起来很糟糕,因为它导致我
我目前正在使用 xgb.train(...)它返回一个助推器,但我想使用 RFE 来选择最好的 100 个功能。返回的 booster 不能在 RFE 中使用,因为它不是 sklearn 估计器。 X
我在简单的项目 yii 中使用扩展助推器,我认为助推器在 yii 项目中存在冲突,我可以将助推器添加到我的项目中,但浏览器控制台中的所有页面都出现错误: 例如,过滤器的 CGridview 不起作用或
我尝试将日期时间字符串转换为 SArray 的日期时间(使用 C++ 助推器库),但它似乎不理解 %p 格式说明符。 http://www.boost.org/doc/libs/1_43_0/doc/
如果我从 radiobuttonlistgroup 检查,我想显示该 div,显示的 div 取决于 radiobuttonlist 的值。这是我的 html 代码: radioButtonL
我是 Yii 的新手,我需要在 Yii 中为员工详细信息制作一个 gridView,为此我遵循了 http://yii-booster.clevertech.biz/components.html#t
选项“--address-model=32,64”会构建 32 和 64 库,还是必须分别构建两个? 最佳答案 在做: b2 address-model=32,64 或者.. b2 address-m
我训练了一个 xgboost 模型并保存了它。然后我将它复制到我的另一个系统,通过以下代码预测结果。 python 3.7,xgboost 0.8, conda 如果我从 csv 文件加载数据,相同的
我正在尝试使用 mlflow 保存模型,然后加载它以进行预测。 我正在使用 xgboost.XGBRegressor 模型及其 sklearn 函数 .predict() 和 .predict_pro
我正在使用带有 Boostrap 和 Booster 的 yii 框架。在我的网页上,我需要使用 jQuery 版本 1.9.1。当我包括它时,例如 $cs->registerScriptFile($
我正在使用 yii-booster(4.0.1) TbGridView(extends CGridView) 并且需要更改 _REQUEST($_POST, $_GET) 中的过滤器变量名称以实现过滤
我是一名优秀的程序员,十分优秀!