人工智能算法学习笔记(一)——开篇

在前期复习过高等数学,线性代数以及概率论数理统计的基础知识后,又学习了Python3,终于开始踏入人工智能学习的道路。这条道路虽然艰难,但不忘初心,方得始终!
从现在开始,我将写一个系列的人工智能算法的笔记,将学习过程中遇到的概念,知识点,算法逻辑,容易踩到的坑等进行总结。笔记嘛,大多数都来源于书本、网上资料、视频资料等,同时也要加入自己的理解。在CSDN进行博客记录,也是期待有更多的大咖来进行批评指导交流,促进共同进步。
首先上一张思维导图,我认为这张图可以很好的对机器学习涉及的领域和具体算法,模式进行很好的概括和分类,适合刚入门的学习者。
机器学习思维导图
右半部分的基础知识和数据集分割会在记录左边部分的同时进行穿插,所以我的笔记还是按照左边部分监督学习和非监督学习的大类进行记录。
一、机器学习
人类的学习方式是通过阅读书籍查阅资料等方式获取信息,然后通过大脑思考学习从而得到某种技能的。而机器跟人类也是类似的,不过机器获取的是数据(Data),学得的结果叫做模型(Model),从数据中学得模型这个过程通过执行某个**学习算法(Learning Algorithm)**来完成。如下图所示:
机器学习三要素
数据(Data)
算法(Algorithm)
模型(Model)

被称为机器学习三要素。

机器学习基本上分为监督学习(Supervised Learning)非监督学习(Unsupervised Learning)。之所以说“基本上”,是因为这两者是最基础的分类。此外还有半监督学习(Semi-Supervised Learning)以及强化学习(Reinforcement Learning)。不过本笔记系列还是要从基础的监督学习和非监督学习开始。

二、监督学习与非监督学习
监督学习又被称为“有老师的学习”,所谓的老师就是标签。有监督的过程为先通过已知的训练样本(如已知输入和对应的输出)来训练,从而得到一个最优模型,再将这个模型应用在新的数据上,映射为输出结果。再经过这样的过程后,模型就有了预知能力。
监督学习又分为分类回归。之前看书明白了分类问题输出值是离散的,而回归问题输出值是连续的(很浅显)。最近看到一位知乎大咖的解释,如醍醐灌顶一般,彻底明白了分类和回归的区别联系了。现摘抄如下:

为什么那么多回答说分类与回归的区别就是离散和连续的区别? 根本不是这样子的啊! 这两者的区别完全不在于连续与否啊,而在于损失函数的形式不同啊!(后文详述)
个人认为**“回归与分类的根本区别在于输出空间是否为一个度量空间。”**
我们不难看到,回归问题与分类问题本质上都是要建立映射关系:
在这里插入图片描述
而两者的区别在于:
1、对于回归问题,其输出空间B是一个度量空间,即所谓“定量”。也就是说,回归问题的输出空间定义了一个度量
在这里插入图片描述
去衡量输出值与真实值之间的“误差大小”。例如:预测一瓶700毫升的可乐的价格(真实价格为5元)为6元时,误差为1;预测其为7元时,误差为2。这两个预测结果是不一样的,是有度量定义来衡量这种“不一样”的。(于是有了均方误差这类误差函数)。
2、对于分类问题,其输出空间B不是度量空间,即所谓“定性”。也就是说,在分类问题中,只有分类“正确”与“错误”之分,至于错误时是将Class 5分到Class 6,还是Class 7,并没有区别,都是在error counter上+1。
事实上,在实际操作中,我们确实常常将回归问题和分类问题互相转化(分类问题回归化:逻辑回归;回归问题分类化:年龄预测问题——>年龄段分类问题),但这都是为了处理实际问题时的方便之举,背后损失的是数学上的严谨性。

非监督学习是“没有老师的学习”,相比于有监督,没有训练的过程,而是直接拿数据进行建模分析,意味着这些都是要通过机器学习自行学习探索。这听起来似乎有点不可思议,但是在我们自身认识世界的过程中也会用到无监督学习。比如我们去参观一个画展,我们对艺术一无所知,但是欣赏完多幅作品之后,我们也能把它们分成不同的派别。比如哪些更朦胧一点,哪些更写实一些。即使我们不知道什么叫做朦胧派和写实派,但是至少我们能把他们分为两个类。
因此就引申出无监督学习中的一个重要概念聚类,它是研究如何在没有训练的条件下把样本划分为若干类。

