• 二元分类效果评估方法


    二元分类的效果评估方法有很多,常见的包括预测模型中使用的准确率(accuracy),精确率(precision)和召回率(recall)三项指标,以及综合评价指标(F1 measure), ROC AU值(Receiver Operating Characteristic ROC,Area Under Curve,AUC)。这些指标评价的样本分类是真阳性(true positives),真阴性(true negatives),假阳性(false positives),假阴性(false negatives)。阳性和阴性指分类,真和假指预测的正确与否。在我们的垃圾短信分类里,真阳性是指分类器将一个垃圾短信分辨为spam类。真阴性是指分类器将一个正常短信分辨为ham类。假阳性是指分类器将一个正常短信分辨为spam类。假阴性是指分类器将一个垃圾短信分辨为ham类。混淆矩阵(Confusion matrix),也称列联表分析(Contingencytable)可以用来描述真假与阴阳的关系。矩阵的行表示实际类型,列表示预测类型。

    以垃圾邮件分类为例分析如下:

    import pandas as pd
    from sklearn.feature_extraction.text import TfidfVectorizer
    from sklearn.linear_model.logistic import LogisticRegression
    from sklearn.cross_validation import train_test_split
    df = pd.read_csv('C:UsersBesttoneDesktopSMSSpamCollection', delimiter=' ', header=None)
    X_train_raw, X_test_raw, y_train, y_test = train_test_split(df[1],df[0])
    vectorizer = TfidfVectorizer()
    X_train = vectorizer.fit_transform(X_train_raw)
    X_test = vectorizer.transform(X_test_raw)
    classifier = LogisticRegression()
    classifier.fit(X_train, y_train)
    predictions = classifier.predict(X_test)
    for i, prediction in enumerate(predictions[-5:]):
    print('预测类型:%s. 信息:%s' % (prediction, X_test_raw.iloc[i]))
    from sklearn.metrics import confusion_matrix
    import matplotlib.pyplot as plt
    y_test = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]
    y_pred = [0, 1, 0, 0, 0, 0, 0, 1, 1, 1]
    confusion_matrix = confusion_matrix(y_test, y_pred)
    print(confusion_matrix)
    plt.matshow(confusion_matrix)
    plt.title('混淆矩阵',fontproperties=font)
    plt.colorbar()
    plt.ylabel('实际类型',fontproperties=font)
    plt.xlabel('预测类型',fontproperties=font)
    plt.show()

    结果如图

    准确率
    准确率是分类器预测正确性的评估指标。scikit-learn提供了accuracy_score来计算:

    from sklearn.metrics import accuracy_score
    y_pred, y_true = [0, 1, 1, 0], [1, 1, 1, 1]
    print(accuracy_score(y_true, y_pred))

    结果:0.5

    LogisticRegression.score()用来计算模型预测的准确率:

    import numpy as np
    import pandas as pd
    from sklearn.feature_extraction.text import TfidfVectorizer
    from sklearn.linear_model.logistic import LogisticRegression
    from sklearn.cross_validation import train_test_split, cross_val_score
    df = pd.read_csv('mlslpic/sms.csv')
    X_train_raw, X_test_raw, y_train, y_test = train_test_split(df['message']
    , df['label'])
    vectorizer = TfidfVectorizer()
    X_train = vectorizer.fit_transform(X_train_raw)
    X_test = vectorizer.transform(X_test_raw)
    classifier = LogisticRegression()
    classifier.fit(X_train, y_train)
    scores = cross_val_score(classifier, X_train, y_train, cv=5)
    print('准确率:',np.mean(scores), scores)

    准确率: 0.958373205742 [ 0.96291866 0.95334928 0.95813397 0.96172249 0.95574163]

    准确率是分
    类器预测正确性的比例,但是并不能分辨出假阳性错误和假阴性错误。在有些问题里面,比如肿瘤预测问题中,假阴性与假阳性要严重得多,其他的问题里可能相反。另外,有时准确率并非一个有效的衡量指标,如果分类的比例在样本中严重失调。比如,分类器预测信用卡交易是否为虚假交易时,假阴性比假阳性更敏感。为了提高客户满意度,信用卡部门更倾向于对合法的交易进行风险检查,往往会忽略虚假交易。因为绝大部分交易都是合法的,这里准确率不是一个有效的衡量指标。经常预测出虚假交易的分类器可能有很高的准确率,但是实际情况可能并非如此。因此,分类器的预测效果还需要另外两个指标:精确率和召回率。

  • 相关阅读:
    搞笑视频分析---1、老番茄-最强间谍王
    尚学linux课程---11、vim操作命令1
    php开发面试题---php缓存总结
    legend2---17、legend2里面怎么面向对象
    北风设计模式课程---10、创建型的设计模式对比总结
    北风设计模式课程---8、装饰器模式
    Linux下安装Tomcat服务器
    种子软件下载种子慢怎么解决
    php开发面试题---Redis和Memcache区别,优缺点对比
    Make a dent in the universe
  • 原文地址:https://www.cnblogs.com/zhouxiaohui888/p/5807429.html
Copyright © 2020-2023  润新知