如何用Python动态选择最优模型?基于多模型准确率的自动筛选执行
实现基于准确率自动筛选并执行最佳机器学习模型的方案
咱直接上实操方案,思路很清晰:先给你那6个模型做交叉验证评估,算出各自的平均准确率,挑出分数最高的那个,然后只训练和用它干活就行。
步骤1:补全必要导入与模型列表
首先得把需要的库和你的模型都准备好,把你没写完的两个模型补进去就行:
# 导入需要的库 from sklearn.model_selection import cross_val_score, train_test_split from sklearn.metrics import accuracy_score from sklearn.linear_model import LogisticRegression from sklearn.discriminant_analysis import LinearDiscriminantAnalysis from sklearn.neighbors import KNeighborsClassifier from sklearn.tree import DecisionTreeClassifier # 替换成你剩下的两个模型,比如朴素贝叶斯、SVM from sklearn.naive_bayes import GaussianNB from sklearn.svm import SVC # 固定随机种子保证结果可复现 seed = 7 # 你的模型列表,补全剩余两个 models = [] models.append(('LR', LogisticRegression())) models.append(('LDA', LinearDiscriminantAnalysis())) models.append(('KNN', KNeighborsClassifier())) models.append(('CART', DecisionTreeClassifier())) models.append(('NB', GaussianNB())) # 换成你的第5个模型 models.append(('SVM', SVC())) # 换成你的第6个模型
步骤2:评估所有模型的交叉验证准确率
遍历每个模型,用交叉验证算出平均准确率,同时记录下来:
# 存储模型名称和对应的平均准确率 model_scores = [] model_names = [] # 假设你已经有预处理好的特征X和目标变量y # 先划分训练集和测试集(如果之前没做的话) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=seed) # 逐个评估模型 for name, model in models: # 10折交叉验证,计算平均准确率 cv_results = cross_val_score(model, X_train, y_train, cv=10, scoring='accuracy') mean_acc = cv_results.mean() model_scores.append(mean_acc) model_names.append(name) # 打印每个模型的结果,方便对比 print(f"{name} | 平均准确率: {mean_acc:.4f} | 准确率标准差: {cv_results.std():.4f}")
步骤3:筛选并训练最佳模型
找出准确率最高的模型,然后用它来训练和预测:
# 找到准确率最高的模型的索引 best_model_idx = model_scores.index(max(model_scores)) best_model_name = model_names[best_model_idx] # 从模型列表中取出对应的模型实例 best_model = dict(models)[best_model_name] print(f"\n✅ 最佳模型确定:{best_model_name},交叉验证平均准确率: {model_scores[best_model_idx]:.4f}") # 用全部训练数据训练最佳模型 best_model.fit(X_train, y_train) # 在测试集上验证效果 y_pred = best_model.predict(X_test) test_acc = accuracy_score(y_test, y_pred) print(f"最佳模型在测试集上的准确率: {test_acc:.4f}")
一些小提醒
- 记得把代码里的
X、y替换成你自己的特征数据集和目标变量 - 如果你的任务是回归而非分类,把
scoring='accuracy'换成对应的回归指标,比如'neg_mean_squared_error' - 交叉验证的折数
cv可以根据你的数据量调整,数据少的话可以用5折,数据多的话10折更稳定 - 如果你的模型已经做过超参数调优,直接把调完参的模型实例放进
models列表就行,不用用默认参数
内容的提问来源于stack exchange,提问作者sangeetha sivakumar
相关产品推荐
相关产品推荐

