如何在sklearn中无需重启内核获取多次运行的平均Accuracy Score?
无需重启内核的替代方法
方法1:在当前内核中重复训练多次取平均
直接通过循环重复训练、评估流程,无需重启内核就能得到多次结果的平均值,代码示例:
from xgboost import XGBClassifier from sklearn.metrics import accuracy_score import numpy as np # 定义模型参数 model_params = {"n_estimators": 1000, "max_depth": 2, "learning_rate": 0.02} accuracy_list = [] # 重复训练10次 for _ in range(10): model_xgbc = XGBClassifier(**model_params) model_xgbc.fit(xtrain, ytrain) predictions = model_xgbc.predict(xtest) accuracy_list.append(accuracy_score(predictions, ytest)) # 计算并输出平均准确率 mean_acc = np.mean(accuracy_list) print(f"10次训练平均准确率: {mean_acc}") print(f"各次训练准确率: {accuracy_list}")
方法2:设置固定随机种子得到稳定结果
如果只是需要一个稳定的准确率数值,给XGBClassifier添加random_state参数固定随机性,这样每次训练结果完全一致,无需重复运行:
from xgboost import XGBClassifier from sklearn.metrics import accuracy_score # 设置固定随机种子(数值可自定义) model_xgbc = XGBClassifier(n_estimators=1000, max_depth=2, learning_rate=0.02, random_state=42) model_xgbc.fit(xtrain, ytrain) predictions = model_xgbc.predict(xtest) test_accuracy = accuracy_score(predictions, ytest) print(f'稳定准确率分数: {test_accuracy}')
方法3:用交叉验证评估模型泛化能力
如果想更全面评估模型的稳定性,推荐使用sklearn的交叉验证工具,它会自动划分训练集为多个子集,多次训练评估,结果更具参考性:
from xgboost import XGBClassifier from sklearn.model_selection import cross_val_score import numpy as np model_xgbc = XGBClassifier(n_estimators=1000, max_depth=2, learning_rate=0.02) # 5折交叉验证,输出各折准确率及平均值 cv_scores = cross_val_score(model_xgbc, xtrain, ytrain, cv=5, scoring='accuracy') print(f"交叉验证各折准确率: {cv_scores}") print(f"交叉验证平均准确率: {np.mean(cv_scores)}")
内容的提问来源于stack exchange,提问作者beridzeg45
相关产品推荐
相关产品推荐

