for i, model in enumerate(models): # 遍历每个模型 print(f"Model: {model_names[i]}") # 打印当前模型的名称 y_pred = model.predict(X_test) # 使用当前模型对测试数据进行预测,预测结果存储在y_pred中 # 计算混淆矩阵 cm = confusion_matrix(y_test, y_pred) # 计算准确率 acc = accuracy_score(y_test, y_pred) # 计算召回率(使用加权平均) recall = recall_score(y_test, y_pred, average='weighted') # 计算精确率(使用加权平均) precision = precision_score(y_test, y_pred, average='weighted') print(f"{metrics[0]}:") # 打印标签metrics列表的第一个元素 print(cm) # 打印混淆矩阵 print(f"{metrics[1]}: {acc}") # 打印准确率 print(f"{metrics[2]}: {recall}") # 打印召回率 print(f"{metrics[3]}: {precision}") # 打印精确率
时间: 2024-04-14 07:26:44 浏览: 172
这段代码对一个模型列表进行遍历,并进行模型评估和结果打印。以下是对代码的优化建议:
1. 在循环之前,可以预先计算`len(models)`,以减少在每次迭代中进行的重复计算。
2. 可以将重复使用的指标名称(metrics)提前定义为一个列表,以避免在每次迭代中都进行索引查找。
3. 使用格式化字符串时,可以使用更简洁的f-string格式,例如`f"{metrics[1]}: {acc}"`可以改为`f"{metrics[1]}:", acc`。
4. 考虑将结果存储在一个字典或列表中,而不是直接打印结果。这样可以方便后续对结果进行进一步处理或保存。
下面是优化后的代码示例:
```python
num_models = len(models)
metrics = ['混淆矩阵', '准确率', '召回率', '精确率']
results = []
for i in range(num_models):
model = models[i]
model_name = model_names[i]
result = {'Model': model_name}
y_pred = model.predict(X_test)
cm = confusion_matrix(y_test, y_pred)
acc = accuracy_score(y_test, y_pred)
recall = recall_score(y_test, y_pred, average='weighted')
precision = precision_score(y_test, y_pred, average='weighted')
result[metrics[0]] = cm
result[metrics[1]] = acc
result[metrics[2]] = recall
result[metrics[3]] = precision
results.append(result)
# 打印结果
for result in results:
print(f"Model: {result['Model']}")
print(f"{metrics[0]}:")
print(result[metrics[0]])
print(f"{metrics[1]}:", result[metrics[1]])
print(f"{metrics[2]}:", result[metrics[2]])
print(f"{metrics[3]}:", result[metrics[3]])
```
通过以上优化,代码更加简洁和可读,并且结果可以根据需要进行进一步处理或保存。希望这可以帮到你!如果还有其他问题,请随时提问。
阅读全文