目录
一、机器学习概念
二、机器学习步骤
三、有监督学习
1、k-近邻算法
核心思想
实例:手写数字的识别
优缺点:
2、决策树
相关概念
核心思想
一些小技巧
优缺点
3、神经网络
4、SVM——支持向量机
核心思想
SVM和SVR的区别
优缺点
5、集成学习或元算法
核心思想
常见的元算法或者集成学习——串行bagging(随机森林等)、并行boosting(自适应boosting--adaboosting等)
0)串行训练与并行训练
1)bagging(自举汇聚法)——基于数据随机重抽样的分类器构建
2)boosting——基于错误提升分类器的性能(Adaboosting算法)
3)随机森林——基于样本随机性和属性随机性
机器学习就是将传感器等方式得到的海量的数据转化为有用的信息的过程。就是根据以往的经验和数据使得构建的模型最优,以此来更加满足需求。
1、采集数据——拍照、传感器等
2、输入数据——如输入图像
3、分析数据——提取特征
4、训练算法——对于无监督学习来说不需要训练,否则需要训练
5、测试算法——指标衡量算法的可靠性、泛化能力等
6、使用算法
核心思想:首先有一批样本数据集合,我们称之为训练数据集,并且我们知道他们的标签,即每个样本和类别的对应关系是确定的。当一个不带标签的新样本输入时,我们先提取这个样本的特征值,然后计算这个样本和训练集中每一个样本对应特征值的距离,距离从小到大取k个点,然后分别统计这k个点的类别分别是什么,将这k个点中出现最多的标签作为这个新样本的标签。
距离:欧式距离——每个特征值的差的平方和,再开根号
注:虽然是有监督算法,但是不需要进行训练,因为是临时利用所有的训练样本的特征值,这也造成了这个算法预测时间长。
https://blog.csdn.net/qq_41661809/article/details/89409724
1)先获得公开数据集0--1手写黑白图像
2)将32*32的黑白图像按行转换成1*1024的向量,并且带有标签
3)将新输入的黑白图像的向量和每一个图像的向量进行距离计算
4)从小到大排列距离,取前k个样本;
5)统计k个样本的不同类别个数;
6)将最多的类别数作为新样本的标签
优点:易于实现、理解
缺点:效率不高,每次预测都要进行大量的计算,时间长
熵:度量数据集的混乱程度,越大越乱
信息增益:与熵相反,越大数据越有序
核心思想:
训练阶段:已知一个数据集,数据集包含属性值和标签,每一条数据样本包含若干个属性值和一个标签,这作为训练数据集。决策树的决策就在于决定用哪一个属性去划分数据集,这个时候就使用到了熵或者信息增益,计算以每一个属性进行划分数据集后的各个子数据集的熵,然后将划分后熵最小的那个属性作为当前结点的划分属性依据,根据这个属性数据集会被划分成多个数据集,然后对每一个子数据集根据熵来确定划分属性,注意这里的属性要去掉父节点的属性。然后递归就得到了一颗树。
训练得到的是一颗结点是属性值的树,叶子节点为标签值,我们称之为决策树,一般可以利用字典去存放这棵树,父节点属性值作为key,子树作为value。
预测阶段:新输入一个样本,我们根据样本的属性的值和决策树来决定样本的标签
剪枝:因为在构造决策树的时候,我们是用的递归,会遍历所有的情况,耗时较长,我们其实可以通过剪枝的方式来决定要不要继续递归,若划分后的正确率下降了,那我们则停止这个属性的递归,换下一个属性进行尝试。
连续值处理:若碰到是数值型的话,那我们可以先对这些数值进行排序,然后将两个数的均值作为一个划分属性。
优点:计算复杂度不高、结果易于理解、对中间的缺失不敏感
缺点:可能产生过度匹配的问题
典型算法:ID3、C45
具体相关见专栏:【机器学习】神经网络BP理论与python实例系列
神经网络会出现局部最优的情况,为了解决这个问题有以下几种方法:
1)模拟退火:在每一步都会以一定的概率去接受比最优解差的次优解,有助于跳出“局部最优”,但是随着时间推移,这个概率应该减小
2)选取多组参数初始值,训练后选取误差最小的一组参数作为最终的参数。虽然都会陷入不同的局部极小,但是这样可以尽可能地接近全局最优
3)随机梯度下降法:计算梯度的时候增加随机因素
4)遗传算法
5)预训练模型:在深度学习中,重新进行参数初始值的设置会非常麻烦,因为量大,而预训练模型则是一层一层进行训练,每一层的输入是上一层的输出,这一层的输出又是下一层的输入,这样就得到了一个预训练的模型,这时候我们在往后的模型中就可以拿这些参数值作为初始值。总结即先寻找每一组参数的局部最优,然后用于后续的全局寻优,因此一个好的初训练模型,也能帮助避免“局部最优”。
核心思想:这个的核心思想其实就是找到一个平面将不同的两类分割开。这个平面的特点为:
w^T*x + b = 0
参数需要满足最接近直线的几个点有:w^T*x + b = (+-)1
这几个点称之为支持向量
1)怎么寻找支持向量?
使得经过支持向量的两条线间隔最大:dist = 2/||w||
超平面函数*标签始终大于等于1
因此进行损失函数的选择的时候,一般取标签和超平面函数的乘积作为变量,常用的分类损失函数有0-1损失函数、hinge损失函数、对数损失函数,常用的是hinge函数,h = max(0,1-yf(x))
具体损失函数可以参见:【深度学习】——分类损失函数、回归损失函数、交叉熵损失函数、均方差损失函数、损失函数曲线
因为分类问题只有-1,1两种类型,因此使用真实标签乘以超平面函数(预测标签)的乘积作为损失函数的变量。预测真确则大于1,否则小于1,而不是去计算误差多少。
参考:谈谈SVM和SVR的区别
优点:泛化错误率低、计算开销不大
缺点:对参数调节和核函数调节很敏感,若SVM不修改的话仅适合二分类问题
核心思想:集成学习(ensemble method)和元算法(meta-algorithm)就是将不同的分类器进行组合成一个新的分类器。
组合形式:
1)针对同一个数据集训练多个不同分类器(SVM、K-NN等),然后结合起来
2)针对不同的数据集训练不同数据集,训练同一种分类器,然后结合起来
3)不同数据集不同分类器
即先训练多个弱分类器,然后再结合在一起得到一个强分类器
参考:机器学习算法 之 集成学习:串行-Boosting族(AdaBoost),并行-Bagging、随机森林
并行训练:每个数据集独立分开训练,互不影响
串行训练:下一个训练器的训练受上一个训练结果的影响
核心思想:不同数据集(重抽样重组而得)、同一种分类器,即在原始数据集中重抽样得到多个数据集,每个数据集训练得到一个分类器,最后根据分类器结果的投票结果进行决策
①假设原始数据集大小为n,从原始数据集中有放回的抽取一个样本;
②抽取n个样本组成了一个新的和原始数据集一样大的数据集,因为是有放回抽样,因此元素可以是重复的
③重复步骤①②S次,这样就得到了S个和原始数据大小一样的新数据集
④对这S个数据集进行独立训练得到S个分类器;——并行训练
⑤预测阶段:输入新样本,得到S个预测结果,然后根据投票的方式,将票数最高的分类结果作为最终分类标签——这里也看出对于每一个分类器的结果的权重都是一样的,都为1
常见的bagging算法有:随机森林(RF)
核心思想:同一数据集(每个样本带权重)、同一种分类器,即集中关注上一个分类器训练错误的样本进行下一个分类器的训练
这里以Adaboosting算法为例:
①对训练样本集的每一个样本赋予相等的权重
②先训练一个分类器,记录训练后预测错误的样本;
③根据分类器的错误率,对每一个分类器也有一个权重alpha,基于错误率计算得到的
④调整样本权重:分类正确的样本权重降低,错误的增加;权重主要是用于后续预测和损失函数使用,让分类器更关注这些样本
⑤再对调整后的数据集进行训练,得到下一个分类器;——串行训练
⑥重复③-⑤,直到分类器的错误率为0或者分类器达到指定个数时停止迭代
⑦迭代后的如下图所示,预测阶段是将样本输入后,得到的预测结果会进行alpha加权后再相加得到最终结果
核心思路:其实就是基于决策树进行的随机改进,这里是随机选择一个含有k个属性的自己,然后从这个子集中找到一个最优划分属性用于划分。这样就会得到多个决策树,进行投票即可
参考:https://zhuanlan.zhihu.com/p/104355127
聚类就是物以类聚,首先得到的是一个没有标记的样本集,我们希望将其划分成不同的类簇,即不同的子集。首先我们随机选择K个样本作为每个类簇的中心,然后计算每个样本和所有中心的距离,将距离最近的类簇中心作为这个样本的类簇,然后更新类簇中心,直到不改变为止
1)随机选取K个样本作为初始均值向量(簇中心);
2)计算样本i和k个簇质心的距离得到距离向量distij;
3)将样本i归类到min(distij)的簇j中;
4)待所有样本划分结束后,更新均值向量
5)求划分后每一个簇的样本的均值(几何中心),作为新的均值向量
6)重复2)-5)
7)直到均值向量不再改变,或者经过多少次迭代后停止即可
8)给每一个类簇定义上类标签,这样就聚类完成了
K-均值聚类、密度聚类(DBSCAN算法)、层次聚类、高斯混合聚类等
簇内距离最小,簇间距离最大