机器学习基础知识
机器学习是人工智能的重要技术基础,涉及的内容十分广泛。由于我是以发强化学习方向论文为导向,所以机器学习部分知识点不做深入学习,了解为主,本文主要涵盖机器学习入门的基础知识。
机器学习的核心元素:数据、模型、算法
机器学习工作流程一般为数据预处理(Processing)、模型学习(Learning)、模型评估(Evaluation)、新样本预测(Prediction)几个步骤
数据预处理:输入(未处理的数据 + 标签)-> 处理过程 ->(特征处理+幅度缩放、特征选择、维度约减、采样)-> 输出(测试集 + 训练集)
模型学习:模型选择、交叉验证、结果评估、超参选择。
模型评估:了解模型对于数据集测试的得分。
新样本预测:预测测试集
基本名词
示例/样本:一条数据集中的一条数据
属性/特征:判断样本好坏的根据,如「色泽」「根蒂」
属性空间/样本空间/输入空间X:由全部属性张成的空间
特征向量:空间中每个点对应的一个坐标向量
标记:关于示例结果的信息,如((色泽=青绿,根蒂=蜷缩,敲声=浊响),好瓜),其中「好瓜」称为标记
分类:若要预测的是离散值,如「好瓜」,「坏瓜」,此类学习任务称为分类
假设:学得模型对应了关于数据的某种潜在规律
真相:潜在规律自身
学习过程:是为了找出或逼近真相
泛化能力:学得模型适用于新样本的能力。一般来说,训练样本越大,越有可能通过学习来获得具有强泛化能力的模型
训练集:帮助训练模型,简单的说就是通过训练集的数据让确定拟合曲线的参数
测试集:为了测试已经训练好的模型的精确度
过拟合:模型在训练集上表现的很好,但是在交叉验证集合测试集上表现一般,也就是说模型对未知样本的预测表现一般,泛化能力较差
经验误差:模型在训练集上的误差称为「经验误差」(Empirical Error),经验误差并不是越小越好,因为我们希望在新的没有见过的数据上,也能有好的预估结果
偏差:模型拟合的偏差程度。给定无数套训练集而期望拟合出来的模型就是平均模型,偏差就是真实模型和平均模型的差异
二分类:类别中只有两个类,是 or 否,且只有一个类别,即一个label为0或者1
算法分类
机器学习算法有:监督学习,无监督学习,半监督学习,强化学习
监督学习
监督学习是从标记的训练数据中学习并建立模型,然后基于该模型预测未知的样本。其中,模型的输入是某个样本数据的特征,而函数的输出是与该样本相对应的标签。
常见的监督学习算法:回归分析、分类预测
- 回归分析:线性回归,决策树,随机森林等
- 分类预测:逻辑回归,KNN,支持向量机,朴素贝叶斯等
KNN算法
KNN算法即K最近邻近算法。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。KNN的输入基于实例的学习(instance-based learning),没有显式的学习过程,也就是说没有训练阶段,数据集事先已有了分类和特征值,待收到新样本后直接进行处理,KNN通过测量不同特征值之间的距离进行分类
思路:如果一个样本在特征空间中的k个最邻近的样本中的大多数属于某一个类别,则该样本也划分为这个类别。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别
算法流程
- 计算测试数据与各个训练数据之间的距离
- 按照距离的递增关系进行排序
- 选取距离最小的K个点
- 确定前K个点所在类别的出现频率
- 返回前K个点中出现频率最高的类别作为测试数据的预测分类
K的取值
K:临近数,即在预测目标点时取几个临近的点来预测。
K值得选取非常重要:
- 如果K的取值过小,一旦有噪声存在将会对预测产生比较大影响,例如取K值为1时,一旦最近的一个点是噪声,那么就会出现偏差
- 如果K的取值过大,就相当于用较大邻域中的训练实例进行预测,学习的近似误差会增大。这时与输入目标点较远实例也会对预测起作用,使预测发生错误
K的取值尽量要取奇数,以保证在计算结果最后会产生一个较多的类别,如果取偶数可能会产生相等的情况,不利于预测。
常用的方法是从k=1开始,使用检验集估计分类器的误差率。重复该过程,每次K增值1,允许增加一个近邻。选取产生最小误差率的K。一般k的取值不超过20,上限是n的开方,随着数据集的增大,K的值也要增大
朴素贝叶斯算法
朴素贝叶斯算法是一种基于概率论和统计学的算法。它的核心思想是概率,通过计算条件概率来预测或分类数据
贝叶斯定理
贝叶斯定理是朴素贝叶斯算法的核心,它是一个概率公式,用于计算一个事件的后验概率。根据贝叶斯定理,事件 A 的后验概率等于先验概率 P(A),与另一个事件 B 发生的联合概率 P(B|A) 乘以一个正则因子,即:
$$
P(Y|X) = \frac{P(X|Y)P(Y)}{P(X)}
(X:特征向量, Y:类别)
$$
**先验概率P(X)**:先验概率是指根据以往经验和分析得到的概率
**后验概率P(Y|X)**:事情已经发生,要求这件事情发生的原因是由某个因素引起的可能性的大小,后验分布P(Y|X)表示事件X已经发生的前提下,事件Y发生的概率,叫做事件X发生下事件Y的条件概率
**后验概率P(X|Y)**:在已知Y发生后X的条件概率,也由于知道Y的取值而被称为X的后验概率
朴素贝叶斯
朴素贝叶斯算法是假设各个特征之间相互独立,也是朴素这词的意思,那么贝叶斯公式中的P(X|Y)可写成:
$$
P(X|Y)=P(x_1|Y)P(x_2|Y)…P(x_n|Y)
$$
即朴素贝叶斯公式:
$$
P(Y|X) = \frac{P(x_1|Y)P(x_2|Y)…P(x_n|Y)P(Y)}{P(X)}
$$
贝叶斯算法
贝叶斯方法源于决一个“逆概”问题:
正向概率:假设袋子里面有N个白球,M个黑球,伸手进去摸一把,摸出黑球的概率是多大
逆向概率:如果事先不知道袋子里面黑白球的比例,而是闭着眼睛摸出一个(或者几个)球,观察这些取出来的球的颜色之后,那么可以就此对袋子里面的黑白球的比例做出什么样的推测
什么是贝叶斯?
- 现实世界本身就是不确定的,人类的观察能力是有局限性的
- 我们日常观察到的只是事物表明上的结果,因此我们需要提供一个猜测
朴素贝叶斯算法的朴素:特征条件独立;贝叶斯:基于贝叶斯定理。属于监督学习的生成模型,实现监督,没有迭代,并有坚实的数学理论(即贝叶斯定理)作为支撑。在大量样本下会有较好的表现,不适用于输入向量的特征条件有关联的场景
朴素贝叶斯会单独考量每一维独立特征被分类的条件概率,进而综合这些概率并对其所在的特征向量做出分类预测。因此,朴素贝叶斯的基本数据假设是:各个维度上的特征被分类的条件概率之间是相互独立的。它经常被用于文本分类中,包括互联网新闻的分类,垃圾邮件的筛选
朴素贝叶斯的思想:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,即认为此待分类项属于哪个类别
决策树算法
决策树算法是一种逼近离散函数值的方法。它是一种典型的分类方法,首先对数据进行处理,利用归纳算法生成可读的规则和决策树,然后使用决策对新数据进行分析。本质上决策树是通过一系列规则对数据进行分类的过程,适用于类别和连续输入(特征)和输出(预测)变量。基于树的方法把特征空间划分成一系列矩形,然后给每一个矩形安置一个简单的模型(像一个常数)
决策树构造可以分两步进行:
- 生成:由训练样本集生成决策树的过程。一般情况下,训练样本数据集是根据实际需要有历史的、有一定综合程度的,用于数据分析处理的数据集
- 剪枝:对上一阶段生成的决策树进行检验和校正,主要是用新的样本数据集(测试数据集)中的数据校验决策树生成过程中产生的初步规则,将那些影响预衡准确性的分枝剪除
决策树学习的算法通常是一个递归地决策树学习的算法通常是一个递归地选择最优特征,并根据该特征对训练数据进行分割,使得对各个子数据集有一个最好的分类的过程。包含特征选择、决策树的生成和决策树的剪枝过程。选择最优特征,并根据该特征对训练数据进行分割,使得对各个子数据集有一个最好的分类的过程。包含特征选择、决策树的生成和决策树的剪枝过程。
剪枝:将树变得更简单,从而使它具有更好的泛化能力。
步骤:去掉过于细分的叶结点,使其回退到父结点,甚至更高的结点,然后将父结点或更高的结点改为新的叶结点。
决策树的生成对应模型的局部选择,决策树的剪枝对应于模型的全局选择。决策树的生成只考虑局部最优,决策树的剪枝则考虑全局最优。
特征选择:如果特征数量很多,在决策树学习开始时对特征进行选择,只留下对训练数据有足够分类能力的特征
基本思想
- 树以代表训练样本的单个结点开始
- 如果样本都在同一类.则该结点成为树叶,并用该类标记
- 否则,算法选择最有分类能力的属性作为决策树的当前结点
- 根据当前决策结点属性取值的不同,将训练样本数据集分为若干子集,每个取值形成一个分枝,有几个取值形成几个分枝。针对上一步得到的一个子集,重复进行先前步骤,递归形成每个划分样本上的决策树。一旦一个属性出现在一个结点上,就不必在该结点的任何后代考虑它
- 递归划分步骤仅当下列条件之一成立时停止:
- 给定结点的所有样本属于同一类
- 没有剩余属性可以用来进一步划分样本.在这种情况下.使用多数表决,将给定的结点转换成树叶,并以样本中元组个数最多的类别作为类别标记,同时也可以存放该结点样本的类别分布
- 如果某一分枝tc,没有满足该分支中已有分类的样本,则以样本的多数类创建一个树叶
SVM算法
SVM即支持向量机(support vector machine,SVM),支持向量机是一种二分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,其学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。支持向量机的学习算法是求解凸二次规划的最优化算法。基础的SVM算法是一个二分类算法,至于多分类任务,可以通过多次使用SVM进行解决
线性可分
对于一个数据集合可以画一条直线将两组数据点分开,这样的数据成为线性可分(linearly separable)
- 分割超平面:将上述数据集分隔开来的直线成为分隔超平面。对于二维平面来说,分隔超平面就是一条直线。对于三维及三维以上的数据来说,分隔数据的是个平面,称为超平面,也就是分类的决策边界
- 间隔:点到分割面的距离,称为点相对于分割面的间隔。数据集所有点到分隔面的最小间隔的2倍,称为分类器或数据集的间隔。论文中提到的间隔多指这个间隔。SVM分类器就是要找最大的数据集间隔
- 支持向量:离分隔超平面最近的那些点
SVM所做的工作就是找这样的超平面,能够将两个不同类别的样本划分开来,但是这种平面是不唯一的,即可能存在无数个超平面都可以将两种样本分开,那么我们如何才能确定一个分类效果最好的超平面呢?
对每一种可能的超平面,我们将它进行平移,直到它与空间中的样本向量相交。我们称这两个向量为支持向量,之后我们计算支持向量到该超平面的距离d,分类效果最好的超平面应该使d最大
支持向量机的核心思想:最大间隔化,最不受到噪声的干扰
优缺点及应用场景
- SVM的优点:
- 高效的处理高维特征空间:SVM通过将数据映射到高维空间中,可以处理高维特征,并在低维空间中进行计算,从而有效地处理高维数据
- 适用于小样本数据集:SVM是一种基于边界的算法,它依赖于少数支持向量,因此对于小样本数据集具有较好的泛化能力
- 可以处理非线性问题:SVM使用核函数将输入数据映射到高维空间,从而可以解决非线性问题。常用的核函数包括线性核、多项式核和径向基函数(RBF)核
- 避免局部最优解:SVM的优化目标是最大化间隔,而不是仅仅最小化误分类点。这使得SVM在解决复杂问题时能够避免陷入局部最优解
- 对于噪声数据的鲁棒性:SVM通过使用支持向量来定义决策边界,这使得它对于噪声数据具有一定的鲁棒性
- SVM的缺点:
- 对大规模数据集的计算开销较大:SVM的计算复杂度随着样本数量的增加而增加,特别是在大规模数据集上的训练时间较长
- 对于非线性问题选择合适的核函数和参数较为困难:在处理非线性问题时,选择适当的核函数和相应的参数需要一定的经验和领域知识
- 对缺失数据敏感:SVM在处理含有缺失数据的情况下表现不佳,因为它依赖于支持向量的定义
- 难以解释模型结果:SVM生成的模型通常是黑盒模型,难以直观地解释模型的决策过程和结果
- SVM主要应用场景:
- 文本分类:如垃圾邮件分类、情感分析和文档分类等
- 图像识别:可用于图像分类、目标识别和人脸识别等任务。它可以通过提取图像的特征向量,并将其作为输入来训练SVM模型
- 金融领域:可用于信用评分、风险评估和股票市场预测等金融任务
- 医学诊断:可以应用于医学图像分析,如疾病检测、癌症诊断和医学影像分类等
- 视频分类:可以用于视频分类、行为识别和运动检测等任务,通过提取视频帧的特征并将其输入SVM模型进行分类
- 推荐系统:可以用于个性化推荐和用户分类等推荐系统任务,通过分析用户行为和特征来预测用户的兴趣和偏好
逻辑回归
逻辑回归虽然名字中带有回归,其实是分类模型,主要用于二分类问题,通过给定的n组数据(训练集)来训练模型,并在训练结束后对给定的一组或多组数据(测试集)进行分类。其中每一组数据都是由p个指标构成。
由于二分类问题分成两类,可以让其中一类标签为0,另一类为1。我们需要一个函数,对于输入的每一组数据,都能映射成0~1之间的数。并且如果函数值大于0.5,就判定属于1,否则属于0。而且函数中需要待定参数,通过利用样本训练,使得这个参数能够对训练集中的数据有很准确的预测。
形式
逻辑回归的模型包含两个模块:线性部分和激活函数
线性部分的数学模型写为h(x)=wx+b
,x表示样本的输入特征向量,w是权重,b是偏置
激活函数是sigmoid函数:
$$
\sigma(h(x))= \frac{1}{1+e^{−h(x)}}
= \frac{1}{1+e^{−(wx+b)}}
$$
这个函数的曲线是一条值域为(0,1)的曲线,当输入值趋近于无穷大时,输出结果会趋近于1,输入值趋近于无穷小时,输出结果会趋近于-1
逻辑回归不仅是一个二分类模型,也是一个线性分类模型,h(x)作为决策函数,通过判断样本落在决策函数的哪一边,区分出不同的类别
无监督学习
该类算法的输入样本不需要标记,而是自动地从样本中学习这种特征以实现预测。
常见的非监督学习算法:聚类和降维
- 聚类:Kmeans、Apriori、DBSCAN等
- 降维:主成分分析(PCA)等
Kmeans算法
k均值聚类算法(k-means)是一种迭代求解的聚类分析算法,其步骤是,预将数据分为K组,则随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。
算法步骤
- 从N个数据文档(样本)随机选取K个数据文档作为质心(聚类中心)。
- 对每个数据文档测量其到每个质心的距离,并把它归到最近的质心的类。
- 重新计算已经得到的各个类的质心。
- 迭代2~3步直至新的质心与原质心相等或小于指定阈值,算法结束。 本文采用所有样本所属的质心都不再变化时,算法收敛。
损失函数
每一个样本经过模型后会得到一个预测值,然后得到的预测值和真实值的差值就成为损失(损失值越小证明模型越成功),有许多不同种类的损失函数,这些函数本质上就是计算预测值和真实值的差距的一类型函数,经过库的封装形成了有具体名字的函数
输入的feature(或称为x)需要通过模型(model)预测出y,此过程称为向前传播(forward pass),而要将预测与真实值的差值减小需要更新模型中的参数,这个过程称为向后传播(backward pass),其中损失函数(lossfunction)就基于这两种传播之间,起到一种有点像承上启下的作用,承上指:接収模型的预测值,启下指:计算预测值和真实值的差值,为下面反向传播提供输入数据
常用的损失函数有:均方误差(MSE)、平均绝对误差(MAE)、均方根误差(RMSE)、平均偏差误差(MBE)、Huber损失、最大似然损失(Likelihood Loss/LHL)、二元交叉熵(BCE)、交叉熵(CE)、Kullback-Leibler 散度 (KLD)等