AI入门学习-模型评估示例讲解
from sklearn.metrics import classification_report, confusion_matrixfrom sklearn.model_selection import train_test_splitfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.datasets import make_classification# 生成示例分类数据# n_samples: 样本数量, n_features: 特征数量, n_classes: 类别数量X, y = make_classification( n_samples=1000, # 1000个样本 n_features=20, # 20个特征 n_classes=2, # 二分类问题 random_state=42 # 随机种子,保证结果可重现)print(\"示例数据:\")print(X, y)# 将数据分为训练集和测试集# test_size=0.2: 20%数据作为测试集,80%作为训练集# random_state=42: 固定随机种子,确保每次分割结果相同X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42)# 创建并训练一个随机森林分类器# n_estimators: 树的数量, random_state: 随机种子model = RandomForestClassifier(n_estimators=100, random_state=42)model.fit(X_train, y_train) # 使用训练数据拟合模型# 分类模型评估y_pred = model.predict(X_test) # 使用模型对测试集进行预测# 输出分类报告:包含precision(精确率)、recall(召回率)、f1-score和support(支持数)print(\"分类报告:\")print(classification_report(y_test, y_pred))# 输出混淆矩阵:展示预测结果与实际结果的对比print(\"混淆矩阵:\\n\", confusion_matrix(y_test, y_pred))
- 
导入必要的库:
classification_report和confusion_matrix用于模型评估train_test_split用于分割训练集和测试集RandomForestClassifier是我们使用的分类模型make_classification用于生成示例数据
 - 
生成示例数据:
- 使用 
make_classification生成 1000 个样本,每个样本有 20 个特征 - 这是一个二分类问题(n_classes=2)
 random_state=42确保每次运行生成相同的数据,便于结果重现
 - 使用 
 - 
分割数据集:
- 将数据分为训练集(80%)和测试集(20%)
 - 训练集用于模型训练,测试集用于评估模型性能
 
 - 
创建并训练模型:
- 使用随机森林分类器,包含 100 棵决策树
 fit方法用于训练模型,接收训练数据(X_train)和对应的标签(y_train)
 - 
模型预测与评估:
model.predict(X_test)用训练好的模型对测试集进行预测,得到预测标签 y_predclassification_report计算并打印分类指标:- precision(精确率):预测为正的样本中实际为正的比例
 - recall(召回率):实际为正的样本中被正确预测的比例
 - f1-score:精确率和召回率的调和平均
 - support:每个类别的实际样本数量
 - 
accuracy(准确率)
- 含义:所有预测中正确预测的比例
 - 计算公式:
(TP + TN) / (TP + TN + FP + FN) - 解读:直观反映模型的整体正确率,但在类别不平衡时可能有误导性(例如 99% 样本是正类,模型全预测为正类也能达到 99% 准确率)
 
 - 
macro avg(宏平均)
- 含义:先计算每个类别的指标(精确率、召回率、F1 分数),再取简单平均值(不考虑类别样本数量)
 - 特点:对所有类别一视同仁,无论每个类别的样本数量多少
 - 适用场景:希望平等关注每个类别(尤其是小样本类别)的场景
 
 - 
weighted avg(加权平均)
- 含义:先计算每个类别的指标,再根据每个类别的样本数量(support)进行加权平均
 - 特点:样本数量多的类别对结果影响更大
 - 适用场景:类别不平衡时,更能反映模型在整体数据上的表现
 
 
 
总结:优先看 accuracy 了解整体表现,类别不平衡时,weighted avg 比 macro avg 更有参考价值,关注小类别表现时,需重点看该类别的单独指标而非宏平均
confusion_matrix展示混淆矩阵,直观显示各类别预测正确和错误的数量
- TP(True Positive):真实为正例,预测也为正例(正确预测)
 - FN(False Negative):真实为正例,预测为负例(漏检)
 - FP(False Positive):真实为负例,预测为正例(误检)
 - TN(True Negative):真实为负例,预测也为负例(正确预测)
 
总结: 从混淆矩阵中能获取的关键信息:模型的错误类型是漏检(FN)多还是误检(FP)多。类别预测的稳定性,若某一类别的对角线元素(TP/TN)占比低,说明模型对该类的预测效果差。