聚类分析(cluster analysis)是一种将数据所研究的对象进行分类的统计方法,像聚类方法这样的一类方法有个共同的特点:事先不知道类别的个数和结构,据以进行分析的数据是对象之间的相似性(similarity)和相异性(dissimilarity)的数据.将这些相似(相异)的数据可以看成是对象与对象之间的”距离”远近的一种度量,将距离近的对象看做一类,不同类之间的对象距离较远,这个可以看作为聚类分析方法的一个共同的思路.

所以,在介绍完监督学习和非监督学习的基本概念之后,要对二者的某些方面做个比较了。有人感觉分类聚类傻傻分不清。。。(呃,其实是我自己)下面我把收集到的各方面对比做如下总结:
对比一:有训练集VS无训练集
监督学习必须要有训练集与测试样本。在训练集中找规律,而对测试样本使用这种规律。而非监督学习没有训练集,只有一组数据,在该组数据集内寻找规律。
对比二:有标签VS无标签
这个很好理解了, 有监督学习的方法就是识别事物,识别的结果表现在给待识别数据加上了标签。因此训练样本集必须由带标签的样本组成。而非监督学习方法只有要分析的数据集的本身,预先没有什么标签。如果发现数据集呈现某种聚集性,则可按自然的聚集性分类,但不予以某种预先分类标签对上号为目的。
对比三:分类VS聚类
监督学习的核心是分类,非监督学习的核心是聚类(将数据集合分成由类似的对象组成的多个类)。有监督的工作是选择分类器和确定权值,无监督的工作是密度估计(寻找描述数据统计值),这意味着无监督算法只要知道如何计算相似度就可以开始工作。
对比四:同维VS降维
监督学习的输入如果是n维,特征即被认定为n维,也即y=f(xi)或p(y|xi), i =n,通常不具有降维的能力。而非监督学习经常要参与深度学习,做特征提取,或者干脆采用层聚类或者项聚类,以减少数据特征的维度。
对比五:分类同时定性VS先聚类后定性
有监督学习的输出结果,也就是分好类的结果会被直接贴上标签,是好还是坏。也即分类分好了,标签也同时贴好了。类似于中药铺的药匣,药剂师采购回来一批药材,需要做的只是把对应的每一颗药材放进贴着标签的药匣中。非监督学习的结果只是一群一群的聚类,就像被混在一起的多种中药,一个外行要处理这堆药材,能做的只有把看上去一样的药材挑出来聚成很多个小堆。如果要进一步识别这些小堆,就需要一个老中医(类比老师)的指导了。因此,非监督学习属于先聚类后定性,有点类似于批处理。
对比六:独立VS非独立
监督学习假设输入与输出的随机变量X和Y遵循联合概率分布P(X,Y)(可以表示为分布函数,也可以表示为分布密度函数)。在学习过程中,假定这一联合概率分布存在,但对于学习系统来说,联合概率分布的具体定义是未知的。训练数据与测试数据被看作是依联合概率分布P(X,Y)独立同分布的产生的(每一个训练实例或者测试实例都是独立同分布的)。这是监督学习关于数据的基本假设。
李航在其著作《统计学习方法》(清华大学出版社)中阐述了一个观点:对于不同的场景,正负样本的分布可能会存在偏移(可能是大的偏移,也可能偏移比较小)。好比我们手动对数据做标注作为训练样本,并把样本画在特征空间中,发现线性非常好,然而在分类面,总有一些混淆的数据样本。对这种现象的一个解释是,不管训练样本(有监督),还是待分类的数据(无监督),并不是所有数据都是相互独立分布的。或者说,数据和数据的分布之间存在联系。作为训练样本,大的偏移很可能会给分类器带来很大的噪声,而对于无监督,情况就会好很多。可见,独立分布数据更适合有监督,非独立数据更适合无监督。(PS:关于这段,因为我还没深入学习非监督学习,所以理解并不深刻,第一段的独立同分布适用监督学习可以理解,这是之后构建似然函数的前提。)
对比七:不透明VS可解释性
由于有监督算法最后输出的一个结果,或者说标签。yes or no,一定是会有一个倾向。但是,如果你想探究为什么这样,有监督会告诉你:因为我们给每个字段乘以了一个参数列[w1, w2, w3…wn]。你继续追问:为什么是这个参数列?为什么第一个字段乘以了0.01而不是0.02?有监督会告诉你:这是我自己学习计算的!然后,就拒绝再回答你的任何问题。是的,有监督算法的分类原因是不具有可解释性的,或者说,是不透明的,因为这些规则都是通过人为建模得出,及其并不能自行产生规则。所以,对于像反洗钱这种需要明确规则的场景,就很难应用。而无监督的聚类方式通常是有很好的解释性的,你问无监督,为什么把他们分成一类?无监督会告诉你,他们有多少特征有多少的一致性,所以才被聚成一组。你恍然大悟,原来如此!于是,进一步可以讲这个特征组总结成规则。如此这般分析,聚类原因便昭然若揭了。

