机器学习小组系列笔记---(二)

安稳与你 提交于 2020-03-09 09:40:28

 一、本周学习内容

知识点描述:如何评价模型的好坏。

本周是机器学习小组第二期的第二周,我们这周学习机器学习的一些相关基础知识我们的学习目标有三个:数据拆分:训练数据集&测试数据集评价分类结果:精准度、混淆矩阵、精准率、召回率、F1 Score、ROC曲线等评价回归结果:MSE、RMSE、MAE、R Squared

二、学习资料

为了方便大家学习,我们推荐了相关的参考资料。

首先,建议阅读《机器学习的敲门砖:kNN算法(中)》(https://mp.weixin.qq.com/s/vvCM0vWH5kmRfrRWxqXT8Q)全文。该篇文章以刚刚学习过的kNN算法为例,介绍了数据拆分,即划分训练数据集&测试数据集的方法。还详细讲解了分类准确度accuracy这一知识点。

然后,还需要阅读《评价分类结果(上):混淆矩阵、精准率、召回率》(https://mp.weixin.qq.com/s/Fi13jaEkM5EGjmS7Mm_Bjw)全文,以及《评价分类结果(下):F1 Score、ROC、AUC》(https://mp.weixin.qq.com/s?__biz=MzI4MjkzNTUxMw==&mid=2247483795&idx=1&sn=7cd746ea16b5643e720d5554a5811459&chksm=eb932825dce4a133150b2c298c75a4214c252c4975c567eca13e42a1d8ac860eb4aed4217536&token=1473535882&lang=zh_CN#rd),全面了解评价分类结果。

最后,需要阅读《模型之母:线性回归的评价指标》(https://mp.weixin.qq.com/s/BEmMdQd2y1hMu9wT8QYCPg),学习评价回归结果:MSE、RMSE、MAE、R Squared。

注意:以上文章涉及到一些线性回归和逻辑回归的代码,如果不了解,可以忽略代码。仅学习我们本周学习目标中的概念即可。

西瓜书第二章,介绍了模型评估与选择的相关内容。

由于本周涉及的相关概念较多,大家可以自行根据关键词进行搜索。每人每周输出一(多)篇笔记,内容为知识点总结、实践代码或者是案例分析。建议有两种输出方式:学习模式:以公众号推送的参考资料为基础,对相关知识点进行自主学习。将自己的理解进行归纳总结,形成一篇学习笔记。即加强了对知识的梳理,又方便日后复习。了解模式:通读学习资料,从整体上了解相关知识。再加上从网上copy一些知识点,整体出一篇文章,待日后加强学习。

本周偏概念的内容多一点,如何评价模型的好坏也是我们接下来学习的重要基础概念。大家加油!

 

三、概念学习

(1)划分训练集、测试集

将原始数据中的一部分作为训练数据、另一部分作为测试数据。使用训练数据训练模型,再用测试数据看好坏。即通过测试数据判断模型好坏,然后再不断对模型进行修改。

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=666)

(2) 分类准确度accuracy

在划分出测试数据集后,我们就可以验证其模型准确率了。在这了引出一个非常简单且常用的概念:accuracy(分类准确度)

accuracy_score:函数计算分类准确率,返回被正确分类的样本比例(default)或者是数量(normalize=False)
在多标签分类问题中,该函数返回子集的准确率,对于一个给定的多标签样本,如果预测得到的标签集合与该样本真正的标签集合严格吻合,则subset accuracy =1.0否则是0.0

因accuracy定义清洗、计算方法简单,因此经常被使用。但是它在某些情况下并不一定是评估模型的最佳工具。精度(查准率)和召回率(查全率)等指标对衡量机器学习的模型性能在某些场合下要比accuracy更好。

from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=666)
knn_clf = KNeighborsClassifier(n_neighbors=3)
knn_clf.fit(X_train, y_train)
y_predict = knn_clf.predict(X_test)
accuracy_score(y_test, y_predict)

(3)超参数&权重

所谓超参数,就是在机器学习算法模型执行之前需要指定的参数。(调参调的就是超参数) 如kNN算法中的k。

与之相对的概念是模型参数,即算法过程中学习的属于这个模型的参数(kNN中没有模型参数,回归算法有很多模型参数)

如何选择最佳的超参数,这是机器学习中的一个永恒的问题。在实际业务场景中,调参的难度大很多,一般我们会业务领域知识、经验数值、实验搜索等方面获得最佳参数。

& 超参数网格搜索:sklearn中封装的grid research方法

https://mp.weixin.qq.com/s/vvCM0vWH5kmRfrRWxqXT8Q

很好的举例解释。

(4)评价分类结果--混淆矩阵、精准率与召回率

混淆矩阵:

  预测值0 预测值1
真实值0 TN FP
真实值1 FN TP
  • TN:真实值是0,预测值也是0,即我们预测是negative,预测正确了。

  • FP:真实值是0,预测值是1,即我们预测是positive,但是预测错误了。

  • FN:真实值是1,预测值是0,即我们预测是negative,但预测错误了。

  • TP:真实值是1,预测值是1,即我们预测是positive,预测正确了。

精准率(查准率):预测值为1,且预测对了的比例,即:我们关注的那个事件,预测的有多准。

召回率(查全率):所有真实值为1的数据中,预测对了的个数,即:我们关注的那个事件真实的发生情况下,我们成功预测的比例是多少。

 

  • 精准率(查准率):预测值为1,且预测对了的比例,即:我们关注的那个事件,预测的有多准。

  • 召回率(查全率):所有真实值为1的数据中,预测对了的个数,即:我们关注的那个事件真实的发生情况下,我们成功预测的比例是多少

如何取舍呢?

--视情况而定,在有的问题中精准率更重要,有的问题中召回率更重要,具体的要视情况而定。

(5)评价分类结果--F1 Score、ROC、AUC

1)如果要我们综合精准率和召回率这两个指标,我们可能会想到取平均值这样的方法。F1 Score的思想也差不多:

F1 Score 是精准率和召回率的调和平均值。 

什么是调和平均值?为什么要取调和平均值?调和平均值的特点是如果二者极度不平衡,如某一个值特别高、另一个值特别低时,得到的F1 Score值也特别低;只有二者都非常高,F1才会高。这样才符合我们对精准率和召回率的衡量标准。

在数据有偏的情况下,F1 Score的指标更好。

 

2)分类阈值、TPR和FPR

 

 https://mp.weixin.qq.com/s?__biz=MzI4MjkzNTUxMw==&mid=2247483795&idx=1&sn=7cd746ea16b5643e720d5554a5811459&chksm=eb932825dce4a133150b2c298c75a4214c252c4975c567eca13e42a1d8ac860eb4aed4217536&token=1473535882&lang=zh_CN#rd

3)模型之母:线性回归的评价指标

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!