入门机器学习(西瓜书+南瓜书)模型的选择与评估总结(python代码实现)

一、理论总结

1.1 什么是机器学习?

机器学习是什么东西?简单来说,就是根据我们生活中根据经验阅历对未发生的事件做出预判的所谓“智能”,对机器本身通过计算手段,利用经验改善系统自身的性能。即使得计算机从数据中产生“模型”的算法。
比较形象的类比如下图所示,很直观形象的反映了机器学习的思想。

1.2 基本术语

数据集(data_set):就是一个存储数据的集合,一般有图片或者包含数字的表格。如上图所示,一个表格就可以代表一个数据集。
样本(sample):可以理解为一行数据,或者一张图片。就是组成数据集的单元。比如第二行的数据就是一个样本,也就是一个西瓜的数据。
**属性(attribute)或 特征(feature)**就是一行数据可能包含的不同类型的数据,比如西瓜的“根蒂”,“纹理”,”颜色“等,这些组成了属性或者说特征。数据集中的所有属性个数也被称作维数。就是上面数据集的列
属性值(attribute value):直观说就是西瓜的属性有哪些取值,比如颜色这个属性有“青绿”,“乌黑”,这些就是称为属性值。就是一列中所有取值的集合
样本空间(sample space):把数据集中的所有属性作为坐标轴,所有可能的属性的取值就包含在了样本空间中。就是数据集所有可能取值的集合。
训练(training) 或 学习(learning):从数据中学习模型,这里的模型可以简单理解为一个数学公式。也可以简单理解对于一个包含未知变量的方程,通过带入(自变量【数据】,因变量【标签】)来确定这一个公式,进一步利用公式,对于一个自变量【数据】,获得未知的因变量【标签】。
测试(testing):简单来说训练就是平时刷题总结知识点,考试出一套试卷,让你做,然后得出试卷成绩,从而判断你的学习效果。
有监督学习(supervised learning):每个【数据】都包括【标签】,就是说每道题都有答案,你可以根据自己做题的情况来调整自己的学习方向。代表算法为分类和回归。
无监督学习(unsupervised learning):只有数据没有标签,根据数据本身特征进行总结归纳,了解数据的内在规律,代表算法为聚类。

1.3 模型评估与选择

1.3.1 过拟合与欠拟合

首先介绍两个概念,就是“过拟合”和“欠拟合”。
欠拟合:就是模型没有学到训练集中的数据特征,在训练集上的效果就很差,最主要的原因就是学习率太低或模型学习能力太差。
过拟合:模型拟合数据能力过强,也就是可以完美了拟合训练数据,但是过于追求完美,使得模型复杂度很高,而使得在测试集效果不好,也就是说使得模型泛化能力下降。解决这一问题可以加入更多的数据或者加入正则化项约束模型

1.3.2 评估方法

(1)留出法
最简单也最常用的方法,也就是根据比例随机分配训练集和测试集。比如要求训练集和测试集的比例为8:2.那么就从数据集中随机选取80%的数据做训练集,用来训练模型,20%的数据用来测试模型的性能,常见的做法为将大约23\frac {2}{3}32​~45\frac {4}{5}54​
(2)交叉验证法
也叫K折交叉验证法(K-fold cross validation)。就是把数据集分为K分,把K份按照顺序依次选取一份作为测试集。其余数据作为训练集测试模型结果,将K分结果求和求均值,进而获得模型的性能指标。
(3)自助法
从m个样本的数据集又放回的选取m个样本,其中出去重复的样本,从而获得理论上获得23\frac {2}{3}32​的数据来训练,其余数据用作测试。这种方法在数据集较小,难以有效划分训练、测试集时很有用,此外,自助法能从数据集中产生不同的训练集,这对集成学习有很大好处,到那时它该改变了数据集的初始分布,会引入估计误差。

1.4 调参

大多数的学习算法具有超级参数,就是说需要人为调节,这些数值的选取往往根据经验来进行。那对于训练的模型内部参数可以再从数据集中划分一个验证集,来对模型的训练方向进行指导。基于验证集上的性能进行选择和调参。

1.5 损失函数

