基础概念
人工智能、机器学习和深度学习关系
机器学习是一种实现人工智能的方法,深度学习是一种实现机器学习的技术。
监督和无监督算法
-
监督学习:用一部分已知分类、有标记的样本来训练机器后,让它用学到的特征,对没有还分类、无标记的样本进行分类、贴标签。多用于分类。
-
非监督学习:所有的数据没有标记,类别未知,让它自己学习样本之间的相似性来进行分类。多用于聚类。
回归和分类
-
**分类是指有有限个可能的问题,预测的是一个离散的、明确的变量。**比如给出一张图片,去判断是T恤是裤子或者其他的种类;这个类别是有限的。目标检测算法中,RCNN系列就是用了分类问题的思想,先是找出一定量的region proposal(候选区域),然后再对这些个候选区域进行分类任务。
-
**回归相反,回归是指有无限个可能的问题,预测的是一个连续的、逼近的变量。**比如房价的预测、明日气温的预测。同样,目标检测算法中,yolo系列则是用来回归的思想,没有提取候选区域这一步,直接划分为一些cell,然后产出box,回归出这些box的位置和置信度。
机器学习的一般步骤
数据处理(
特征工程(对特征进行进一步分析,并对数据进行处理。常见的特征工程包括:异常值处理、缺失值处理、数据分桶、特征处理、特征构造、特征筛选及降维等)、
训练集如何划分(传统的机器学习领域中,由于收集到的数据量往往不多,比较小,所以需要将收集到的数据分为三类:训练集、验证集、测试集。也有人分为两类,就是不需要测试集。
比例根据经验不同而不同,这里给出一个例子,如果是三类,可能是训练集:验证集:测试集=6:2:2;如果是两类,可能是训练集:验证集=7:3。因为数据量不多,所以验证集和测试集需要占的数据比例比较多)等)
训练(选择模型-代价函数-梯度下降优化)
测试(评测指标)
准确率(Accuracy)
准确率是最常用的分类性能指标。
Accuracy = (TP+TN)/(TP+FN+FP+TN),即正确预测的正反例数 /总数
精确率(Precision)
精确率容易和准确率被混为一谈。其实,精确率只是针对预测正确的正样本而不是所有预测正确的样本。表现为预测出是正的里面有多少真正是正的。可理解为查准率。
Precision = TP/(TP+FP),即正确预测的正例数 /预测正例总数
归一化
什么是
为了消除数据特征之间的量纲(不同特征不同属性的值有较大的差距)影响,我们需要对特征进行归一化处理,使得不同指标之间具有可比性。
必要性
- 对数值类型的特征做归一化可以将所有的特征都统一到一个大致相同的数值区间内。
- 从经验上说,归一化是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。
怎么做
将数据按比例缩放,使之落入一个小的特定区间。比如常用的SIGMOiD函数
过拟合和欠拟合
过拟合:训练的模型在训练样本中表现得过于优越,导致在验证数据集以及测试数据集中表现不佳。此时模型的泛化能力较差,不利于推广。
解决办法:
1)重新清洗数据,导致过拟合的一个原因也有可能是数据不纯导致的,如果出现了过拟合就需要我们重新清洗数据。
2)增大数据量,还有一个原因就是我们用于训练的数据量太小导致的,训练数据占总数据的比例过小。
3)采用正则化方法。
4)采用dropout方法。
欠拟合:训练样本被提取的特征比较少,模型没有很好地捕捉到数据特征,不能够很好地拟合数据。
解决办法:
1)添加其他特征项,有时候我们模型出现欠拟合的时候是因为特征项不够导致的,可以添加其他特征项来很好地解决。
2)添加多项式特征,这个在机器学习算法里面用的很普遍,例如将线性模型通过添加二次项或者三次项使模型泛化能力更强。
3)减少正则化参数,正则化的目的是用来防止过拟合的,但是现在模型出现了欠拟合,则需要减少正则化参数。
线性回归 和 逻辑回归
线性回归的基本原理
用一组变量的(特征)的线性组合,来建立与结果之间的关系。
逻辑回归和线性回归的区别
线性回归可以预测连续值,但是不能解决分类问题,我们需要根据预测的结果判定其属于正类还是负类。所以逻辑回归就是将线性回归的(−∞,+∞)结果,通过sigmoid函数映射到(0,1)之间。
一维特征的线性回归的过程
1. 一个特征问题
对于银行贷款问题,假如我们要根据顾客的一些属性得到是否可以贷款给顾客,那么二分类问题就可以得到解决。但是试想,如果银行到底应该贷款多少钱给顾客(比如支付宝的蚂蚁花呗)?这个就需要算法的输出的是一个实数值而不是”+1”和”-1”这样的label。
那么银行如何知道一个顾客的贷款额度是多少呢?一个可行的方案就是根据顾客的一些特征(年龄,工资,固定资产等)。我们假设顾客所有的特征集合X=(x1,x2,⋯,xd)。但是这些特征还应该有主次之分,比如工资的权重应该比年龄更大。于是我们设特征的权重W=(w1,w2,⋯,xd)。但是我们还是希望可以有一些波动,即偏置bb。在d=1d=1的时候有:
2.学习
有了上述学习目标之后,接下来面临着一个问题:如何知道学出来的h(xi)(或者w和b)好坏?记得刚说过要使得h(xi)尽量接近于真实值yi,yi是真实值(怎么来的?所以我们需训练数据啊!)。
注意这里的目标是使得h(xi)尽量接近于真实值yi但是这个可能会导致过拟合的问题,但在这里我们暂且不考虑。关于如何防止过拟合问题也是一门艺术,有机会再来探讨。
回到正题,要使h(xi)尽量接近于真实值yi,只要找到一个损失函数即可,一般线性回归用的是平方误差:err(yˆ,y)=(yˆ−y)2。即:
w∗, b∗表示最优解, N代表训练集中的样本个数。
接下来如何使得上述式子最小化的问题了,即线性回归模型的参数估计(周志华《机器学习》P54)。
可以分别对于w和 b求导得到:
于是我们就可以得到 w和b的闭式解:
用梯度下降方法:
决策树
决策树的基本原理
决策树基于树结构,从顶往下,依次对样本的(一个或多个)属性进行判断,直到决策树的叶节点并导出最终结果。
常见的三种决策树算法的特点
算法 | 特点 |
---|---|
ID3 | ID3算法在选择根节点和内部节点中的分支属性时,采用信息增益作为评价标准。 |
C4.5 | C4.5采用信息增益率的方式去选择变量 |
CART | 在选择变量的过程中,对回归树用平方误差最小准则,对分类树用基尼指数最小化准则 |
熵、信息增益和信息增益率
名称 | 定义 |
---|---|
熵 | 信息熵是用来评估样本集合的纯度的一个参数 |
信息增益 | 信息增益就是纯度提升值,用属性对原数据集进行划分后,得到的信息熵的差就是纯度的提升值。使用划分前后集合熵的差值来衡量使用当前特征对于样本集合划分效果的好坏。差值越高划分结果越好。 |
信息增益率 | 使用原因:当特征的取值较多时,根据此特征划分更容易得到纯度更高的子集,因此划分之后的熵更低,由于划分前的熵是一定的,因此信息增益更大,因此信息增益比较偏向取值较多的特征。 信息增益率= 惩罚参数 * 信息增益,信息增益率本质: 是在信息增益的基础之上乘上一个惩罚参数。特征个数较多时,惩罚参数较小;特征个数较少时,惩罚参数较大。 |
朴素贝叶斯
贝叶斯公式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6YvDgFIn-1640753366739)(https://www.zhihu.com/equation?tex=P(A|B)]+%3D\frac{P(B|A)P(A)}{P(B)})
什么是朴素贝叶斯
朴素贝叶斯假定样本的不同属性满足条件独立性假设,并在此基础上应用贝叶斯定理执行分类任务。
对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。
拉普拉斯平滑 ALL+1
由于训练量不足,会令分类器质量大大降低。为了解决这个问题,我们引入Laplace校准(这就引出了我们的拉普拉斯平滑),它的思想非常简单,就是对每个类别下所有划分的计数加1,这样如果训练样本集数量充分大时,并不会对结果产生影响,并且解决了上述频率为0的尴尬局面。
手工推算贝叶斯分类过程
实例
详解朴素贝叶斯分类算法_这里记录着我一点一滴的进步-CSDN博客_朴素贝叶斯分类例题
https://blog.csdn.net/ccblogger/article/details/81712351
无监督算法-聚类 K-means算法的原理
算法如何实现聚类的过程
利用相似性度量方法来衡量数据集中所有数据之间的关系,将关系比较密切的数据划分到一个集合中。
(1) K-means算法首先需要选择K个初始化聚类中心
(2) 计算每个数据对象到K个初始化聚类中心的距离,将数据对象分到距离聚类中心最近的那个数据集中,当所有数据对象都划分以后,就形成了K个数据集(即K个簇)
(3)接下来重新计算每个簇的数据对象的均值,将均值作为新的聚类中心
(4)最后计算每个数据对象到新的K个初始化聚类中心的距离,重新划分
(5)每次划分以后,都需要重新计算初始化聚类中心,一直重复这个过程,直到所有的数据对象无法更新到其他的数据集中。
图文理解
假设整个集合中有九个数据对象,按照K-means算法的第一步,需要选择K个初始化聚类中心(在这里,我选择3个,也就是将整个集合的数据对象,先分成3个小集合)如图所示:绿色,红色,黑色的 圆点代表随机选取的初始化聚类中心
2.计算数据对象到这三个点的距离,并选择距离最近的,组成一个集合,如图所示:
3.重新计算每个集合中的数据对象的均值,将均值作为全新的聚类中心点,图中的蓝色菱形代表全新的聚类中心点,如图所示:
4.此时。新的聚类中心点已经存在,在此基础上,对整个数据对象重新计算到聚类中心点的距离,重新分簇,如图所示:
再次计算均值,再次分簇,一直不停的迭代,直至所有的数据对象无法更新到其他的数据集中,该算法结束。
有何特点
K-means算法是一种典型的基于划分的聚类算法
优点:原理简单,实现容易
缺点:
- 收敛较慢
- 算法时间复杂度比较高
- 不能发现非凸形状的簇
- 需要事先确定超参数K
- 对噪声和离群点敏感
- 结果不一定是全局最优,只能保证局部最优
神经网络
简单神经网络(单一隐层)的结构
单隐藏层神经网络就是输入和输出中间有一个隐层,即输入层的输出是隐层的输入,隐层的输出和对应权重的乘积是输出层的输入,输出层的输出才是最终的输出。一层隐层网络就是一层特征层次,每一个神经元可以类似看作一个特征属性。
举一个例子,带入数值演示前向和反向传播的过程
参考 反向传播——通俗易懂_chengchaowei的博客-CSDN博客_反向传播 这个文章真作者大佬 有一说一 这个大佬写的真的牛逼啊!!!强推
假设,你有这样一个网络层:
这是典型的三层神经网络的基本构成,第一层是输入层,包含两个神经元i1,i2,和截距项b1;第二层是隐含层,包含两个神经元h1,h2和截距项b2,第三层是输出o1,o2,每条线上标的wi是层与层之间连接的权重,激活函数我们默认为sigmoid函数。
其中,输入数据 i1=0.05,i2=0.10;
输出数据 o1=0.01,o2=0.99;
初始权重 w1=0.15,w2=0.20,w3=0.25,w4=0.30;
w5=0.40,w6=0.45,w7=0.50,w8=0.55
目标:给出输入数据i1,i2(0.05和0.10),使输出尽可能与原始输出o1,o2(0.01和0.99)接近。
前向传播的手工推导
1.输入层---->隐含层 也就是说算出图中的 h1 and h2。
计算神经元h1的输入加权和:
神经元h1的输出o1:(此处用到激活函数为sigmoid函数):
同理,可计算出神经元h2的输出o2:
2.隐含层---->输出层 也就是说算出图中的 o1 and o2。
计算输出层神经元o1和o2的值:
这样前向传播的过程就结束了,我们得到输出值为[0.75136079 , 0.772928465],与实际值[0.01 , 0.99]相差还很远,现在我们对误差进行反向传播,更新权值,重新计算输出。
反向传播的手工推导
1.计算总误差
总误差:(square error)
但是有两个输出,所以分别计算o1和o2的误差,总误差为两者之和:
2.隐含层---->输出层的权值更新:
以权重参数w5为例,如果我们想知道w5对整体误差产生了多少影响,可以用整体误差对w5求偏导求出:(链式法则)
下面的图可以更直观的看清楚误差是怎样反向传播的:
现在我们来分别计算每个式子的值:
计算:
计算:
(这一步实际上就是对sigmoid函数求导,比较简单,可以自己推导一下)
计算:
最后三者相乘:
这样我们就计算出整体误差E(total)对w5的偏导值。
回过头来再看看上面的公式,我们发现:
为了表达方便,用来表示输出层的误差:
因此,整体误差E(total)对w5的偏导公式可以写成:
如果输出层误差计为负的话,也可以写成:
最后我们来更新w5的值:
(其中,是学习速率,这里我们取0.5)
同理,可更新w6,w7,w8:
3.隐含层---->隐含层的权值更新:
方法其实与上面说的差不多,但是有个地方需要变一下,在上文计算总误差对w5的偏导时,是从out(o1)---->net(o1)---->w5,但是在隐含层之间的权值更新时,是out(h1)---->net(h1)---->w1,而out(h1)会接受E(o1)和E(o2)两个地方传来的误差,所以这个地方两个都要计算。
计算:
先计算:
同理,计算出:
两者相加得到总值:
再计算: 就是对SIGMOD函数求偏导
再计算:
最后,三者相乘:
为了简化公式,用sigma(h1)表示隐含层单元h1的误差:
最后,更新w1的权值:
同理,额可更新w2,w3,w4的权值:
这样误差反向传播法就完成了,最后我们再把更新的权值重新计算,不停地迭代,在这个例子中第一次迭代之后,总误差E(total)由0.298371109下降至0.291027924。迭代10000次后,总误差为0.000035085,输出为0.015912196,0.984065734( 原输入为[0.01,0.99]),证明效果还是不错的。
SVM (了解)
SVM的基本原理
SVM 是一种二类分类模型。它的基本模型是在特征空间中寻找间隔最大化的分离超平面的线性分类器。
• 当训练样本线性可分时,通过硬间隔最大化,学习一个线性分类器,即线性可分支持向量机;
• 当训练数据近似线性可分时,引入松弛变量,通过软间隔最大化,学习一个线性分类器,即线性支持向量机;
• 当训练数据线性不可分时,通过使用核技巧及软间隔最大化,学习非线性支持向量机。