那么如何选择使用有监督学习和非监督学习呢?
先看如下这张图:
How to choose Supervised or Unsupervised?
首先,我们查看现有的数据情况。假如在标签和训练数据都没有的情况下,毫无疑问无监督是最佳选项。但其实对数据了解得越充分,模型的建立就会越准确,学习需要的时间就会越短。我们主要应该了解数据的以下特性: 特征值是离散型变量还是连续型变量;特征值中是否存在缺失的值;何种原因造成缺失值;数据中是否存在异常值;某个特征发生的频率如何。
其次,数据条件是否可改善?在实际应用中,有些时候即使我们没有现成的训练样本,我们也能够凭借自己的双眼,从待分类的数据中人工标注一些样本,这样就可以把条件改善,从而用于有监督学习。当然不得不说,有些数据的表达会非常隐蔽,也就是我们手头的信息不是抽象的形式,而是具体的一大堆数字,这样我们很难人工对它们进行分类。举个例子,在bag - of - words 模型中,我们采用k-means算法进行聚类,从而对数据投影。在这种情况下,我们之所以采用k-means,就是因为我们只有一大堆数据,而且是很高维的,若想通过人工把他们分成50类是十分困难的。想象一下,一个熊孩子把50个1000块的拼图混在了一起,你还能够再把这50000个凌乱的小方块区分开吗?所以说遇到这种情况也只能选用无监督学习了。
最后,看样本是否独立分布。对于有训练样本的情况,看起来采用有监督总是比采用无监督好。但有监督学习就像是探索悬崖时的一个安全绳,有着一定的指导作用。就像是即使班级里的第一名,也非常需要标准答案来获得肯定,对吧?做完题对一下答案,总觉得会更安心一点。但对于非独立分布的数据,由于其数据可能存在内在的未知联系,因而存在某些偏移量,这个时候假如追求单一的“标准答案”反而会错失其数据背后隐藏关联。就像是做数学题,往往还有标准答案以外的其他解法。而在反欺诈的场景中,这些隐藏关联往往包含着一个未知地欺诈团伙活动。所以在反欺诈领域中无监督机器学习能实现更准确和广泛的欺诈检测。

三、ML(Machine Learning)术语
由于机器学习所涉及到的术语概念太多,不可能在前面笔记中都提到,也不可能在一篇笔记中将所有概念都记录下来。因此,我决定在每篇笔记的最后一节中将涉及本节范围的概念都整理记录下来,以便查阅。如果有疏漏,希望各位大咖多多提醒指正。
样本or示例是关于一个事件或对象的描述;
属性or特征反映事件或对象在某方面的表现或性质的事项;
属性张成的空间称之为属性空间样本空间or输入空间
例如把x,y,z作为三个坐标轴,则它们描述对象A的三维空间,每个对象都可以在该空间中找到自己的坐标定位。由于空间中的每个点对应一个坐标向量,因为也可以把这一个示例称之为特征向量
由一组样本组成的集合称之为一个数据集
(PS:有时整个数据集亦称一个样本,因为它可看作对样本空间的一个采样,通过上下文可判断出样本是单个示例还是数据集。)
一般地,令 D = ( x 1 , x 2 , . . . , x m ) D=\left ( x_{1},x_{2},...,x_{m}\right ) D=(x1,x2,...,xm)表示包含m个示例的数据集,每个示例用d个属性描述,则每个示例 x i = ( x i 1 , x i 2 , . . . , x i d ) x_{i}=\left ( x_{i1},x_{i2},...,x_{id} \right ) xi=(xi1,xi2,...,xid)是d维样本空间 χ \chi χ 中的一个向量, x i ϵ χ x_{i}\epsilon\chi xiϵχ,其中 x i j x_{ij} xij x i x_{i} xi在第j个属性上取得值,d称为样本 x i x_{i} xi的“维数”。
从数据中学得模型的过程称为“学习(learning)”或“训练(training)”,这个过程通过执行某个学习算法来完成.训练过程中使用的数据称为“训练数据(training data)”,其中每个样本称为一个“训练样本”(training sample)”,“训练样本”训练样本组成的集合称为“训练集(training set)”.学得模型对应了关于数据的某种潜在的规律,因此也称为“假设(hypothesis)”;这种潜在规律自身,则称为“真相(ground-truth)”,学习过程就是为了找出或逼近真相。
要建立预测的模型,仅仅有示例数据是不够的,我们需要获得训练样本的“结果”信息,例如:“((色泽=青绿;根蒂=蜷缩;敲声=浊响),好瓜)”.这里关于示例结果的信息“好瓜”称为“标记(label)”;拥有了标记信息的示例,则称为“样例(example)”.(PS:若将标记看作对象本身的一部分,则样例有时也称为样本).一般地,用 ( x i , y i ) \left ( x_{i},y_{i} \right ) (xi,yi)表示第i个样例,其中 y i ϵ Y y_{i}\epsilon Y yiϵY是示例 x i x_{i} xi的标记,Y是所有标记的集合,亦称为“标记空间(label space)”或“输出空间”。
学得模型后,使用其进行预测的过程称为“测试(testing)”,被预测的样本称为“测试样本(testing sample)”.例如在学得f后,对测试例x,可得到其预测标记y=f(x).
学得模型适用于新样本的能力,称为“泛化(generalization)”能力。

