zoukankan      html  css  js  c++  java
  • sklearn.metrics.classification_report分类模型评估

    sklearn.metrics.classification_report()模型评估的一种,输出一个报告
    sklearn.metrics.classification_report(y_true, y_pred, labels=None, target_names=None, sample_weight=None, digits=2, output_dict=False)

    参数说明

    1. y_true:1 维数组,真实数据的分类标签
    2. y_pred:1 维数组,模型预测的分类标签
    3. labels:列表,需要评估的标签名称
    4. target_names:列表,指定标签名称
    5. sample_weight:1 维数组,不同数据点在评估结果中所占的权重
    6. digits:评估报告中小数点的保留位数,如果 output_dict=True,此参数不起作用,返回的数值不作处理
    7. output_dict:若真,评估结果以字典形式返回

    返回

    每个分类标签的精确度,召回率和 F1-score。

    精确度:precision,正确预测为正的,占全部预测为正的比例,TP / (TP+FP)
    召回率:recall,正确预测为正的,占全部实际为正的比例,TP / (TP+FN)
    F1-score:精确率和召回率的调和平均数,2 * precision*recall / (precision+recall)

    同时还会给出总体的微平均值,宏平均值和加权平均值。

    微平均值:micro average,所有数据结果的平均值
    宏平均值:macro average,所有标签结果的平均值
    加权平均值:weighted average,所有标签结果的加权平均值
    在二分类场景中,正标签的召回率称为敏感度(sensitivity),负标签的召回率称为特异性(specificity)

    from sklearn.datasets import load_iris
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.metrics import classification_report
    from sklearn.model_selection import train_test_split
    
    # 鸢尾花数据集
    iris = load_iris()
    X = iris.data
    y = iris.target
    
    # [0, 1, 2] 标签转换为名称 ['setosa' 'versicolor' 'virginica']
    y_labels = iris.target_names[y]
    
    # 数据集拆分为训练集与测试集
    X_train, X_test, y_train, y_test = train_test_split(X, y_labels, test_size=0.2)
    
    # 使用训练集训练模型
    clf = RandomForestClassifier(n_estimators=100)
    clf.fit(X_train, y_train)
    
    # 使用测试集预测结果
    y_pred = clf.predict(X_test)
    
    # 生成文本型分类报告
    print(classification_report(y_test, y_pred))

    输出如下:

                  precision    recall  f1-score   support
    
          setosa       1.00      1.00      1.00        11
      versicolor       0.83      0.83      0.83         6
       virginica       0.92      0.92      0.92        13
    
        accuracy                           0.93        30
       macro avg       0.92      0.92      0.92        30
    weighted avg       0.93      0.93      0.93        30

    生成字典类分类报告
    # 生成字典型分类报告
    report = classification_report(y_test, y_pred, output_dict=True)
    for key, value in report["setosa"].items():
        print(f"{key:10s}:{value:10.2f}")
    
    

    参考:https://www.cnblogs.com/jfdwd/p/11046694.html



  • 相关阅读:
    tableView小细节
    iOS5 切换中文键盘时覆盖输入框的解决方案
    NSBundle读取txt文件,图片,plist
    iOS OC 字符串处理
    图片拉伸 几种方式
    UIAlertView小结
    新来报道
    VC6.0之Debug调试总结
    关于C++中的临时对象问题
    与临时对象的斗争(下)
  • 原文地址:https://www.cnblogs.com/cgmcoding/p/13518979.html
Copyright © 2011-2022 走看看