如何修改Python代码使SVM多参数10折交叉验证结果输出更具可读性
解决方案
你只需要调整双重循环末尾打印平均准确率的语句,将当前遍历到的C、gamma参数值嵌入到输出字符串中即可实现需求。
具体修改点
将原来的打印语句:
print('Mean accuracy score: %0.3f' % np.array(acc_score).mean())
替换为以下代码即可:
print(f'Mean accuracy score for (C={z},gamma={v}): %0.3f' % np.array(acc_score).mean())
优化建议
你当前代码里读取CSV的变量命名为z,后续外层循环的C参数遍历变量也用了z,虽然运行不受影响,但可读性较差,建议将外层循环变量修改为c_val避免歧义,修改后的循环部分代码如下:
# 外层循环变量改为c_val,避免和读取csv的z变量混淆 for c_val in c: for v in gamma_values: # 定义使用'rbf'核函数的SVM svc = SVC(kernel='rbf',C=c_val, gamma=v, random_state=50) skf = StratifiedKFold(n_splits=10, shuffle=True) acc_score = [] for train_index, test_index in skf.split(X, y): X_train, X_test = X_scaled[train_index], X_scaled[test_index] y_train, y_test = y[train_index], y[test_index] # 训练模型 svc.fit(X_train, np.ravel(y_train)) # 在测试集上预测 y_pred = svc.predict(X_test) # 获取模型的准确率得分 score = accuracy_score(y_test, y_pred) acc_score.append(score) print(np.array(acc_score)) # 打印带参数的平均准确率 print(f'Mean accuracy score (C={c_val}, gamma = {v}): %0.3f' % np.array(acc_score).mean())
修改后输出就会完全符合你的预期格式。
内容的提问来源于stack exchange,提问作者user3046211
相关产品推荐
相关产品推荐

