前一段时间应客户邀请,给客户进行人工智能相关知识的科普,客服群体是研究院的同志,提出要求,想要我讲解干货多一些。能够讲到概念的同时最好也能够从原理出发的进行科普。于是我从各种资料中总结出这样的一份科普文档。
适合人群:对AI技术感兴趣,理解又不是很深入的人。对于一些更深入算法,文中的科普深度控制在浅尝辄止,如果想了解更多,可以向这一方面查询。本文志在可以很好的科普,和AI的技术脉络上的全面梳理。
中间的是GeoffreyHinton,加拿大多伦多大学的教授,如今被聘为“Google大脑”的负责人。右边的是YannLeCun,纽约大学教授,如今是Facebook人工智能实验室的主任。而左边的大家都很熟悉,AndrewNg,中文名吴恩达,斯坦福大学副教授,曾是“百度大脑”的负责人与百度首席科学家。这三位都是目前业界炙手可热的大牛,被互联网界大鳄求贤若渴的聘请,足见他们的重要性。而他们的研究方向,则全部都是机器学习的子类--深度学习。
我相信大家都有跟别人相约,然后等人的经历。现实中不是每个人都那么守时的,于是当你碰到一些爱迟到的人,你的时间不可避免的要浪费。我就碰到过这样的一个例子。
对我的一个朋友小Y而言,他就不是那么守时,最常见的表现是他经常迟到。当有一次我跟他约好3点钟在某个麦当劳见面时,在我出门的那一刻我突然想到一个问题:我现在出发合适么?我会不会又到了地点后,花上30分钟去等他?我决定采取一个策略解决这个问题。
要想解决这个问题,有好几种方法。第一种方法是采用知识:我搜寻能够解决这个问题的知识。但很遗憾,没有人会把如何等人这个问题作为知识传授,因此我不可能找到已有的知识能够解决这个问题。第二种方法是问他人:我去询问他人获得解决这个问题的能力。但是同样的,这个问题没有人能够解答,因为可能没人碰上跟我一样的情况。第三种方法是准则法:我问自己的内心,我有否设立过什么准则去面对这个问题?例如,无论别人如何,我都会守时到达。但我不是个死板的人,我没有设立过这样的规则。
事实上,我相信有种方法比以上三种都合适。我把过往跟小Y相约的经历在脑海中重现一下,看看跟他相约的次数中,迟到占了多大的比例。而我利用这来预测他这次迟到的可能性。如果这个值超出了我心里的某个界限,那我选择等一会再出发。假设我跟小Y约过5次,他迟到的次数是1次,那么他按时到的比例为80%,我心中的阈值为70%,我认为这次小Y应该不会迟到,因此我按时出门。如果小Y在5次迟到的次数中占了4次,也就是他按时到达的比例为20%,由于这个值低于我的阈值,因此我选择推迟出门的时间。这个方法从它的利用层面来看,又称为经验法。在经验法的思考过程中,我事实上利用了以往所有相约的数据。因此也可以称之为依据数据做的判断。
依据数据所做的判断跟机器学习的思想根本上是一致的。
刚才的思考过程我只考虑“频次”这种属性。在真实的机器学习中,这可能都不算是一个应用。一般的机器学习模型至少考虑两个量:一个是因变量,也就是我们希望预测的结果,在这个例子里就是小Y迟到与否的判断。另一个是自变量,也就是用来预测小Y是否迟到的量。假设我把时间作为自变量,譬如我发现小Y所有迟到的日子基本都是星期五,而在非星期五情况下他基本不迟到。于是我可以建立一个模型,来模拟小Y迟到与否跟日子是否是星期五的概率。
这样的图就是一个最简单的机器学习模型,称之为决策树。
再更复杂一点,小Y的迟到跟天气也有一定的原因,例如下雨的时候,这时候我需要考虑三个自变量。
如果我希望能够预测小Y迟到的具体时间,我可以把他每次迟到的时间跟雨量的大小以及前面考虑的自变量统一建立一个模型。于是我的模型可以预测值,例如他大概会迟到几分钟。这样可以帮助我更好的规划我出门的时间。在这样的情况下,决策树就无法很好地支撑了,因为决策树只能预测离散值。我们可以用线型回归方法建立这个模型。
如果我把这些建立模型的过程交给电脑。比如把所有的自变量和因变量输入,然后让计算机帮我生成一个模型,同时让计算机根据我当前的情况,给出我是否需要迟出门,需要迟几分钟的建议。那么计算机执行这些辅助决策的过程就是机器学习的过程。
机器学习方法是计算机利用已有的数据(经验),得出了某种模型(迟到的规律),并利用此模型预测未来(是否迟到)的一种方法。
事实上,机器学习的一个主要目的就是把人类思考归纳经验的过程转化为计算机通过对数据的处理计算得出模型的过程。经过计算机得出的模型能够以近似于人的方式解决很多灵活复杂的问题。
但从实践的意义上来说,现代的人工智能大多是一种通过利用数据,训练出模型,然后使用模型预测的一种方法。
机器学习中的“训练”与“预测”过程可以对应到人类的“归纳”和“推测”过程。通过这样的对应,我们可以发现,机器学习的思想并不复杂,仅仅是对人类在生活中学习成长的一个模拟。由于机器学习不是基于编程形成的结果,因此它的处理过程不是因果的逻辑,而是通过归纳思想得出的相关性结论。
机器学习是目前业界最为Amazing与火热的一项技术,从网上的每一次淘宝的购买东西,到自动驾驶汽车技术,以及网络攻击抵御系统等等,都有机器学习的因子在内,同时机器学习也是最有可能使人类完成AIdream的一项技术,各种人工智能目前的应用,如微软小冰聊天机器人,到计算机视觉技术的进步,都有机器学习努力的成分。
数据科学:pandas,numpy等。
机器学习(无监督学习,监督学习):KNN算法,Kmeans算法,线性回归(有监督),逻辑回归(有监督),朴素贝叶斯(有监督),决策树(有监督),集成算法。
深度学习(回归预测,cv计算机视觉,nlp自然语言,gan自学习对抗学习):BP-DNN算法,CNN卷积神经网络,RNN-LSTM循环神经网络。
Numpy是python语言中最基础和最强大的科学计算和数据处理的工具包,这种工具可用来存储和处理大型矩阵,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。数据分析工具pandas也是基于numpy构建的,机器学习包scikit-learn也大量使用了numpy方法。
Pandas是Pandas纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。它是使Python成为强大而高效的数据分析环境的重要因素之一。
在机器学习任务中,我们首先需要对数据进行清洗和编辑等工作,pandas库大大简化了我们的工作量,熟练并掌握pandas常规用法是正确构建机器学习模型的第一步。
1,监督学习(supervisedlearning)
有标签的数据就是有监督学习。
已经标记好的数据(labelleddata),用来做训练来预测新数据的类型(class),或者是值。预测已有类型叫做分类(classification),预测一个值叫做回归(regression)。
常见的有监督学习算法:回归分析和统计分类。
2,无监督学习(unsupervisedlearning)
无标签的数据就是无监督学习。
代表数据的背景结构,因此,简化、降维、汇总是其主要没有目标变量,目的是揭示相关变量所提供的潜在重叠信息所特点
常见的无监督学习算法:聚类分析、主成分分析、因子分析、典型相关分析、对应分析、多维尺度分析。
KNN算法是一种有监督学习。
1,KNN算法原理
K最近邻(k-NearestNeighbors,KNN)算法是一种基本的分类和回归算法,也是最简单易懂的机器学习算法,没有之一。应用广泛。
KNN的工作原理很简单:存在一个训练样本集合A,在给定测试样本b时,基于某种距离度量,找出训练集A中与测试样本b最靠近的k个训练样本(通常k≤20且为整数),之后,基于这k个训练样本的结果信息来预测种类或值。其中,在分类问题中,KNN用来预测种类。一般使用“投票法”,选择这k个样本中出现次数最多的类别来作为测试样本的类别。在回归问题中,使用“平均法”,将k个样本对应的结果数值的平均值作为测试样本的输出
一句话“物以类聚,人以群分”。
2,算法过程
3,案例(预测电影类别)*
人工智能技术点小案例: 前一段时间应客户邀请,给客户进行人工智能相关知识的科普,客服群体是研究院的同志,提出要求,想要我讲解干货多一些。能够讲到概念的同时最好也能够从原理出发的进行科普。于是我从各种资料中总结出这样的一份科普文档。这个项目的代码主要是文档中准备的小案例。https://gitee.com/boris-123/case_for_AI.git
4,scikit-learn中KNN相关的类库概述
在scikit-learn中,与近邻法这一大类相关的类库都在sklearn.neighbors包之中。KNN分类树的类是KNeighborsClassifier,KNN回归树的类是KNeighborsRegressor。除此之外,还有KNN的扩展,即限定半径最近邻分类树的类RadiusNeighborsClassifier和限定半径最近邻回归树的类RadiusNeighborsRegressor,以及最近质心分类算法NearestCentroid。
在这些算法中,KNN分类和回归的类参数完全一样。限定半径最近邻法分类和回归的类的主要参数也和KNN基本一样。比较特别是的最近质心分类算法,由于它是直接选择最近质心来分类,所以仅有两个参数,距离度量和特征选择距离阈值,比较简单,因此后面就不再专门讲述最近质心分类算法的参数。
另外几个在sklearn.neighbors包中但不是做分类回归预测的类也值得关注。kneighbors_graph类返回用KNN时和每个样本最近的K个训练集样本的位置。radius_neighbors_graph返回用限定半径最近邻法时和每个样本在限定半径内的训练集样本的位置。NearestNeighbors是个大杂烩,它即可以返回用KNN时和每个样本最近的K个训练集样本的位置,也可以返回用限定半径最近邻法时和每个样本最近的训练集样本的位置,常常用在聚类模型中。
5,使用KNeighborsClassifier做分类的实例
完整代码见github:
https://github.com/ljpzzz/machinelearning/blob/master/classic-machine-learning/knn_classifier.ipynb
Kmeans算法是一种无监督学习。
1,聚类算法概念
所谓聚类问题,就是给定一个元素集合D,其中每个元素具有n个可观察属性,使用某种算法将D划分成k个子集,要求每个子集内部的元素之间相似度尽可能的高,而不同子集的元素相似度尽可能低。其中每个子集叫做一个簇。与分类不同,分类是示例式学习,要求分类前明确各个类别,并断言每个元素映射到一个类别,而聚类是观察式学习,在聚类前可以不知道类别甚至不给定类别数量,是无监督学习的一种。目前聚类广泛应用于统计学、生物学、数据库技术和市场营销等领域,如:
在商务上,聚类能帮助市场分析人员从客户基本库中发现不同的客户群,并且用不同的购买模式来刻画不同的消费群体的特征在生物学上,聚类能用于帮助推导植物和动物的种类,基因和蛋白质的分类,获得对种群中固定结构的认识。
聚类也能用来对web上的文档进行分类,以发现有用的信息。
聚类分析能作为一种独立的工具来获得数据分布的情况,可以观察每个簇的特点,并对某些特定的节点进一步分析。为此,相应的算法也非常多。
k均值(k-means)算法是一种最经典的聚类算法。
2,Kmeans原理:
聚类算法性能度量是簇类相似度好簇间的相似度差,则聚类算法的性能较好。我们基于此定义k-means聚类算法优化过程:
其中表示当样本划分为簇类k时为1,否则为0。
表示簇类k的均值向量
目标函数(1.1)在一定程度上刻画了簇内样本围绕簇均值向量的紧密程度,J值越小则簇内样本相似度越高。最小化目标函数是一个NP难题,k-means聚类运用EM算法思想实现模型的最优化。
初始化K个簇的均值向量,即是常数,求J最小化时的。我们不难知道当数据点划分到离该数据点最近的簇类时,目标函数J取最小。
已知,求最小化J时相应的。令目标函数J对的偏导数等于0:
得:
表达式的含义是簇类中心等于所属簇类样本的均值。
3,k-means聚类算法步骤
k-means聚类算法步骤实质是EM算法的模型优化过程,具体步骤如下:
1)随机选择k个样本作为初始簇类的均值向量;
2)将每个样本数据集划分离它距离最近的簇;
3)根据每个样本所属的簇,更新簇类的均值向量;
4)重复(2)(3)步,当达到设置的迭代次数或簇类的均值向量不再改变时,模型构建完成,输出聚类算法结果。
4,案例(超市客户分组)
人工智能技术点小案例: 前一段时间应客户邀请,给客户进行人工智能相关知识的科普,客服群体是研究院的同志,提出要求,想要我讲解干货多一些。能够讲到概念的同时最好也能够从原理出发的进行科普。于是我从各种资料中总结出这样的一份科普文档。这个项目的代码主要是文档中准备的小案例。https://gitee.com/boris-123/case_for_AI.git
5,scikit-learn中K-means相关的类库概述
sklearn.cluster.KMeans(n_clusters=8,init='k-means++')
参数说明:
n_clusters接收int,表示开始的聚类中心的数量
init初始化聚类中心的算法方式,默认为'k-means++'
6,抛砖引玉,其他非监督聚类介绍:
1,层次聚类方法
聚合层次聚类的基本思想:
1)计算数据集的相似矩阵;2)假设每个样本点为一个簇类;3)循环:合并相似度最高的两个簇类,然后更新相似矩阵;4)当簇类个数为1时,循环终止;
图例:
树状图是类似树(tree-like)的图表,记录了簇类聚合和拆分的顺序。我们根据上面的步骤,使用树状图对聚合层次聚类算法进行可视化:
2,密度聚类方法(DBSCAN)
DBSCAN算法划分数据集D为核心点,边界点和噪声点,并按照一定的连接规则组成簇类。介绍连接规则前,先定义下面这几个概念:
密度直达(directlydensity-reachable):若q处于p的-邻域内,且p为核心点,则称q由p密度直达;
密度可达(density-reachable):若q处于p的-邻域内,且p,q均为核心点,则称q的邻域点由p密度可达;
密度相连(density-connected):若p,q均为非核心点,且p,q处于同一个簇类中,则称q与p密度相连。下图给出了上述概念的直观显示(MinPts)
密度聚类的风电发电出力预测应用:
风电预测DBSCAN的应用,原论文:
登录 · 语雀十万阿里人都在用的笔记与文档知识库,面向企业、组织或个人,提供全新的体系化知识管理,打造轻松流畅的工作协同。金融级数据安全、丰富的应用场景、强大的知识创作与管理,助力企业、个人轻松拥有云端知识库https://www.yuque.com/preview/yuque/0/2021/pdf/2524844/1629942465631-26291d84-2402-4155-87a7-fda0cc144c74.pdf?from=https%3A%2F%2Fwww.yuque.com%2Ftingwuqingyini%2Fepczvr%2Fwbuco9 3,谱聚类方法
谱聚类是基于图论的知识所演化出的算法,在聚类中广泛使用。主要思想是将所有的数据看成空间中的点,这些点之间可以用边连接起来,距离较远的两点之间边的权重值较低,距离较近的两点间边的权重值较高,然后通过对所有数据点组成的图进行切图,让切图后不同子图间边的权重之和尽可能低,子图内边的权重之和尽可能高,从而达到聚类的目的。
该聚类方法在图形领域常用,用于图像轮廓的提取
最终各种聚类方法效果的比较:
7,聚类评估指标
1)轮廓系数
轮廓系数的值是介于[-1,1],越趋近于1代表内聚度和分离度都相对较优。
2)RI(兰德系数)
3)DB指数(Davies-BouldinIndex)等
8,k-means与knn的区别
下面列举几个区别的地方:
1)knn是监督学习方法,k-means是非监督学习方法,因此knn需要样本的标记类,k-means不需要;
2)knn不需要训练,只要找到距离测试样本最近的k个样本,根据k个样本的类别给出分类结果;k-means需要训练,训练的目的是得到每个簇类的均值向量(质心),根据质心给出测试数据的分类结果;
回归算法是一种有监督学习算法。
1,线性回归算法概念
y=kx+b
上过初中的同学都知道,这个式子表达的是,当我知道k(参数)和b(参数)的情况下,我随便给一个x我都能通过这个方程算出y来。其实,说白了,线性回归无非就是在N维空间中找一个形式像直线方程一样的函数来拟合数据而已。
2,多元线性回归原理及过程:
建立模型:
过程:
已知道:特征X,真实标签Y,==>找到
求解(最小二乘法):
3,案例(一元函数回归)==>展示梯度下降过程,展示最小二乘法。
人工智能技术点小案例: 前一段时间应客户邀请,给客户进行人工智能相关知识的科普,客服群体是研究院的同志,提出要求,想要我讲解干货多一些。能够讲到概念的同时最好也能够从原理出发的进行科普。于是我从各种资料中总结出这样的一份科普文档。这个项目的代码主要是文档中准备的小案例。https://gitee.com/boris-123/case_for_AI.git4,案例(波士顿房价)。==>sklearn的应用。
人工智能技术点小案例: 前一段时间应客户邀请,给客户进行人工智能相关知识的科普,客服群体是研究院的同志,提出要求,想要我讲解干货多一些。能够讲到概念的同时最好也能够从原理出发的进行科普。于是我从各种资料中总结出这样的一份科普文档。这个项目的代码主要是文档中准备的小案例。https://gitee.com/boris-123/case_for_AI.git
5,不同梯度下降的方法:
1)批量梯度下降法BGD
批量梯度下降法(BatchGradientDescent,简称BGD)是梯度下降法最原始的形式,它的具体思路是在更新每一参数时都使用所有的样本来进行更新。优点:全局最优解;易于并行实现;缺点:当样本数目很多时,训练过程会很慢。
2)随机梯度下降法SGD
随机梯度下降是通过每个样本来迭代更新一次,如果样本量很大的情况(例如几十万),那么可能只用其中几万条或者几千条的样本,就已经将θ迭代到最优解了,对比上面的批量梯度下降,迭代一次需要用到十几万训练样本,一次迭代不可能最优,如果迭代10次的话就需要遍历训练样本10次。但是,SGD伴随的一个问题是噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向。
3)小批量梯度下降法MBGD
有上述的两种梯度下降法可以看出,其各自均有优缺点,那么能不能在两种方法的性能之间取得一个折衷呢?即,算法的训练过程比较快,而且也要保证最终参数训练的准确率,而这正是小批量梯度下降法(Mini-batchGradientDescent,简称MBGD)的初衷。
6,梯度下降优化方法
梯度下降法的缺点:
1)靠近极小值时收敛速度减慢,如下图所示;
2)直线搜索时可能会产生一些问题;
3)可能会“之字形”地下降。
从上图可以看出,梯度下降法在接近最优解的区域收敛速度明显变慢,利用梯度下降法求解需要很多次的迭代。在机器学习中,基于基本的梯度下降法发展了两种梯度下降方法,分别为随机梯度下降法和批量梯度下降法。
一,牛顿法(Newton'smethod):
牛顿法是一种在实数域和复数域上近似求解方程的方法。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x)=0的根。牛顿法最大的特点就在于它的收敛速度很快。
由于牛顿法是基于当前位置的切线来确定下一次的位置,所以牛顿法又被很形象地称为是"切线法"。
从本质上去看,牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法就更快。如果更通俗地说的话,比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。(牛顿法目光更加长远,所以少走弯路;相对而言,梯度下降法只考虑了局部的最优,没有全局思想。)根据wiki上的解释,从几何上说,牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。
牛顿法的优缺点总结:优点:二阶收敛,收敛速度快;
缺点:牛顿法是一种迭代算法,每一步都需要求解目标函数的Hessian矩阵的逆矩阵,计算比较复杂。
二,拟牛顿法(Quasi-NewtonMethods),和Adam优化法等:
拟牛顿法的本质思想是改善牛顿法每次需要求解复杂的Hessian矩阵的逆矩阵的缺陷,它使用正定矩阵来近似Hessian矩阵的逆,从而简化了运算的复杂度。拟牛顿法和最速下降法一样只要求每一步迭代时知道目标函数的梯度。通过测量梯度的变化,构造一个目标函数的模型使之足以产生超线性收敛性。这类方法大大优于最速下降法,尤其对于困难的问题。另外,因为拟牛顿法不需要二阶导数的信息,所以有时比牛顿法更为有效。如今,优化软件中包含了大量的拟牛顿算法用来解决无约束,约束,和大规模的优化问题。
7,时序预测:
一例子:时间序列预测——ARIMA(差分自回归移动平均模型)
时序模式-时间序列-AR-MA-ARMA-ARIMA_哔哩哔哩_bilibili时序模型是通过历史数据来预测将来数据的模型。本视频重点是ARMA和ARIMA模型。https://www.bilibili.com/video/BV1p54y1r7z6/?spm_id_from=333.788.recommend_more_video.48,正则化(防止过拟合出现)
L1正则化的优化角度分析:
在限定的区域,找到使最小的值。
上式可知,当w大于0时,更新的参数w变小;当w小于0时,更新的参数w变大;所以,L1正则化容易使参数变为0,即特征稀疏化。
L2正则化的优化角度分析:
由上式可知,正则化的更新参数相比于未含正则项的更新参数多了项,当w趋向于0时,参数减小的非常缓慢,因此L2正则化使参数减小到很小的范围,但不为0
1,算法概述:
2,求解方法:
梯度求解数学建模:
3,案例(癌症诊断)。
人工智能技术点小案例: 前一段时间应客户邀请,给客户进行人工智能相关知识的科普,客服群体是研究院的同志,提出要求,想要我讲解干货多一些。能够讲到概念的同时最好也能够从原理出发的进行科普。于是我从各种资料中总结出这样的一份科普文档。这个项目的代码主要是文档中准备的小案例。https://gitee.com/boris-123/case_for_AI.git4,多分类情况下的softmax函数。
5,分类模型的评估方法:
1,算法概述:
一,什么是朴素贝叶斯分类方法
属于哪个类别概率大,就判断属于哪个类别
概率基础:P(X):取值在[0,1]
联合概率:包含多个条件,且所有条件同时成立的概率
记作:P(A,B)
条件概率:就是事件A在另外一个事件B已经发生条件下的发生概率
记作:P(A|B)
相互独立:如果P(A,B)=P(A)P(B),则称事件A与事件B相互独立。
二、朴素贝叶斯公式
2,举列子(嫁人问题):
3,案例(判断留言的正面反面)
人工智能技术点小案例: 前一段时间应客户邀请,给客户进行人工智能相关知识的科普,客服群体是研究院的同志,提出要求,想要我讲解干货多一些。能够讲到概念的同时最好也能够从原理出发的进行科普。于是我从各种资料中总结出这样的一份科普文档。这个项目的代码主要是文档中准备的小案例。https://gitee.com/boris-123/case_for_AI.git4,抛砖引玉马尔科夫链:
首先,我将用一个非常常见的例子来描述它们:
假设有两种可能的天气状态:晴天或阴天,你随时都可以观测当前的天气状态且状态限定为晴天或阴天。
现在你想预测明天的天气情况,你本能的会认为当天的天气会对明天的天气有一定的影响,因此,拥有智慧和才貌的你会收集并分析过去几年的天气数据,发现了一个规律——当天是阴天第二天是晴天的概率为0.25,由于天气限定为晴天或阴天,那么当天是阴天第二天也是阴天的概率为0.75。
因此你可以基于当前的天气状态去预测未来几天的天气。这一例子阐述了马尔科夫链的关键概念:马尔科夫链本质上是由满足马尔科夫性质的转移概率分布组成,下图为天气例子的转移概率:
马尔科夫的性质在于它的无记忆性,下一时刻的状态只与当前的状态相关。用数学公式描述为:
隐性马尔可夫链HMM,乃至马尔可夫场理论(感兴趣者可以自查)
1,算法概述及原理:
顾名思义,决策树就是一棵树,一颗决策树包含一个根节点、若干个内部结点和若干个叶结点;叶结点对应于决策结果,其他每个结点则对应于一个属性测试;每个结点包含的样本集合根据属性测试的结果被划分到子结点中;根结点包含样本全集,从根结点到每个叶子结点的路径对应了一个判定测试序列。下面直接上个图,让大家看下决策树是怎样决策的(以二元分类为例),图中红线表示给定一个样例(表中数据)决策树的决策过程:
如何让机器自己生成决策树?
信息增益
决策树学习的关键在于如何选择最优的划分属性,所谓的最优划分属性,对于二元分类而言,就是尽量使划分的样本属于同一类别,即“纯度”最高的属性。那么如何来度量特征(features)的纯度,这时候就要用到“信息熵(informationentropy)”。先来看看信息熵的定义:假如当前样本集D中第k类样本所占的比例为,为类别的总数(对于二元分类来说,)。则样本集的信息熵为:。
关键点:最少的问题问出答案。信息增益大,代表条件熵值小,则条件对应的结果的对应关系最不混乱。更好决策出结果。
2,例子(会议是否取消):
信息增益大,代表条件熵值小,则条件对应的结果的对应关系最不混乱。更好决策出结果。
补充:
后续决策树算法的升级:ID3算法==>c4.5算法
CART算法:Gini系数。(不展开了)
3,案例(生存预测)
人工智能技术点小案例: 前一段时间应客户邀请,给客户进行人工智能相关知识的科普,客服群体是研究院的同志,提出要求,想要我讲解干货多一些。能够讲到概念的同时最好也能够从原理出发的进行科普。于是我从各种资料中总结出这样的一份科普文档。这个项目的代码主要是文档中准备的小案例。https://gitee.com/boris-123/case_for_AI.git
1,算法概述:
在机器学习的有监督学习算法中,我们的目标是学习出一个稳定的且在各个方面表现都较好的模型,但实际情况往往不这么理想,有时我们只能得到多个有偏好的模型(弱监督模型,在某些方面表现的比较好)。集成学习就是组合这里的多个弱监督模型以期得到一个更好更全面的强监督模型,集成学习潜在的思想是即便某一个弱分类器得到了错误的预测,其他的弱分类器也可以将错误纠正回来。
集成学习通过训练多个分类器,然后把这些分类器组合起来,以达到更好的预测性能集成。
集成学习常用的有两类:
Bagging:弱学习器的生成没有先后顺序,可并行训练。预测结果为多个弱学习器预测结果的众数,或者平均值。
Boosting:弱学习的生成有先后顺序,后一个弱学习器是在之前学习器的基础上训练。预测结果为多个弱学习器预测结果的和。
总之,集成学习通过建立几个模型组合的来解决单一预测问题。
2,Bagging(bootstrapaggregation)算法之-随机森林
Bagging是bootstrapaggregating的简写。什么是bootstrap采样方法?就是随机有放回抽样。从总体中随机抽样训练集。如果不进行随机抽样,每棵树的训练集都一样,那么最终训练出的树分类结果也是完全一样的。为什么要有放回地抽样?如果不是有放回的抽样,那么每棵树的训练样本都是不同的,都是没有交集的,这样每棵树都是“有偏的”,都是绝对“片面的”,也就是说每棵树训练出来都是有很大的差异的。
从训练集中进行子抽样组成每个基模型所需要的子训练集,对所有基模型预测的结果进行综合产生最终的预测结果。
经典算法例子随机森林:
随机森林需要构建多棵树,而每一颗树的构建都需要遵循以下原则:
1)假设我们设定训练集中的样本个数为N,然后通过有重置的重复多次抽样获得这N个样本,这样的抽样结果将作为我们生成决策树的训练集;
2)如果有M个输入变量,每个节点都将随机选择m(m 3)每棵决策树都最大可能地进行生长而不进行剪枝; 4)通过对所有的决策树进行加总来预测新的数据。 案例(光伏风电出力预测)(日后补充) 3,Boosting算法之XGB Boosting,也叫做提升法,该类算法将弱学习算法组合成强学习算法,它的思想起源于Valiant提出的PAC(ProbablyApproximatelyCorrect)学习模型。当前模型是在之前模型基础上构建,模型之前有强烈的依赖关系和相关性。 XBG的推导公式:略 案例(风电出力发电) 4,Bagging和Boosting两者之间的区别 1)训练样本集 Bagging:训练集是有放回抽样,从原始集中选出的K组训练集是相互独立的。 Boosting:每一次迭代的训练集不变。 2)训练样本权重 Bagging:每个训练样本的权重相等,即1/N。 Boosting:根据学习器的错误率不断调整样例的权值,错误率越大,权值越大。 3)预测函数的权重: Bagging:K组学习器的权重相等,即1/K。 Boosting:学习器性能好的分配较大的权重,学习器性能差的分配较小的权重。 4)并行计算 Bagging:K组学习器模型可以并行生成。 Boosting:K组学习器只能顺序生成,因为后一个模型的样本权值需要前一个学习器模型的结果。 生物神经网络神经元也叫做神经细胞,是神经系统最基本的结构和功能单位,其特点为:一端受到刺激会将信号传递到另一端。 神经网络:一个神经元将刺激信号传递给另一个神经元,多个神经元组合起来就是神经网络。一个复杂的神经网络系统是由多个简单的神经元相连组成的。 1,算法概述: 人工神经网络(ArtificialNeuralNetwork,简写为ANN)也简称为神经网络(NN),是受到生物神经网络的启发,模仿生物神经网络(动物的中枢神经系统,特别是大脑)结构和功能的计算模型。人工神经网络最小的单元----感知机。 深度神经网络: 深度神经网络由许多感知机组成,并在深度和广度上进行各种组合。这种神经网络结构包含三个层次的神经网络。分别为输入层,输出层以及隐藏层。 神经网络特点: 1)上图中的每一根线,即每个连接都有个权重,但是输入层没有权重 2)同一层神经元之间没有连接 3)每个神经元都和下一层所有的神经元相连,该层被称为全连接层(fullconnected)深度神经网络的输入层、隐层、输出层也可以有多种形式。 4)输入层可以不止有1个神经元。隐藏层可以只有1层,也可以有多层。输出层也可为多个神经元 2,案例:(风电预测)(后续更新) 3,问题: 随着人工智能需求的提升,尤其在复杂的图像分类领域,多层神经网络简单的叠加网络对于图像分类越来越力不从心。为什么会力不从心?维度灾难会造成内存消耗、计算量巨大,训练困难。梯度消失和下降的问题。 梯度爆炸或者消失的原因:https://zhuanlan.zhihu.com/p/76772734 卷积神经网络(ConvolutionalNeuralNetworks,简称CNN)是一种常用的前馈神经网络,通过一系列卷积层和子采样层(也叫做池化层)来对输入数据进行特征抽取。 在卷积操作中,卷积核只关注一个局部区域(即一个神经元只与部分前一层神经元连接),这个局部区域通常是二维或者三维的,使得卷积神经网络更适合处理图像视频数据。在对整个输入进行特征计算时,通过滑动卷积核实现参数共享,大大减少了参数量,这同时也使得卷积神经网络具有平移不变性 1)输入层输入层(InputLayer)是输入卷积神经网络的原始数据或经过预处理的数据,可以是图像识别领域中原始三维的多彩图像,也可以是音频识别领域中经过傅利叶变换的二维波形数据,甚至是自然语言处理中一维表示的句子向量。以图像分类任务为例,输入层输入的图像一般包含RGB三个通道,是一个由长宽分别为H和W组成的3维像素值矩阵H*W*3,卷积神经网络每次可以批量处理的图像个数不尽相同,若指定输入层接收到的图像个数为N,则输入层的输出数据为N*H*W*3 2)卷积层卷积特点: 第一:又进行了一次特征提取,所以能减小下一层数据的处理量。 第二:能够获得更为抽象的信息,从而防止过拟合,也就是提高了一定的泛化性。 第三:由于这种抽象性,所以能对输入的微小变化产生更大的容忍,也就是保持了它的不变性,这里的容忍包括图像的少量平移、旋转缩放等操作变化。本质就是数学运算 卷积计算对于卷积参数其实并不是随便设置的,它需要满足一定的公式,如下所示:输入图片大小W×W卷积核大小F×F;步长S;边界填充的像素数PN=(W−F+2P)/S+1输出图片大小为N×N。 可以看出两个卷积核提取出了不同的图像特征。实际中,我们一般会使用十几个或者几十个卷积核来提取图像特征,进而来进行下一步的运算。 3)池化层 池化层又称为降采样层(DownsamplingLayer),作用是对感受域内的特征进行筛选,提取区域内最具代表性的特征,能够有效地降低输出特征尺度,进而减少模型所需要的参数量。 按操作类型通常分为:最大池化(MaxPooling)、平均池化(AveragePooling)求和池化(SumPooling)它们分别提取感受域内最大、平均与总和的特征值作为输出,最常用的是最大池 4)全连接层 全连接层(FullConnectedLayer)即当前层每个神经元都和下一层所有的神经元相连。负责对卷积神经网络学习提取到的特征进行汇总,将多维的特征输入映射为二维的特征输出,高维表示样本批次,低位常常对应任务目标。 5)激活函数 激活层(ActivationLayer)负责对卷积层抽取的特征进行激活,由于卷积操作是由输入矩阵与卷积核矩阵进行相差的线性变化关系,需要激活层对其进行非线性的映射主要由激活函数组成,即在卷积层输出结果的基础上嵌套一个非线性函数,让输出的特征图具有非线性关系。 激活函数本质是一个数学函数作用: 常用的激活函数:Sigmoid函数,Tanh函数,ReLU函数 特殊的激活函数:SoftMax函数,线性激活函数。 2,案例(办公室基于视觉的位置识别) CNN卷积LeNet-5 分类小案例(办公室位置识别)_卖香油的少掌柜的博客-CSDN博客项目git 代码:https://github.com/Boris-2021/Location_awareness-.git流程图架构图数据集的收集分五类地点:正门口前台前廊道。男厕所门前。资料室门前廊道。会议室门前廊道。办公室B区门前廊道。收集数量计划:站立姿势竖直拍摄方向一点365度,50张照片5点共250张照片一个地点一个数据集文件夹数据处理及拆分创建图像处理类:clas...https://blog.csdn.net/qq_58832911/article/details/120705059?spm=1001.2014.3001.55013,其他经典卷积网络的算法: LeNet(经典的、入门级网络): LeNet-5 是由LeCun 提出的一种用于识别手写数字和机器印刷字符的卷积神 经网络(Convolutional Neural Network,CNN),其命名来源于作者 LeCun 的名 字,5则是其研究成果的代号,在 LeNet-5 之前还有 LeNet-4 和 LeNet-1 鲜为人知。 LeNet-5 阐述了图像中像素特征之间的相关性能够由参数共享的卷积操作所提 取,同时使用卷积、下采样(池化)和非线性映射这样的组合结构,是当前流行 的大多数深度图像识别网络的基础。 AlexNet: 在 1998 年出现 LeNet 以后,深度学习并没有太多的突破。一直沉寂到 2012 年,AlexNet 横空出世,将深度学习重新带入大家视线,并开启了深度学习的黄 金时代,为什么是 2012 年?一是数据,之前并没有大规模的数据进行充分的训练, 应用于更广泛的任务,2007 年李飞飞创建了 ImageNet;二是计算,之前的硬件 条件限制了,无法进行大规模的训练,而现在有了性能强大的 GPU 的加成;三 就是 AlexNet 本身很优秀,给后来的网络奠定了一个很好的基础。 除去下采样(池化层)和局部响应规范化操作(Local Responsible Normalization, LRN),AlexNet 一共包含 8 层,前 5 层由卷积层组成,而剩下的 3 层为全连接层。网络结构分为上下两层,分别对应两个 GPU 的操作过程,除了 中间某些层(C3卷积层和F6−8全连接层会有 GPU 间的交互),其他层两个 GPU 分别计算结 果。最后一层全连接层的输出作为 softmax 的输入,得到 1000 个图 像分类标签对应的概率值。除去 GPU 并行结构的设计,AlexNet 网络结构与 LeNet 十分相似。 VGGNet: 模型小结 整个网络都使用了同样大小的卷积核尺寸 3×3 和最大池化尺寸 2×2。 Ø 1×1 卷积的意义主要在于线性变换,而输入通道数和输出通道数不变,没 有发生降维。 两个 3×3 的卷积层串联相当于 1 个5×5 的卷积层,感受野大小为 5×5。 同样地,3 个 3 ×3 的卷积层串联的效果则相当于 1 个 7 ×7 的卷积层。这 样的连接方式使得网络参数量更小,而且多层的激活函数令网络对特征的学 习能力更强。 问题出现,一层一层卷积堆叠,VGG 是集大成者,但是之后很难再进一步,继续简单增 加网络层数会遇到问题,更深的网络更难训练同时参数量也在不断增长。 GoogLeNet : 则从另一个维度来增加网络能力,每单元有许多层并行计算,让网络更 宽了,基本单元如下 ResNet: 深度卷积网络整合了低中高不同层次的特征,特征的层次可以靠加深网络的 层次来丰富。从而,在构建卷积网络时,网络的深度越高,可抽取的特征层次就越 丰富。所以一般我们会倾向于使用更深层次的网络结构,以便取得更高层次的特 征。 但是在使用深层次的网络结构时我们会遇到两个问题,梯度消失,梯度爆炸 问题和网络退化的问题。 但是当使用更深层的网络时,会发生梯度消失、爆炸问题,这个问题很大程 度通过标准的初始化和正则化层来基本解决,这样可以确保几十层的网络能够收 敛,但是随着网络层数的增加,梯度消失或者爆炸的问题仍然存在。 还有一个问题就是网络的退化,举个例子,假设已经有了一个最优化的网络 结构,是 18 层。当我们设计网络结构的时候,我们并不知道具体多少层次的网 络时最优化的网络结构,假设设计了 34 层网络结构。那么多出来的 16 层其实是 冗余的,我们希望训练网络的过程中,模型能够自己训练这五层为恒等映射,也就 是经过这层时的输入与输出完全一样。但是往往模型很难将这 16 层恒等映射 的参数学习正确,那么就一定会不比最优化的 18 层网络结构性能好,这就是随 着网络深度增加,模型会产生退化现象。它不是由过拟合产生的,而是由冗余的网 络层学习了不是恒等映射的参数造成的。 ResNet 的思想是假设我们涉及一个网络层,存在最优化的网络层次,那么往往 我们设计的深层次网络是有很多网络层为冗余层的。那么我们希望这些冗余层能 够完成恒等映射,保证经过该恒等层的输入和输出完全相同。具体哪些层是恒等层,这个会有网络训练的时候自己判断出来。将原网络的几层改成一个残差块。下 面是这个 resnet 的网络结构。 残差网络结构 h(x)=F(x)+x 代替原来的没有 shortcut 连接的 h(x)=x,这样更新冗 余层的参数时需要学习 F(x)=0 比学习 h(x)=x 要容易得多。而 shortcut 连接的结构 也保证了反向传播更新参数时,很难有梯度为 0 的现象发生,不会导致梯度消失。并 且,通过引入残差,identity 恒等映射,相当于一个梯度高速通道,可以容易 地训练避免梯度消失的问题,所以可以得到很深的网络,网络层数由 GoogLeNet 的 22 层到了 ResNet 的 152 层。 SENet:(不展开说了) 各个网络在 ImageNet 上的 Top5 准确率总结表如下图,可以看到,ImageNet 上 的分类错误率逐年降低,并且已经低于人类的错误率(5.1%)。 细想BP算法,CNN(卷积神经网络)我们会发现,他们的输出都是只考虑前一个输入的影响而不考虑其它时刻输入的影响, 比如简单的猫,狗,手写数字等单个物体的识别具有较好的效果。 但是, 对于一些与时间先后有关的, 比如视频的下一时刻的预测,文档前后文内容的预测等,这些算法的表现就不尽如人意了。因此, RNN就应运而生了。 RNN是一种特殊的神经网络结构, 它是根据"人的认知是基于过往的经验和记忆"这一观点提出的. 它与DNN,CNN不同的是: 它不仅考虑前一时刻的输入,而且赋予了网络对前面的内容的一种'记忆'功能. RNN之所以称为循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。 2,案例(rnn预测风电出力) RNN 做回归预测时,滑动窗口预测实例:(预测风电出力)_卖香油的少掌柜的博客-CSDN博客为什么使用rnn模型时,需要用到滑动窗口预测所有数据: 由于RNN模型,是之前的输入会对后来的输入样本的预测结果有影响。所以训练模型时候,在网络构建中定义的输入尺寸,在这里定义了输入的样本数是 TIME_STEP 个,所以预测时,也要用相同的尺寸,预测出相应尺寸的结果。 如果这段话你听的不太明白你需要在深入理解一下RNN循环神经网络的原理。参考:史上最详细循环神经网络讲解(RNN/LSTM/GRU) - 知乎RNN 循环神经网络 回归 - 简书...https://blog.csdn.net/qq_58832911/article/details/120670635?spm=1001.2014.3001.55013,扩展LSTM算法。 和RNN不同的是: RNN中,就是个简单的线性求和的过程. 而LSTM可以通过“门”结构来去除或者增加“细胞状态”的信息,实现了对重要内容的保留和对不重要内容的去除. 通过Sigmoid层输出一个0到1之间的概率值,描述每个部分有多少量可以通过,0表示“不允许任务变量通过”,1表示“运行所有变量通过 ”. 用于遗忘的门叫做"遗忘门", 用于信息增加的叫做"信息增加门",最后是用于输出的"输出门". 这里就不展开介绍了 刚才介绍了对抗网络其实是一个D和一个G组成的,那么G和D之间是如何对抗的呢? 先看以下一个场景: D是银行的Teller G是一个Crook,专门制造假币。 那么其中的对抗过程就是,对于D来说,不断的学习,来进行真币的判断,G则是不断学习,制造更像真币的假币,来欺骗D,而最后的训练结果则是——D可以很好的区分真假币,但是G制造了“如假包换”的假币,而D分辨不出。 而对于对抗网络来说,D和G都是一个神经网络模型——MLP,那么D(判别模型)的输出是一个常量,这个常量表示“来自真币”的可能性。而对于G的输出则是一组向量,而这个向量表示的就是”假币”。 案例(声音合成) 文字合成语音的方法 -两个离线包,百度接口,一个开源项目_卖香油的少掌柜的博客-CSDN博客目标是将我们输入的文本文字转换为语音。使用 pyttsx将文本转化为语音使用名为 pyttsx 的 python 包,你可以将文本转换为语音。直接使用 pip 就可以进行安装,命令:pip install pyttsx3 使用实例:import pyttsx3 as pyttsxengine = pyttsx.init()engine.say('你好吗')engine.runAndWait()使用 SpeechLib将文本...https://blog.csdn.net/qq_58832911/article/details/120868695?spm=1001.2014.3001.5501 哈哈,收集整理不易,请您鼓励,点赞,三连!!深度学习:
人工神经网络
卷积神经网络
RNN循环神经网络
对抗神经网络