归纳(induction)”与“演绎(deduction)”是科学推理的量大基本手段.前者是从特殊到一般的“泛化(generalization)”过程,即从具体的事实归结出一般性规律;后者则是从一般到特殊的“特化(specialization)”过程,即从基础原理推演出具体状况.
假设空间:所有假设构成的集合。
我们可以把学习过程看作一个在假设(hypothesis)组成的空间中进行搜索的过程。搜索过程中可以不断删除与正例不一致的假设、和(或)与反例一致的假设。最终将会获得与训练集一致(即对所有训练样本能够进行正确判断)的假设,这就是我们学得的结果。现实问题中我们常面临很大的假设空间,但学习过程是基于有限样本训练集进行的,因此,可能有多个假设与训练集一致,即存在着一个与训练集一致的“假设集合”我们称之为“版本空间”。
机器学习算法在学习过程中对某种类型假设的偏好,称为“归纳偏好(inductive bias)”,或简称为“偏好”。 归纳偏好可看作学习算法自身在一个可能很庞大的假设空间中对假设进行选择的启发式或者价值观。这种价值观的一个典型叫做“奥卡姆剃刀(Occam’s razor)”:若有多个假设与观察一致,则选择最简单那个。 事实上,归纳偏好对应了学习算法本身所做出的关于“什么样的模型更好”的假设。在具体的现实问题中,这个假设是否成立,即算法的归纳偏好是否与问题本身匹配,大多数时候直接决定了算法能否取得好的性能。
没有免费的午餐定理(NFL):在所有”问题“出现的机会相同、或者所有问题同等重要的前提下,任何两个学习算法的期望性能相同。
NFL定理的意义在于——脱离具体问题,空泛地谈论”什么学习算法更好“毫无意义,因为若考虑所有潜在问题,则所有的学习算法都一样好。

以上就是第一部分的笔记总结。未完待续。。。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,让我来回答你关于聚类算法的问题。 聚类算法是一种无监督学习方法,它将数据集中的对象分成若干组或者类,使得同一组内的对象之间相似度较高,而不同组之间的相似度较低。聚类算法广泛应用于数据挖掘、模式识别、图像处理、自然语言处理等领域中。 常见的聚类算法有K-Means、层次聚类、DBSCAN等。其中,K-Means算法是最常用的聚类算法之一。 K-Means算法的基本思想是:首先随机选取K个中心点(质心),然后将每个样本点归属于距离其最近的中心点所在的簇,接着重新计算每个簇的中心点,重复上述过程直到簇不再发生变化或达到预设的迭代次数。 层次聚类算法是一种基于距离的聚类算法,它将样本点视为一棵树,从下往上逐步合并相似的簇,最终形成一棵树形结构。层次聚类算法可分为自底向上的凝聚聚类和自顶向下的分裂聚类两种。自底向上的凝聚聚类从每个样本点开始,逐步合并相似的簇,最终形成一棵树形结构;自顶向下的分裂聚类从所有样本点开始,逐步将簇分裂成较小的簇,最终形成一棵树形结构。 DBSCAN算法是一种基于密度的聚类算法,它将样本点分为核心点、边界点和噪音点三类,核心点周围的样本点被划分为同一个簇,边界点则被划分到离其最近的核心点所在的簇中,而噪音点则被剔除。DBSCAN算法具有不需要预先指定聚类数、对噪音点不敏感等优点,但对于不同密度的簇,其聚类效果可能不尽如人意。 以上是聚类算法的基础知识,希望能够对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值