了解您的需求后,我会提供一个修改后的代码示例,该代码将计算准确率、精确率、召回率和F1值,并绘制这些指标随C
值变化的图表。
这里是完整的示例代码:
# ...
C_values = [0.01, 0.1, 1, 10, 100]
logistic_scores = {
'accuracy': [],
'precision': [],
'recall': [],
'f1': []
}
for C in C_values:
lr = LogisticRegression(C=C, solver='liblinear')
scores = cross_val_score(lr, X_train, y_train, cv=5)
mean_accuracy = scores.mean()
# 计算每个C值下的精确率、召回率和F1值
y_pred = lr.fit(X_train, y_train).predict(X_test) # 注意:这里用训练数据拟合,并在测试集上进行预测
precision = precision_score(y_test, y_pred, average='macro')
recall = recall_score(y_test, y_pred, average='macro')
f1 = f1_score(y_test, y_pred, average='macro')
# 将结果添加到字典中
logistic_scores['accuracy'].append(mean_accuracy * 100) # 转换为百分比
logistic_scores['precision'].append(precision * 100)
logistic_scores['recall'].append(recall * 100)
logistic_scores['f1'].append(f1 * 100)
# 绘制性能指标随C值变化图
plt.figure(figsize=(12, 8))
for metric, values in logistic_scores.items():
plt.plot(C_values, values, label=f'{metric} (%)')
plt.title('Logistic Regression Performance Metrics vs. Regularization Parameter C')
plt.xlabel('Regularization Parameter C')
plt.ylabel('Scores (%)')
plt.legend()
plt.grid(True)
plt.show()
# 确定最优的C值
optimal_C = C_values[np.argmax([score for score, _ in logistic_scores['accuracy']])]
print(f"Optimal C value for Logistic Regression based on accuracy: {optimal_C}")
代码解释:
cross_val_score
来计算每个C
值下的模型平均准确率。fit
)和预测(predict
)来计算测试集上的精确率、召回率和F1值。logistic_scores
字典中,并转换为百分比形式。matplotlib
绘制准确率、精确率、召回率和F1值随C
值变化的图表。C
值,它是基于最高准确率得出的。请注意,此代码片段假设X_train
、y_train
和y_test
已经定义并且是有效的。另外,请确保您的数据集被正确加载并且格式正确。如果问题仍然存在,请检查数据集是否正确划分以及是否存在任何缺失值或格式问题。