什么是好的模型结果?(监督学习模型的衡量)

  1. 连续变量的模型,如何来衡量模型结果?(回归)
  2. 二分类问题
  • 假设检验,p-value
  • confusion matrix 混淆矩阵
  • 召回率,准确率
  • F1-score
  • ROC & AUC

3.多分类模型如何衡量模型结果?
4.imbalanced问题

《什么是好的模型结果?(监督学习模型的衡量)》 image.png

《什么是好的模型结果?(监督学习模型的衡量)》 image.png

2. 连续变量的模型,如何来衡量模型结果?

《什么是好的模型结果?(监督学习模型的衡量)》 image.png

误差:观测值和真值之间的差别
残差:预测值和观测值之间的差别

《什么是好的模型结果?(监督学习模型的衡量)》 image.png

3. 二分类问题

  1. 假设检验
  • 原假设,事件,事件的概率分布
  • p-value: 在原假设成立时,出现观测值以及更极端情况的概率
  • 备择假设
  • Threshold分类阈值
  • 设立分类阈值的结果:第一类错误(假阳性):弃真,第二类错误:存伪
  • 定义阈值的分类效果:显著性水平α
  • α, β,1−β
  • ROC曲线以及其性质:
    0.横纵坐标,1. 一般来说面积>0.5, 2. 斜率为正
  • 什么样的ROC曲线更好?
  • ROC曲线历史
  • confusion matrix:弃真存伪
  • 召回率,准确率
  • F1-score

我们这⾥不涉及任何具体的统计分布

《什么是好的模型结果?(监督学习模型的衡量)》 image.png
《什么是好的模型结果?(监督学习模型的衡量)》 image.png
《什么是好的模型结果?(监督学习模型的衡量)》 image.png
《什么是好的模型结果?(监督学习模型的衡量)》 image.png

α=false positive rate
β=false negative rate
power =1−β = true positive rate

  • ROC曲线(衡量分类效果)以及其性质:

0.横纵坐标 横坐标:false positive 纵坐标:true positive

  1. 一般来说面积>0.5

  2. 斜率为正

3.位于45°线上方

《什么是好的模型结果?(监督学习模型的衡量)》 image.png
《什么是好的模型结果?(监督学习模型的衡量)》 image.png
《什么是好的模型结果?(监督学习模型的衡量)》 image.png
《什么是好的模型结果?(监督学习模型的衡量)》 image.png
《什么是好的模型结果?(监督学习模型的衡量)》 image.png
《什么是好的模型结果?(监督学习模型的衡量)》 image.png
《什么是好的模型结果?(监督学习模型的衡量)》 image.png
《什么是好的模型结果?(监督学习模型的衡量)》 image.png

计算F1 score

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.metrics import f1_score
y_true =  [0,0,0,0,1,0,0,0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0]
y_pred =  [0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,0,0,1,1,0,0,0,1,0,1]
f1_score(y_true,y_pred)
from sklearn.metrics import precision_score, recall_score, accuracy_score
from sklearn.metrics import
precision_score(y_true, y_pred)
recall_score(y_true,y_pred) 
y_true =  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0]
y_pred =  [0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,1,1,1,0,0]
from sklearn.metrics import f1_score,accuracy_score,precision_score,recall_score
accu=accuracy_score(y_true,y_pred)    #分类准确率
prec = precision_score(y_true,y_pred) #准确度
reca = recall_score(y_true,y_pred)  #召回率
F1_score = f1_score(y_true,y_pred)  

练习计算与画ROC

  1. 生成原始数据
  2. 使用模型进行分类
  3. 用ROC进行效果衡量
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.cross_validation import train_test_split

X,y = make_classification(n_samples=10000,n_features=10,n_classes=2,n_informative=5) #特征,标签
X_train,X_test, y_train,y_test = train_test_split(X,y, test_size=0.2,random_state=0)
clf = LogisticRegression()
clf.fit(X_train,y_train)

from sklearn.metrics import roc_auc_score,roc_curve
preds = clf.predict_proba(X_test)[:,1]
fpr,tpr,_=roc_curve(y_test,preds)

df = pd.DataFrame(dict(fpr=fpr,tpr=tpr))
roc_auc= roc_auc_score(y_test,preds)
plt.figure(figsize=[9,8])
lw = 2
    
plt.plot(fpr, tpr, color='orange',
         lw=lw, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic Line')
plt.legend(loc="lower right")
plt.show()

4. 多分类模型,如何衡量模型结果?

  • 直观上不容易像连续变量一样定义每个预测值离观测值的距离(欧几里得距离)
  • 多分类时,多用cross-entropy 来衡量分类的结果

《什么是好的模型结果?(监督学习模型的衡量)》 image.png

  • 信息熵的特点:
    • 衡量混乱程度,信息熵越大,越混乱

5. imbalanced问题

  • imbalance data就是指正负样本数量相差太大,一类占10%甚至1%以下,另外一类占绝大多数,这对机器学习算法是个现实的挑战。

  • 用什么样的衡量方式?不能光看accuracy

  • 1000个样本,大多数(980)都属于负样本,正样本只有20个,算法容易被负样本带偏。

  • 传统方法(决策树,逻辑回归)倾向于预测样本量大的类别,小样本就被认为是噪音,被忽略了

如何应对imbalanced datasets?

  1. 使用合适的衡量方式

    • F1
  2. 重新采样(resampling)

    • random under-sampling
      • 原有分布:负样本980,正样本20
      • under-sampling后:负样本98,正样本20
      • 优点:
        • 提升运算效率,减少运算时间
      • 缺点:
        • 有可能丢失重要的信息
        • 对总体的估计可能是有偏差的
    • random over-sampling
      • 原有分布:负样本980,正样本20
      • over-sampling后:负样本980,正样本500
      • 优点:
        • 保留了所有有用信息
      • 缺点:
        • 有可能overfiting,过拟合
    • 基于cluster 的重新采样(先用聚类方法找出子类)
      • 原有分布:负样本3类:每类数量 200,400,380,正样本两类:每类数量 13,7
      • 重新采样后:负样本3类:数量 300,300,300,正样本两类:每类数量 150,150
      • 优点:
        • 既解决不同类的样本不均等,又解决同类中子类间的样本不均等
      • 缺点:
        • 有可能过拟合
    • 合成数据 <span style=”color:blue”>SMOTE</span>
      • 原有分布:负样本980,正样本20
      • 合成数据后后:负样本980,正样本500 (非重复采样,而是生成正样本数据))
        <img src=’./smote.png’,width=500>
      • 优点:
        • 保留负样本所有信息
        • 减缓过拟合
      • 缺点:
        • SMOTE生成的数据可能引入更多的噪音
        • 对高维的数据效果不好
  3. 集成算法

    原文作者:esskeetit
    原文地址: https://www.jianshu.com/p/059c1ec67ec7
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