也可以被称为误差函数,也就是模型的预测和实际真实值之前的差距,我们自然需要他们之间的差距越小越好。所以需要构建损失函数,来计算差距,反应模型训练的效果。
常见的损失函数有均方误差、均方根误差、平均绝对误差。

均方误差 MSE=1n∑i=1n(pi−pi)2MSE = \frac{1}{n}\sum_{i=1}^{n}(p^{i}-p^{i})^{2}MSE=n1​∑i=1n​(pi−pi)2
均方根误差 RMSE=1n∑i=1n(yi−pi)2RMSE = \sqrt{\frac{1}{n}\sum_{i=1}^{n}(y_{i}-p_{i})^2}RMSE=n1​∑i=1n​(yi​−pi​)2​
平均绝对误差 MAE=1n∑i=1n∣yi−pi∣MAE = \frac{1}{n}\sum_{i=1}^{n} |y^i-p^i|MAE=n1​∑i=1n​∣yi−pi∣

1.6 评价指标

模型的评价方法

模型判定推荐的 模型判定不推荐的
测试集中被推荐的(被检索到) True positives(TP 正类判断为正类)(搜到的也想要的) False positives(FP 负类判断为正类)(搜到的但没用的)
测试集中不被推荐的(未被检索到) False negatives(FN 正类判断为负类)(没搜到,然而实际想要的 True negatives(TN 负类判定为负类)(没搜到也没用的)

这个表格就是机器学习里面最常见的混淆矩阵,用来评判模型的好坏。

2.3.1.2 具体例子分析

先假定一个具体场景作为例子。
假如某个班级有男生80人,女生20人,共计100人.目标是找出所有女生.
某人挑选出50个人,其中20人是女生,另外还错误的把30个男生也当作女生挑选出来了.
作为评估者的你需要来评估(evaluation)下他的工作。
我们需要先需要定义TP,FN,FP,TN四种分类情况。
按照前面例子,我们需要从一个班级中的人中寻找所有女生,如果把这个任务当成一个分类器的话,那么女生就是我们需要的,而男生不是,所以我们称女生为"正类",而男生为"负类"。

相关(Relevant),正类 无关(NonRelevant),负类
被检索到(Retrieved) TP=20 true positives(TP 正类判定为正类,例子中就是正确的判定"这位是女生") FP=30 false positives(FP 负类判定为正类,“存伪”,例子中就是分明是男生却判断为女生)
未被检索到(Not Retrieved) FN=0 false negatives(FN 正类判定为负类,“去真”,例子中就是,分明是女生,这哥们却判断为男生–梁山伯同学犯的错就是这个) TN=50 true negatives(TN 负类判定为负类,也就是一个男生被判断为男生)

通过这张表,我们可以很容易得到例子中这几个分类的值:TP=20,FP=30,FN=0,TN=50。

2.3.1.3 显示反馈数据分析

我们可以通过计算模型分类的准确率,和召回率进来通过计算F-Measure的值来对模型分类的好坏进行评价。
下面结合例子中这几个分类的值:TP=20,FP=30,FN=0,TN=50介绍准确率,召回率,和F-measure的概念与计算方法。
1.准确率
准确率(precision)又称“精度”,“正确率”。的公式是 P=TPTP+FPP=\frac{TP}{TP+FP}P=TP+FPTP​,它计算的是所有被检索到的item(TP+FP)中,“应该被检索到的item(TP)”占的比例。
在例子中就是希望知道分类得到的所有人中,正确的人(也就是女生)占有的比例.所以其precision也就是40%(20女生/(20女生+30误判为女生的男生)).
2.召回率
召回率(recall)又称“查全率”的公式是R=TPTP+FNR=\frac{TP}{TP+FN}R=TP+FNTP​ ,它计算的是所有检索的tem(TP)占所有"应该被检索到的item(TP+FN)"的比例。
在例子中就是希望知道此君得到的女生占本班中所有女生的比例,所以其recall也就是100%(20女生/(20女生+ 0 误判为男生的女生))
3. 准确率与召回率的关系
“精确率”与“召回率”虽然没有必然的关系(从上面公式中可以看到),然而在大规模数据集合中,这两个指标却是相互制约的。
由于“检索策略”并不完美,希望更多相关的文档被检索到时,放宽“检索策略”时,往往也会伴随出现一些不相关的结果,从而使准确率受到影响。
而希望去除检索结果中的不相关文档时,务必要将“检索策略”定的更加严格,这样也会使有一些相关的文档不再能被检索到,从而使召回率受到影响。
凡是涉及到大规模数据集合的检索和选取,都涉及到“召回率”和“精确率”这两个指标。而由于两个指标相互制约,我们通常也会根据需要为“检索策略”选择一个合适的度,不能太严格也不能太松,寻求在召回率和精确率中间的一个平衡点。这个平衡点由具体需求决定。
4. F-Measure值
F-Measure又称为F-Score是一种统计量,是IR(信息检索)领域的常用的一个评价标准,常用于评价分类模型的好坏。它的计算公式为 Fβ=(β2+1)PRβ2⋅P+RF_{\beta}=\frac{(\beta^{2}+1)PR}{\beta^2\cdot P+R}Fβ​=β2⋅P+R(β2+1)PR​,其中β是参数 , R是召回率(recall)P是准确率(precision)。当参数β=1时,就是最常见的F1-Measure了:F1=2P⋅RR+PF_{1}=\frac{2P \cdot R}{R+P}F1​=R+P2P⋅R​,此时F1综合了P和R的效果,当F1较高时则能说明试验方法比较有效。

二、python代码实现

笔者水平有限,如有错误请多指教。

2.1 sklearn 中的性能指标

accuracy_score:精度
precision_score:查准率
recall_score:查全率
f1_score:F1指标
roc_auc_score:ROC曲线AUC指标
confusion_matrix:混淆矩阵

# !/usr/bin/env python
# @Time:2022/3/15 21:20
# @Author:华阳
# @File:1.py
# @Software:PyCharm# accuracy_score的参数
# precision_score的参数
# recall_score的参数
# y_true:为样本真实标签,类型为一维的ndarray或者list
# y_predict:为模型预测标签,类型为一维的ndarray或者listfrom sklearn.metrics import accuracy_score,precision_score,recall_score,f1_score,confusion_matrix
import numpy as np
from sklearn.metrics import roc_auc_scorey_true = [0, 0, 1, 1]
y_predict = [1, 0, 1, 0]print("正例的准确率为:",accuracy_score(y_true, y_predict))
print("查准率为:",precision_score(y_true, y_predict))
print("查全率为:",recall_score(y_true, y_predict))
print("F1指数为:",f1_score(y_true, y_predict))
print("混淆矩阵为:",confusion_matrix(y_true,y_predict))# y_true为真实标签
# y_score为预测为Positive的概率
y_true = np.array([0, 0, 1, 1])
y_score = np.array([0.1, 0.4, 0.35, 0.8])
print("ROC曲线auc指标",roc_auc_score(y_true, y_score))

结果:


正例的准确率为: 0.5
查准率为: 0.5
查全率为: 0.5
F1指数为: 0.5
混淆矩阵为: [[1 1][1 1]]
ROC曲线auc指标 0.75

入门机器学习(西瓜书+南瓜书)模型选择与评估总结(python代码实现)相关推荐

  1. 机器学习【西瓜书/南瓜书】--- 第2章模型评估与选择(上)(学习笔记+公式推导)

    目录 前言 2.1 经验误差与过拟合 2.2 评估方法 2.2.1 留出法(hode−outhode-outhode−out) 2.2.2 交叉验证法(crossvalidationcross val ...

  2. 西瓜书机器学习笔记(第二课):模型选择与评估

    模型选择与评估 经验误差与过拟合 经验误差vs泛化误差 本质上就是训练集上的误差vs"未来"样本上的误差: 经验误差并非越小越好,因为会出现过拟合 过拟合与欠拟合 通俗理解,欠拟合 ...

  3. 机器学习-吃瓜教程(西瓜书+南瓜书)-神经网络

    datawhale-吃瓜教程-神经网络 Task01:概览西瓜书+南瓜书第1.2章 Task02:详读西瓜书+南瓜书第3章 Task03:详读西瓜书+南瓜书第4章 Task04:详读西瓜书+南瓜书第5 ...

  4. 机器学习西瓜书南瓜书 神经网络

    机器学习西瓜书&南瓜书 神经网络 1. 神经元模型 神经网络:由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实事件物体所做出的交互反应. 神经网络最基本的成分 ...

  5. 机器学习【西瓜书/南瓜书】--- 第1章绪论(学习笔记+公式推导)

    目录 前言 主要符号表 1.1 引言 1.2 基本术语 1.3 假设空间 1.4 归纳偏好 前言 本博客为博主在学习 机器学习[西瓜书 / 南瓜书]过程中的学习笔记,每一章都是对<西瓜书> ...

  6. 【组队学习】【32期】吃瓜教程——西瓜书+南瓜书

    吃瓜教程--西瓜书+南瓜书 航路开辟者:谢文睿.秦州 领航员:陈伟峰 航海士:谢文睿.秦州 基本信息 开源内容:https://github.com/datawhalechina/pumpkin-bo ...

  7. 【组队学习】【31期】 吃瓜教程——西瓜书+南瓜书

    吃瓜教程--西瓜书+南瓜书 航路开辟者:谢文睿.秦州 领航员:张海腾 航海士:谢文睿.秦州 基本信息 开源内容:https://github.com/datawhalechina/pumpkin-bo ...

  8. 【组队学习】【30期】吃瓜教程——西瓜书+南瓜书

    吃瓜教程--西瓜书+南瓜书 航路开辟者:谢文睿.秦州 领航员:邱振波 航海士:谢文睿.秦州 基本信息 开源内容:https://github.com/datawhalechina/pumpkin-bo ...

  9. 【组队学习】【35期】吃瓜教程——西瓜书+南瓜书

    吃瓜教程--西瓜书+南瓜书 航路开辟者:谢文睿.秦州 领航员:凌亮 航海士:谢文睿.秦州 基本信息 开源内容:https://github.com/datawhalechina/pumpkin-boo ...

  10. 【组队学习】【33期】吃瓜教程——西瓜书+南瓜书

    吃瓜教程--西瓜书+南瓜书 航路开辟者:谢文睿.秦州 领航员:潘磊 航海士:谢文睿.秦州 基本信息 开源内容:https://github.com/datawhalechina/pumpkin-boo ...

最新文章

  1. Redis 桌面管理工具 RedisDesktopManager 2020.1 发布
  2. jQuery的ajax的post请求json格式无法上传空数组
  3. 刚体Collider包围测试
  4. IDEA不能导入List包
  5. i.mx6ul 移植Openwrt
  6. MNIST 手写数字识别,我是如何做到886个可训练参数,识别率达到98.2%? (参数、模型压缩), Keras实现,模型优化
  7. 初学Struts遇到的坑爹问题
  8. BGP——Peer Group(讲解+配置)
  9. 围绕HugeTLB的极致优化
  10. jQuery实现省市二级联动
  11. 增值电信业务许可证 年审年报 教程 icp sp idc年审年报
  12. the problem was occurred when start ADT
  13. SQL 语句单引号、双引号的用法
  14. 6python项目 体脂率计算优化2
  15. 第十届泰迪杯数据挖掘B题:电力系统负荷预测分析--解题思路与部分代码03
  16. 网页中人民币符号的正确输入姿势
  17. python 基础一
  18. Python while语句2021-08-27
  19. POCO C++库学习和分析 -- 序
  20. 论文阅读:预训练模型:过去,现在和未来 Pre-Trained Models: Past, Present and Future(上)

热门文章

  1. 用linux给诺基亚手机刷机,凤凰刷机怎么给诺基亚手机刷机 凤凰给诺基亚手机刷机教程...
  2. delphi xe datasnap 服务器显示客户端,Delphi xe datasnap
  3. ASP.NET Web编程入门-创建一个简单的Web页面
  4. 什么是类Unix系统?
  5. Android应用程序开发实用案例50则
  6. 基于PHP的学生选课管理系统
  7. 【用游戏学C语言】几个基本的小游戏的实现(缓慢更新中~)
  8. TeamViewer开机自启动实现在远程使用时重启远程计算机
  9. 马哥【直播班】Python运维自动化与DevOps项目特训班学习记录
  10. 编程与python的区别_python与其他编程语言区别全在这