Python多分类模型循环输出结果如何按accuracy_score降序排序
实现方法
只需调整运行逻辑:先暂存所有模型的评估结果,全部计算完成后按accuracy得分降序排列,再统一输出即可。
具体改动点
- 新增结果存储列表
model_results,替换原循环中的即时打印逻辑,将模型名称、accuracy得分、交叉验证结果统一存入列表 - 所有模型训练评估完成后,调用Python内置
sorted()方法,指定按accuracy得分降序排列 - 遍历排序后的结果列表完成打印
修改后完整代码
# 原有导入保留即可,无需重复导入 from sklearn.metrics import accuracy_score from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier from sklearn.naive_bayes import GaussianNB from sklearn.svm import SVC from sklearn.tree import DecisionTreeClassifier from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import KFold, cross_val_score # 创建模型列表 models = [] models.append(("随机森林",RandomForestClassifier(n_estimators = 100, random_state = 0))) #models.append(("逻辑回归",LogisticRegression())) models.append(("朴素贝叶斯",GaussianNB())) models.append(("支持向量机",SVC())) models.append(("决策树",DecisionTreeClassifier())) models.append(("K近邻",KNeighborsClassifier())) models.append(("梯度提升树",GradientBoostingClassifier())) # 存储所有模型评估结果 model_results = [] # 训练评估所有模型 for name, model in models: model.fit(X_train, y_train) y_pred = model.predict(X_test) kfold = KFold(n_splits=4) cv_result = cross_val_score(model, X_train, y_train, cv = kfold, scoring = "accuracy") acc = accuracy_score(y_test, y_pred) model_results.append( (name, acc, cv_result) ) # 按accuracy得分降序排序 sorted_results = sorted(model_results, key=lambda x: x[1], reverse=True) # 打印排序后的结果 for name, acc, cv_result in sorted_results: print('\033[1m', name, '\033[0m') print('accuracy score is: \033[1m', acc,'\033[0m') print('cross validation score is: ' ,cv_result,'\n' + '-'*100)
可选调整
如果需要按交叉验证的平均得分排序,只需修改排序逻辑的key参数即可:
sorted_results = sorted(model_results, key=lambda x: x[2].mean(), reverse=True)
内容的提问来源于stack exchange,提问作者Stefano Puccini
相关产品推荐
相关产品推荐

