机器学习-评价分类、回归算法模型指标

涉及内容

  • 数据拆分,训练数据集&测试数据集
  • 评价分类指标结果 :准确率,混淆矩阵,精确率,召回率,F1 Score ,ROC曲线等
  • 评价回滚指标结果:MSE,RMSE,MAE,R square等

数据拆分

拆分结果

  • 训练集-用于训练模型的子集
  • 测试集-用于测试训练后模型的子集
    数据拆分

测试集满足条件

  • 规模足够大,可产生具有统计意义的结果

  • 能代表整个数据集。即挑选的测试集的特征与训练集的特征相同

  • 如果满足上述两个条件,可以构建一个泛化能力很好的模型

  • 满足上述两个条件的模型训练,能够保证模型具有较强泛化能力,如图
    满足上述两条件预测的结果

  • sklearn拆分实例

    from sklearn.model_selection import train_test_split
    train= loan_data.iloc[0: 55596, :]
    test= loan_data.iloc[55596:, :]
    train_X,test_X, train_y, test_y = 
    						train_test_split(train, target,  test_size = 0.2,random_state = 0)
    

测试集不能参与模型训练

  • 如果评估指标取得意外好结果,则可能是不小心对测试集进行了训练。高准确率可能表明测试数据泄露了训练集。
    -例子,例如对垃圾邮件进行预测,使用主题,邮件正文,发件人作为特征。按照80%-20%的拆分比例分为训练集和测试集。在模型训练后,该模型在训练集和测试集均达到了99%的精确率,但正常的模型一般能到70%-80%已属优秀,因为之前的测试集的精确率低于此结果。查看数据发现,测试集的很多样本和训练样本是重复的。影响了模型预测效果和模型泛化能力。

分类算法评价指标

1.混淆矩阵

  • 是监督学习的一种可视化根据,主要用于比较分类结构和实例的真实信息。矩阵中没以后代表实例预测类别,每一列代表实例的真实类别。
  • 预测结果
    真正类(True Positive,tp):被预测为正却的正样本,即正样本被正确预测正类
    假正类(False Positive,fp):被预测为正的负样本,即负类样本被错误预测为正类
    真负类(True Negative,tn):被预测为负的负样本,即负类样本被正确预测为负类
    假负类(False Negative,fn):被预测为负正样本,即正类样本被错误预测为负类
    
    真正率:tpr=tp/(tp+fn),即被预测为正样本/正样本实际数量
    假正率:fpr = fp/(fp+tn),即被预测为正的负样本数/负样本实际数量
    真负率:tnr = tn/(tn+fp),即被预测为负的负样本数/负样本实际数量
    假负率:fnr = fn/(fn+tp),即被预测为负的正样本/正样本实际数量
    
    
  • 混淆矩阵图示
    混淆矩阵

混淆矩阵对应指标

  • 准确率-正确预测反映正负类的比例

    Accuracy  = (TP+TN)/(TP+FP+TN+FN)
    
  • 精确率- 又名查准率,反映正类被预测正确的比例,即正确预测为正类数/预测为整理总数

    Precision = TP/(TP+FP)
    
  • 覆盖率-实际正样本中,分类器能预测出多少。与真正率相等。可理解为查全率,即正确预测的正类数/实际正类总数

    Recall = TP/(TP+FN)
    
  • F1 score-精确率和召回率的调和值,更接近于两个数较小的那个。所以精确率和召回率接近时,F值最大。推荐系统一般F1 score

    2/F1 = (Percision+Recall)/Precision*Recall
    
  • ROC-逻辑回归里,对于正负类的界定,通常会有分类预测为正负类的概率值,通常会设置一个阈值,概率大于该阈值的为正类.如减小该阈值,更多样本被预测为正类,提高正类识别率同时,会导致更多负类被错误预测为正类。为直观表示这一现象,引入ROC,分类结构计算得到ROC空间中相应的点,连接这些点就成为ROC curve,横坐标为FPR(假正率),纵坐标为TPR(真正率),一般情况,曲线为与(0,0)和(1,1)连线上方。
    ROC曲线

  • AUC(Area Under Curve)被定义为ROC曲线下面积(ROC的积分),通常大于0.5,小于1.随机挑选一个正样本以及一个负样本,分类器判定正样本的值高于负样本的概率就是AUC值。AUC值(面积)越大的分类器,性能越好
    AUC

  • PR曲线-横坐标是精确率Precision,纵坐标是召回率是Recall.评价标准同ROC,先看平滑与否。一般来说,同一测试集,上面比下面的好(绿线比红线好)。当Precision和Recall接近时,F1值最大,此时画连接(0,0),(1,1)的线,线和PRC重合的地方是F1是这条最大的F1(光滑的地方),此时的F1对于PRC就好像AUC对于ROC已有。一个数字比一条线更方便调型。
    PRC

  • 模型没有的谁更好(如上图的蓝线,青线),要根据具体场景使用。分类器预测样本,本质给一个概率(是0或1的概率),我们设置一个CUTOFF点(阈值),高于这个点判正,低于的判负。Name这个点就需要结合具体场景

1)如地震预测,我们希望是Recall非常高,就是说每次地震都希望预测正确[要求tp/(tp+fn)值更高],因此可以牺牲Precision[牺牲tp/(tp+fp)的值]。情愿发出1000次劲爆,10次都预测正确,也不要。
2)嫌疑人定追,基于不错怪一个好人的原则,对于嫌疑人定追要求我们非常正确,即使放过了一些罪犯(recall低),也是值得。
  • 机器学习空间sklearn提供预测为正类、父类的概率,可以根据阈值进行正负类划分,确定混淆矩阵,进行上述指标计算)

回归算法指标

平均绝对误差(MAE)

  • 定义公式
    Mean Absolute Error,又称L1,计算测试集每个样本实际分类和预测分类的误差之和,再除以测试集样本总数
    
    平均绝对误差
  • python实现
    Python(也可用sklearn API)实现方式:
    import numpy as np
    mse=np.sum(np.absolute(y_test-y_predict))/len(y_test)
    
  • sklearn实现
    from sklearn.metrics import mean_squared_error
    mae = mean_squared_error(y_test,y_predict)
    

平均平方误差(MSE)

  • 定义公式
    计算测试集每个样本实际分类和预测分类的误差平方之和,并除以测试集总数
    
    平均平方误差
  • python实现方式
    import numpy as np
    mse = np.sum(y_test-y_predict)**2/len(y_test)
    
  • sklearn实现
    from sklearn.metrics import mean_squared_error
    mse = mean_squared_error(y_test,y_predict)
    

平均平方根误差(RMSE)

  • 定义及公式
    计算测试集每个样本实际分类和预测分类的误差平方之和,除以测试集样本总数后,对其开方。
    

均方根差

  • python实现
    import numpy as np
    from math import sqrt
    mse = np.sum(y_test-y_predict)**2/len(y_test)
    rmse= sqrt(mse)
    
  • sklearn实现
    from sklearn.metrics import mean_squared_error
    from math import sqrt
    mse = mean_squared_error(y_test,y_predict)
    rmse = sqrt(mse)
    

决定系数(Coefficient of determination)

  • 定义及公式
    又名R2,根据测试集每个样本实际分类结果和预测分类结果误差的平方计算得到
    
    R2 score 决定系数
  • 实现方式
    import numpy as np
    from math import sqrt
    mse = np.sum(y_test-y_predict)**2/len(y_test)
    explain_variance = 1- mse/np.var(y_test)
    
  • sklearn实现
    from sklearn.metrics import r2_score
    r_square  = r2_score(y_test,y_predict)
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值