【7.1】非均衡分类问题
前言非均衡问题(Imbalanced Problem)是指在一个数据集中,不同类别之间的样本数量差异较大的情况。例如,一个二分类问题中,其中一类的样本数比另一类多很多,通常会被认为是一个非均衡问题。这部分是讨论机器学习算法在应用方面的评价问题。
在前面,我们构建了一个用于检测患疝病的马匹是否存活的系统。在那里,我们构建了分类器,但是并没有对分类后的情形加以讨论。假如某人给我们牵来一匹马,他希望我们能预测这匹马能否生存。我们说马会死,那么他们就可能会对马实施安乐死,而不是通过给马喂药来延缓其不可避免的死亡过程。我们的预测也许是错误的,马本来是可以继续活着的。毕竟,我们的分类器只有80%的精确率(accuracy)。如果我们预测错误,那么我们将会错杀了一个如此昂贵的动物,更不要说人对马还存在情感上的依恋。
本文内容学习来源感谢:
《Machine Learning in Action》
《智能之门》
哔哩哔哩,维基百科等网络
前排说明
本文所有代码基于 Python 3.10 版本,理论上你的版本为 3.X 皆可运行。
在代码的注释中看到符号:❓,则表示注释的代码部分函数解释说明可 ...
【7.0】利用 AdaBoost 元算法提高分类性能
前言当做重要决定时,大家可能都会考虑吸取多个专家而不只是一个人的意见。机器学习处理问题时也是如此,这就是元算法(meta—algorithm)背后的思路。元算法是对其他算法进行组合的一种方式。接下来我们将集中关注一个称作 AdaBoost(读作[ˈeɪdəˌbust]) 的最流行的元算法。
本文内容学习来源感谢:
《Machine Learning in Action》
《智能之门》
哔哩哔哩,维基百科等网络
前排说明
本文所有代码基于 Python 3.10 版本,理论上你的版本为 3.X 皆可运行。
在代码的注释中看到符号:❓,则表示注释的代码部分函数解释说明可以在0最后的相关函数中查阅。
基于数据集多重抽样的分类器前面已经介绍了五种不同的分类算法,它们各有优缺点。我们自然可以将不同的分类器组合起来,而这种组合结果则被称为集成方法(ensemble method)或者元算法(meta-algorithm)。使 用集成方法时会有多种形式:可以是不同算法的集成,也可以是同一算法在不同设置下的集成,还可以是数据集不同部分分配给不同分类器之后的集成。
AdaBoost
优点: ...
【6.0】支持向量机
前言支持向量机(Support Vector Machines),简直就是 21 世纪酷刑😥
本文内容学习来源感谢:
《Machine Learning in Action》
《智能之门》
哔哩哔哩,维基百科等网络
前排说明:本文所有代码基于 Python 3.10 版本,理论上你的版本为 3.X 皆可运行。
基于最大间隔分隔数据支持向量机
优点:泛化错误率低,计算开销不大,结果易于解释
缺点:对参数调节和核函数的选择敏感,原始分类器不加修改仅适用于二类问题
适用数据类型:数值型和标称型数据
在开始说明 SVM 之前,需要先解释几个概念,考虑上图四个数据点分布图像,一个问题是:能否画出一条直线将不同类别的点区分开来?先考虑下图中的数据,它们之间已经分隔的足够开,因此可以很容易的在图中画出一条直线将两组数据分开。在这种情况下,这组数据被称为线性可分(Linearly separable)数据 。
上述将数据集分割开来的直线称为分隔超平面(separating hyperplane)。在上面给出的例子中,由于数据点都在二维平面山,所以此时的分隔超平面就是一条直线。但是 ...
【5.0】Logistic回归
前言这篇将会是令人激动的一部分,因为我们将首次接触到最优化算法。在我们生活中也会遇到很多最优化问题,例如如何在最短时间内从 A 点到达 B 点?如何投入最少的工作获取最大化的收益等等。
如果你并不理解什么是回归,这并不重要,后面的文章将会详细说明回归。现在假设有一些数据点,我们用一条直线对这些点进行拟合(该线称为最佳拟合直线),这个拟合的过程就称作回归。
利用 Logistic 回归进行分类的主要思想是:根据现有数据对分类边界线建立回归公式,以此进行分类。
前排提醒:本实例使用 Python 版本 3.X 理论上都可以运行,我本人使用的是 3.10 版本
基于 Logistic 回归和 Sigmoid 函数的分类 Logistic 回归
优点:计算代价不高,易于理解和实现
缺点:容易欠拟合,分类精度不高
适用数据类型:数值型和标称型数据
我们希望的函数应该是:能接受所有的输入然后预测输出类别。例如,在二分类情况下,希望函数输出 0 或 1 。或许你之前接触过这种性质的函数,该函数称为**单位阶跃函数,又称为赫维赛德阶跃函数(Heaviside step function) ...
【4.0】基于概率论的分类方法:朴素贝叶斯
前言前面的算法我们要求分类器对于“该数据属于哪一个分类”这类问题做出明确回答。不过,分类器有时会产生错误结果,这时可以要求分类器给出一个最优的类别猜测结果,同时给出这个猜测的概率估计值。
概率论是许多机器学习算法的基础,所以深刻理解这一主题就显得十分重要。
基于贝叶斯决策理论的分类方法朴素贝叶斯
优点:在数据较少的情况下依然有效,可以处理多类别问题
缺点:对于输入数据的准备方式较为敏感
适用数据类型:标称型数据。
朴素贝叶斯是贝叶斯决策论的一部分,所以在讲述朴素贝叶斯之前有必要快速了解一下贝叶斯决策理论。
假设有人找到了描述图中两类数据的统计参数1。现在我们使用 $P_1(x,y)$ 表示数据。点 $(x,y)$ 属于类别 1 (图中用圆形表示的类别)的概率,用 $P_2(x,y)$ 表示数据点 $(x,y)$ 属于类别 2 (图中用菱形表示的类别)的概率。那么对于一个新的数据点 $(x,y)$ ,可以使用下面的规则来判断它的类别:
如果 $\large P_1(x,y) > P_2(x,y)$ ,那么类别为 1
如果 $\large P_2(x,y) > P_1 ...
【3.0】决策树
前言如果你以前没有接触过决策树,也不需要担心,它的概念非常简单。即使不知道它也可以通过简单的图形了解其中的工作原理,下图的流程图就是一个决策树,长方形代表判断模块(decision block),椭圆形代表终止模块(terminating block),表示这已经得出结论,可以终止运行。从判断模块引出的左右箭头称为分支(branch),它可以到达另一个判断模块或者终止模块。该流程图构造了一个假想的邮件分类系统,它首先检测发生邮件域名地址。如果地址为 myEmployer.com ,则将其放在分类 “无聊时需要阅读的邮件”,其他同理分类。
K-近邻算法已经可以完成很多分类任务,但是它最大的缺点就是无法给出数据的内在含义,决策树的主要优势就是在于数据形式非常容易理解。决策树可以使用不熟悉的数据集合,并从中提取出一系列规则,这些机器根据数据集创建规则的过程,就是机器学习的过程。
前排提醒:在接下来的代码示例中,有看不懂的函数,可以尝试在下面的 函数相关说明 处查看
决策树的构造决策树的优缺点
优点:计算复杂度不高,输出结果容易理解,对中间值的缺失并不敏感,可以处理不相关特征数据。
...
【2.0】K-近邻算法
前言众所周知,电影可以按照题材进行分类,然后题材分类本身是如何定义的?动作片中会存在接吻镜头,而爱情片中也会存在打斗场景,我们不能单单依靠是否存在打斗和亲吻来判断影片类型。但是爱情片中的接吻镜头会更多,动作片中的打斗场景会更加频繁,基于场景的出现次数我们就可以进行电影分类。
这部分将会使用K-近邻算法来自动划分电影的题材类型。
注:本实例使用的python版本为:v3.10,理论上你只要使用 v3.x 的任意版本即可运行。
K-近邻算法概述简单来说,K-近邻算法采用测量不同特征值之间的距离方法进行分类。
优点:精度高,对异常值不敏感,无数据输入假定
缺点:计算复杂度高,空间复杂度高
适用数据范围:数值型和标称型
K-近邻算法(KNN)的工作原理是:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一个数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前 k 个最相似的数据,这就是 k-近邻算法中 k 的 ...
【1.0】机器学习基础
前言我尝试从线性代数的部分写起,但是我发现这样太拖拉了,对于我的学习来说很不利,所以我打算就不写线性代数和高等数学的内容了,在学习机器学习之前请确保你已经对如下内容有一定的基础:
python语言:如果不会请参考我的一些 python 内容或者自行网络上学习
线性代数:考研数学即可
高等数学:考研数学即可
本系列内容参考自:Peter Harrington 的 《Machine Learning in Action》和《智能之门》以及哔哩哔哩,网络上相内容上结合本人实践编写。
什么是机器学习除了一些无关紧要的情况,人们很难直接从原始数据本身获取所需的信息。例如:对于垃圾邮件的检测,侦测一个单词是否存在没有太大的作用,然后当多个特定单词同时出现,再根据邮件的时间长度等其他因素,就可以快速的判断该邮件是否为垃圾邮件。简单的来说,机器学习就是把无序的数据转换为有用的信息。
机器学习用到了统计学知识,在大多数人看来,统计学不过是企业用以炫耀产品功能的一种统计而已。那么我们为什么还需要利用统计学呢?就工程实践来说,它是利用科学知识来解决具体的问题。在某些情况下,我们会面对很多需要确凿解法,或 ...
关于Python的一些工具
前言想了一阵,还是觉得这个标题有些不太对,或者说不太切题。关于这篇内容,我主要是想说明如果使用Anaconda来更加方便的管理python环境,对于机器学习相关方便更是大有帮助。另外来简单搭建使用PyQt来开发跨平台桌面软件。
大概如此,标题果然还是有些太大了。
Anaconda关于python的环境配置相关内容基础,我已经在之前的python文章中做了说明,对于繁杂的环境操作,我们可以使用Anaconda来更加方便的管理我们的python环境,对于做机器学习相关的伙伴来说更加方便,它包含了大量的机器学习相关的包,可以某种程度上避免国内网络问题导致某些包无法安装的问题。
安装 Anaconda你可以通过访问Anaconda官网来访问下载安装对应系统的Anaconda,此处省略下载安装。
安装完成后,运行Anaconda Navigator,它会做一些初始化工作,期间屏幕会闪出一些命令窗口是正常的,仅需要等待软件启动即可。
进入软件后,界面如下所示:
你可以在主页中,配置相关工具,例如如果你下载了PyCharm或者VS code都可以在这里配置,其中有一个jupyter这个工具, ...
【6.0】虚拟环境和包
前言Python应用程序通常会使用不在标准库内的软件包和模块。应用程序有时需要特定版本的库,因为应用程序可能需要修复特定的错误,或者可以使用库的过时版本的接口编写应用程序。
这意味着一个Python安装可能无法满足每个应用程序的要求。如果应用程序A需要特定模块的1.0版本但应用程序B需要2.0版本,则需求存在冲突,安装版本1.0或2.0将导致某一个应用程序无法运行。
这个问题的解决方案是创建一个 virtual environment,一个目录树,其中安装有特定Python版本,以及许多其他包。
然后,不同的应用将可以使用不同的虚拟环境。 要解决先前需求相冲突的例子,应用程序 A 可以拥有自己的 安装了 1.0 版本的虚拟环境,而应用程序 B 则拥有安装了 2.0 版本的另一个虚拟环境。 如果应用程序 B 要求将某个库升级到 3.0 版本,也不会影响应用程序 A 的环境。
创建虚拟环境用于创建和管理虚拟环境的模块称为 venv。venv 通常会安装你可用的最新版本的 Python。如果您的系统上有多个版本的 Python,您可以通过在系统变量中设置然后通过自定义命令来选择特定的Pyth ...