AI入门学习-模型评估示例讲解

复制代码
from sklearn.metrics import classification_report, confusion_matrix
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from 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))
  1. 导入必要的库:

    • classification_reportconfusion_matrix 用于模型评估
    • train_test_split 用于分割训练集和测试集
    • RandomForestClassifier 是我们使用的分类模型
    • make_classification 用于生成示例数据
  2. 生成示例数据:

    • 使用 make_classification 生成 1000 个样本,每个样本有 20 个特征
    • 这是一个二分类问题(n_classes=2)
    • random_state=42 确保每次运行生成相同的数据,便于结果重现
  3. 分割数据集:

    • 将数据分为训练集(80%)和测试集(20%)
    • 训练集用于模型训练,测试集用于评估模型性能
  4. 创建并训练模型:

    • 使用随机森林分类器,包含 100 棵决策树
    • fit 方法用于训练模型,接收训练数据(X_train)和对应的标签(y_train)
  5. 模型预测与评估:

    • model.predict(X_test) 用训练好的模型对测试集进行预测,得到预测标签 y_pred
    • classification_report 计算并打印分类指标:
      • precision(精确率):预测为正的样本中实际为正的比例

      • recall(召回率):实际为正的样本中被正确预测的比例

      • f1-score:精确率和召回率的调和平均

      • support:每个类别的实际样本数量

      • accuracy(准确率)

        • 含义:所有预测中正确预测的比例
        • 计算公式:(TP + TN) / (TP + TN + FP + FN)
        • 解读:直观反映模型的整体正确率,但在类别不平衡时可能有误导性(例如 99% 样本是正类,模型全预测为正类也能达到 99% 准确率)
      • macro avg(宏平均)

        • 含义:先计算每个类别的指标(精确率、召回率、F1 分数),再取简单平均值(不考虑类别样本数量)
        • 特点:对所有类别一视同仁,无论每个类别的样本数量多少
        • 适用场景:希望平等关注每个类别(尤其是小样本类别)的场景
      • weighted avg(加权平均)

        • 含义:先计算每个类别的指标,再根据每个类别的样本数量(support)进行加权平均
        • 特点:样本数量多的类别对结果影响更大
        • 适用场景:类别不平衡时,更能反映模型在整体数据上的表现

总结:优先看 accuracy 了解整体表现,类别不平衡时,weighted avgmacro avg 更有参考价值,关注小类别表现时,需重点看该类别的单独指标而非宏平均

  • confusion_matrix 展示混淆矩阵,直观显示各类别预测正确和错误的数量
    • TP(True Positive):真实为正例,预测也为正例(正确预测)
    • FN(False Negative):真实为正例,预测为负例(漏检)
    • FP(False Positive):真实为负例,预测为正例(误检)
    • TN(True Negative):真实为负例,预测也为负例(正确预测)

总结: 从混淆矩阵中能获取的关键信息模型的错误类型 是漏检(FN)多还是误检(FP)多。**类别预测的稳定性,**若某一类别的对角线元素(TP/TN)占比低,说明模型对该类的预测效果差。

相关推荐
星火开发设计1 分钟前
命名空间 namespace:解决命名冲突的利器
c语言·开发语言·c++·学习·算法·知识
乾元2 分钟前
拒绝服务的进化:AI 调度下的分布式协同攻击策略
人工智能·分布式
困死,根本不会3 分钟前
OpenCV摄像头实时处理:从单特征到联合识别(形状识别 + 颜色识别 + 形状颜色联合识别)
人工智能·opencv·计算机视觉
工具人呵呵4 分钟前
[嵌入式AI从0开始到入土]22_基于昇腾310P RC模式的ACT模型部署实践
人工智能
yj_sharing5 分钟前
PyTorch深度学习实战:从模型构建到训练技巧
人工智能·pytorch·深度学习
安全二次方security²6 分钟前
CUDA C++编程指南(7.31&32&33&34)——C++语言扩展之性能分析计数器函数和断言、陷阱、断点函数
c++·人工智能·nvidia·cuda·断点·断言·性能分析计数器函数
bksheng8 分钟前
【Dify】安装与部署
人工智能
强子感冒了8 分钟前
CSS基础学习:CSS选择器与优先级规则
前端·css·学习
狸奴算君8 分钟前
告别数据泄露:三步构建企业级AI的隐私保护盾
人工智能
Christo315 分钟前
TKDE-2026《Efficient Co-Clustering via Bipartite Graph Factorization》
人工智能·算法·机器学习·数据挖掘