- 1. 小结
- 1.1. 机器学习
- 1.1.1. Linear Regression
- 1.1.1.1. 1.线性回归
- 1.1.1.2. 2.过拟合、欠拟合如何解决
- 1.1.1.3. 3.LASSO回归(L1正则化)
- 1.1.1.4. 4.岭回归(L2正则化)
- 1.1.1.5. 5.ElasticNet回归(结合L1、L2正则化)
- 1.1.1.6. 6.补充
- 1.1.2. Classification algorithm
- 1.1.2.1. Logistic Regression
- 1.1.2.2. Naive Bayes
- 1.1.2.3. Desition Tree
- 1.1.2.4. SVM
- 1.1.2.4.1. 构造一个算法,把已知样本特征和分类情况做一个逻辑映射关系。构造SVM通常是用核函数进行构造。核函数的目的很单纯,在当前线性空间中样本是不可分的就映射到更高维空间中去,找到超平面,超平面方程。而且在更高维度上的超平面方程并没有实际增加维度变量,更高的这个维度只是像在解几何题里面使用的辅助线。
- 1.1.2.4.2. 在python中的Scikit-learn库中用到的是一个叫SVC的类,SVC是Support Vector Classification的缩写,即支持向量分类机。SVC所支持的核函数包括linea(线性核函数)、poly(多项式)、rbf(径向基核函数)、sigmoid(神经元激活核函数)、precomputed(自定义核函数),默认使用rbf函数。
- 1.1.2.4.3. 优缺点
- 1.1.2.5. Markov
- 1.1.2.6. genetic algorithm
- 1.1.2.7. KNN
- 1.1.2.7.1. KNN可以说是最简单的分类算法之一,同时,它也是最常用的分类算法之一,注意KNN算法是有监督学习中的分类算法
- 1.1.2.7.2. KNN的原理就是当预测一个新的值x的时候,根据它距离最近的K个点是什么类别来判断x属于哪个类别
- 1.1.2.7.3. KNN是一种非参的,惰性的算法模型
- 1.1.2.7.4. 优缺点
- 1.1.2.7.5. 何谓K近邻算法,即K-Nearest Neighbor algorithm,简称KNN算法,单从名字来猜想,可以简单粗暴的认为是:K个最近的邻居,当K=1时,算法便成了最近邻算法,即寻找最近的那个邻居。
- 1.1.2.7.6. 用官方的话来说,所谓K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例(也就是上面所说的K个邻居),这K个实例的多数属于某个类,就把该输入实例分类到这个类中。
- 1.1.3. Clustering
- 1.1.3.1. 1.K-means聚类
- 1.1.3.2. 2.Mean-Shift聚类
- 1.1.3.3. 3.Dbscan聚类
- 1.1.3.4. 4.层次聚类
- 1.1.3.5. 5.GMM_EM聚类
- 1.1.3.6. EM
- 1.1.3.6.1. 什么是EM算法
- 1.1.3.6.1.1. 最大期望算法(Expectation-maximization algorithm,又译为期望最大化算法),是在概率模型中寻找参数最大似然估计或者最大后验估计的算法,其中概率模型依赖于无法观测的隐性变量。
- 1.1.3.6.1.2. 最大期望算法经过两个步骤交替进行计算,
- 1.1.3.6.1.3. 第一步是计算期望(E),利用对隐藏变量的现有估计值,计算其最大似然估计值;
- 1.1.3.6.1.4. 第二步是最大化(M),最大化在E步上求得的最大似然值来计算参数的值。M步上找到的参数估计值被用于下一个E步计算中,这个过程不断交替进行。
- 1.1.3.6.1.5. 极大似然估计用一句话概括就是:知道结果,反推条件θ。
- 1.1.3.6.2. 采用 EM 算法求解的模型有哪些?
- 1.1.3.6.1. 什么是EM算法
- 1.1.4. Dimension reduction
- 1.1.1. Linear Regression
- 1.2. 深度学习
- 1.2.1. NN
- 1.2.2. CNN
- 1.2.3. RNN
- 1.2.4. GRU
- 1.2.5. LSTM
- 1.2.5.1. 什么是LSTM
- 1.2.5.2. 输入门
- 1.2.5.3. 遗忘门
- 1.2.5.4. 输出门
- 1.2.5.5. 候选记忆细胞
- 1.2.5.6. 记忆细胞
- 1.2.5.7. LSTM与GRU的区别
- 1.2.5.7.1. 1. 新的记忆都是根据之前状态及输入进行计算,但是GRU中有一个重置门控制之前状态的进入量,而在LSTM里没有类似门;
- 1.2.5.7.2. 2. 产生新的状态方式不同,LSTM有两个不同的门,分别是遗忘门(forget gate)和输入门(input gate),而GRU只有一种更新门(update gate);
- 1.2.5.7.3. 3. LSTM对新产生的状态可以通过输出门(output gate)进行调节,而GRU对输出无任何调节。
- 1.2.5.7.4. 4. GRU的优点是这是个更加简单的模型,所以更容易创建一个更大的网络,而且它只有两个门,在计算性上也运行得更快,然后它可以扩大模型的规模。
- 1.2.5.7.5. 5. LSTM更加强大和灵活,因为它有三个门而不是两个。
- 1.3. 强化学习
- 1.3.1. 什么是强化学习
- 1.3.1.1. 其他许多机器学习算法中学习器都是学得怎样做,而强化学习(Reinforcement Learning, RL)是在尝试的过程中学习到在特定的情境下选择哪种行动可以得到最大的回报。
在很多场景中,当前的行动不仅会影响当前的rewards,还会影响之后的状态和一系列的rewards。RL最重要的3个特定在于: - 1.3.1.2. 1. 基本是以一种闭环的形式;
- 1.3.1.3. 2. 不会直接指示选择哪种行动(actions);
- 1.3.1.4. 3. 一系列的actions和奖励信号(reward signals)都会影响之后较长的时间。
- 1.3.1.5. Agent可能做得好,也可能做的不好,环境始终都会给它反馈,agent会尽量去做对自身有利的决策,通过反反复复这样的一个循环,agent会越来越做的好,就像孩子在成长过程中会逐渐明辨是非,这就是强化学习。
- 1.3.1.1. 其他许多机器学习算法中学习器都是学得怎样做,而强化学习(Reinforcement Learning, RL)是在尝试的过程中学习到在特定的情境下选择哪种行动可以得到最大的回报。
- 1.3.2. 强化学习模型
- 1.3.3. 强化学习和监督学习、无监督学习的区别
- 1.3.1. 什么是强化学习
- 1.4. 迁移学习
- 1.4.1. 3.1 迁移学习基础 / 61
- 1.4.2. 3.1.1 应用场景 / 62
- 1.4.3. 3.1.2 概念介绍 / 62
- 1.4.4. 3.2 迁移学习方法论 / 63
- 1.4.5. 3.2.1 三类常见算法 / 63
- 1.4.6. 3.2.2 迁移的实现方法 / 64
- 1.4.7. 3.3 少量有标签样本的迁移方案 / 65
- 1.4.8. 3.3.1 TrAdaBoost模型 / 65
- 1.4.8.1. 1.用来解决什么问题:训练集和样本集分布不同
- 1.4.8.2. 2.AdaBoost算法基本思想:当一个样本被错误分类时,算法就会认为这个样本是难分类的,就会适当增加其样本权重,下次训练时这个样本被分错的概率就会降低
- 1.4.8.3. 3.TrAdaBoost是由AdaBoost演变而来的,该算法对训练集样本权重进行调整。对于目标域样本,如果被错误分类,根据目标域样本的分类错误率进行调整增加其权重,
使得下次训练时更加关注这些被错分的目标域样本。对于源域样本,当其被错误分类后,TrAdaBoost算法则认为它们是与目标数据不同分布,因此会降低其权重。 - 1.4.8.4. 4.原始的TrAdaboost通过提升多个弱分类器,使用后一半的弱分类器进行综合投票,得出最后的决策。
本书中的TrAdaboost算法是采用LR模型作为基模型,并使用单模型进行最终的预测,使得最终的模型可以保留线性模型的解释性,以适用更多实际的业务 - 1.4.8.5. 缺点:目标域上一定要有标签的样本,否则无法进行权重转移
- 1.4.8.6. 在没有标签的时候,我们就可以用第二类算法,联合分布适配 JDA
- 1.4.9. 3.3.2 跨场景迁移模型 / 67
- 1.4.10. 3.4 无标签样本迁移之JDA / 76
- 1.4.11. 3.4.1 JDA模型 / 76
- 1.4.12. 3.4.2 模型应用 / 79
- 1.4.13. 3.5 无标签样本迁移之DTELM / 80
- 1.4.14. 3.5.1 ELM模型 / 81
- 1.4.15. 3.5.2 DTELM模型 / 82
- 1.4.16. 3.5.3 模型应用 / 84
- 1.4.17. 3.6 迁移样本筛选方案 / 88
- 1.4.18. 3.6.1 背景介绍 / 88
- 1.4.19. 3.6.2 算法框架概览 / 88
- 1.4.20. 3.6.3 搭建融合框架 / 89
- 1.4.21. 3.7 本章小结 / 93
- 1.5. 推荐系统
- 1.6. 社交网络
- 1.7. 风控模型
- 1.8. 网络爬虫
- 1.9. 文本挖掘
- 1.10. APP反编译
- 1.11. SQL/Tableau
- 1.1. 机器学习
技术小结
1. 小结
1.1. 机器学习
1.1.1. Linear Regression
1.1.1.1. 1.线性回归
1.1.1.1.1. 线性回归是回归分析的一种
1.1.1.1.1.1. 假设目标值(因变量)与特征值(自变量)之间线性相关(即满足一个多元一次方程,如:f(x)=w1x1+…+wnxn+b.)。
1.1.1.1.1.2. 然后构建损失函数。
1.1.1.1.1.3. 最后通过令损失函数最小来确定参数。(最关键的一步)
1.1.1.1.2. 损失函数
1.1.1.1.2.1. MSE
1.1.1.1.2.2. 均方误差是回归任务中最常用的性能度量
1.1.1.1.3. 如何确定a、b
1.1.1.1.3.1. 最小二乘法
1.1.1.1.3.2. 梯度下降法
1.1.1.1.3.3. 正规方程
1.1.1.2. 2.过拟合、欠拟合如何解决
1.1.1.2.1. 使用正则化项,也就是给loss function加上一个参数项,正则化项有L1正则化、L2正则化、ElasticNet。
1.1.1.2.2. 加入这个正则化项好处:
1.1.1.2.2.1. - 控制参数幅度,不让模型“无法无天”。
1.1.1.2.2.2. - 限制参数搜索空间
1.1.1.2.2.3. - 解决欠拟合与过拟合的问题。
1.1.1.2.3. 什么是L1正则化(LASSO回归)
1.1.1.2.3.1. L1 正则化公式也很简单,直接在原来的损失函数基础上加上权重参数的绝对值:
1.1.1.2.3.2. L1:权重参数的绝对值
1.1.1.2.4. 什么是L2正则化(岭回归)
1.1.1.2.4.1. L2 正则化公式非常简单,直接在原来的损失函数基础上加上权重参数的平方和:
1.1.1.2.4.2. L2:权重参数的平方和
1.1.1.2.4.3. 什么场景下用L2正则化
1.1.1.2.4.3.1. 只要数据线性相关,用LinearRegression拟合的不是很好,需要正则化,可以考虑使用岭回归(L2), 如果输入特征的维度很高,而且是稀疏线性关系的话, 岭回归就不太合适,考虑使用Lasso回归。
1.1.1.2.5. LASSO回归和Ridge回归是为了解决线性回归中的两类问题
1.1.1.2.5.1. 1.过拟合问题;
1.1.1.2.5.2. 2.通过正规方程方法求解参数过程中出现的不可逆问题。
1.1.1.3. 3.LASSO回归(L1正则化)
1.1.1.3.1. Lasso回归加入w的L1范数作为惩罚项,以确定系数中的数目较多的无用项(零值):
1.1.1.3.2.
1.1.1.3.3. L1范式是稀疏的,所以可以进行特征筛选
1.1.1.4. 4.岭回归(L2正则化)
1.1.1.4.1. Ridge回归最先用来处理特征多于样本数量的情况,现在也用于在估计中加入偏差,从而得到更好的估计,它通过引入惩罚项来较少不重要的参数,在统计学上也称为缩减(shrinkage)
1.1.1.4.2. 岭(Ridge)回归再普通最小二乘法的损失函数中增加了额外的缩减惩罚项,以限制L2范数的平方项。
1.1.1.4.3.
1.1.1.5. 5.ElasticNet回归(结合L1、L2正则化)
1.1.1.5.1. ElasticNet将Lasso和Ridge组成一个具有两种惩罚因素的单一模型:一个与L1范数成比例,另外一个与L2范数成比例。使用这种方式方法所得到的模型就像纯粹的Lasso回归一样稀疏,但同时具有与岭回归提供的一样的正则化能力。它的损失函数是:
1.1.1.5.2.
1.1.1.5.3. ElasticNet回归的使用场景
1.1.1.5.3.1. ElasticNet在我们发现用Lasso回归太过(太多特征被稀疏为0),而岭回归也正则化的不够(回归系数衰减太慢)的时候,可以考虑使用ElasticNet回归来综合,得到比较好的结果。
1.1.1.6. 6.补充
1.1.1.6.1. 用线性回归模型拟合数据之前,首先要求数据应符合或近似符合正态分布
1.1.1.6.2. 关于三种回归的目标函数
1.1.1.6.2.1.
1.1.2. Classification algorithm
1.1.2.1. Logistic Regression
1.1.2.1.1. 模型介绍
1.1.2.1.1.1. Logistic Regression 虽然被称为回归,但其实际上是分类模型,并常用于二分类。Logistic Regression 因其简单、可并行化、可解释强深受工业界喜爱。
1.1.2.1.1.2. Logistic 回归的本质是:假设数据服从这个分布,然后使用极大似然估计做参数的估计。
1.1.2.1.2. 优缺点
1.1.2.1.2.1. 优点
1.1.2.1.2.1.1. 1. 实现简单,广泛的应用于工业问题上;
1.1.2.1.2.1.2. 2. 分类时计算量非常小,速度很快,存储资源低;
1.1.2.1.2.1.3. 3. 便利的观测样本概率分数;
1.1.2.1.2.1.4. 4. 对逻辑回归而言,多重共线性并不是问题,它可以结合L2正则化来解决该问题;
1.1.2.1.2.1.5. 5. 计算代价不高,易于理解和实现。
1.1.2.1.2.2. 缺点
1.1.2.1.2.2.1. 1. 当特征空间很大时,逻辑回归的性能不是很好;
1.1.2.1.2.2.2. 2. 容易欠拟合,一般准确度不太高;
1.1.2.1.2.2.3. 3. 不能很好地处理大量多类特征或变量;
1.1.2.1.2.2.4. 4. 只能处理两分类问题(在此基础上衍生出来的softmax可以用于多分类),且必须线性可分;
1.1.2.1.2.2.5. 5. 对于非线性特征,需要进行转换。
1.1.2.1.3. 线性回归做分类因为考虑了所有样本点到分类决策面的距离,所以在两类数据分布不均匀的时候将导致误差非常大;LR和SVM克服了这个缺点,其中LR将所有数据采用sigmod函数进行了非线性映射,使得远离分类决策面的数据作用减弱;SVM直接去掉了远离分类决策面的数据,只考虑支持向量的影响。
1.1.2.2. Naive Bayes
1.1.2.2.1. 基本思想
1.1.2.2.1.1. (1)已知类条件概率密度参数表达式和先验概率。
1.1.2.2.1.2. (2)利用贝叶斯公式转换成后验概率。
1.1.2.2.1.3. (3)根据后验概率大小进行决策分类。
1.1.2.2.2. 优缺点
1.1.2.2.2.1. 朴素贝叶斯的优点 :
1.1.2.2.2.1.1. (1)所需估计的参数少,对于缺失数据不敏感,算法也比较简单,常用于文本分类。
1.1.2.2.2.1.2. (2)朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。
1.1.2.2.2.1.3. (3)对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其是数据量超出内存时,我们可以一批批的去增量训练。
1.1.2.2.2.2. 朴素贝叶斯的缺点 :
1.1.2.2.2.2.1. (1)假设属性之间相互独立,这往往并不成立。(喜欢吃番茄、鸡蛋,却不喜欢吃番茄炒蛋,这种情况很少的)。
1.1.2.2.2.2.2. (2)需要知道先验概率。且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。
1.1.2.2.2.2.3. (3)分类决策错误率。理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。
1.1.2.2.2.2.4. (4)由于我们是通过先验和数据来决定后验的概率从而决定分类,所以分类决策存在一定的错误率。
1.1.2.2.2.2.5. (5)对输入数据的表达形式很敏感。
1.1.2.3. Desition Tree
1.1.2.3.1. Desition Tree
1.1.2.3.1.1. 决策树是一种简单但广泛使用的分类器,它通过训练数据构建决策树,对未知的数据进行分类。决策树的每个内部节点表示在一个属性上的测试,每个分枝代表该测试的一个输出,而每个树叶结点存放着一个类标号。在决策树算法中,ID3基于信息增益作为属性选择的度量,C4.5基于信息增益比作为属性选择的度量,CART基于基尼指数作为属性选择的度量。
1.1.2.3.1.2. 构造整棵树的思路如下:
1.1.2.3.1.2.1. 第一步,找到信息增益最大的字段A和信息增益最大的切分点v
1.1.2.3.1.2.2. 第二步,决定根节点的字段A和切分点v
1.1.2.3.1.2.3. 第三步,把字段A拿走,再从第一步开始找
1.1.2.3.1.3. 优缺点
1.1.2.3.1.3.1. 决策树的优点:
(1)不需要任何领域知识或参数假设。
(2)适合高维数据。
(3)简单易于理解。
(4)短时间内处理大量数据,得到可行且效果较好的结果。
1.1.2.3.1.3.2. 决策树的缺点:
(1)对于各类别样本数量不一致数据,信息增益偏向于那些具有更多数值的特征。
(2)易于过拟合。
(3)忽略属性之间的相关性。
1.1.2.3.2. Random Forest
1.1.2.3.2.1. 随机森林算法是一种并行性比较好的算法规则,它是相当于有很多决策树,就避免出现决策树的过拟合,很多棵树就构成了森林。树与树之间无关联,是Bagging的一个扩展,随机森林在决策树为基分类器进行集成的基础上,在决策树的训练过程中引入随机属性选择。
1.1.2.3.2.2. 优缺点
1.1.2.3.2.2.1. 随机森林的优点:
(1)可以处理高维数据,模型的泛化能力较强
(2)训练模型时速度快,成并行化方式,即树之间相互独立
(3)模型可以处理不平衡数据,平衡误差
(4)最终训练结果,可以对特种额排序,选择比较重要的特征
(5)机森林有袋外数据(OOB),因此不需要单独划分交叉验证集
(6)对缺失值、异常值不敏感
(7)模型训练结果准确度高,相对Bagging能够收敛于更小的泛化误差
1.1.2.3.2.2.2. 随机森林的缺点:
(1)当数据噪声比较大时,会产生过拟合现象
(2)对有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响。
1.1.2.3.3. GBDT
1.1.2.3.3.1. GBDT(Gradient Boosting Decision Tree),全名叫梯度提升决策树,使用的是Boosting的思想。
1.1.2.3.3.2. Boosting思想
1.1.2.3.3.2.1. Boosting方法训练基分类器时采用串行的方式,各个基分类器之间有依赖。它的基本思路是将基分类器层层叠加,每一层在训练的时候,对前一层基分类器分错的样本,给予更高的权重。测试时,根据各层分类器的结果的加权得到最终结果。
1.1.2.3.3.2.2. Bagging与Boosting的串行训练方式不同,Bagging方法在训练过程中,各基分类器之间无强依赖,可以进行并行训练。
1.1.2.3.3.3. GBDT的原理很简单,就是所有弱分类器的结果相加等于预测值,然后下一个弱分类器去拟合误差函数对预测值的残差(这个残差就是预测值与真实值之间的误差)。当然了,它里面的弱分类器的表现形式就是各棵树。
1.1.2.3.3.4. 优缺点
1.1.2.3.3.4.1. 优点
1. 预测阶段的计算速度快,树与树之间可并行化计算。
注意这里是树与树之间
2. 在分布稠密的数据集上,泛化能力和表达能力都很好,这使得GBDT在Kaggle的众多竞赛中,经常名列榜首。
3. 采用决策树作为弱分类器使得GBDT模型具有较好的解释性和鲁棒性,能够自动发现特征间的高阶关系,并且也不需要对数据进行特殊的预处理如归一化等。
1.1.2.3.3.4.2. 缺点
1. GBDT在高维稀疏的数据集上,表现不如支持向量机或者神经网络。
2. GBDT在处理文本分类特征问题上,相对其他模型的优势不如它在处理数值特征时明显。
3. 训练过程需要串行训练,只能在决策树内部采用一些局部并行的手段提高训练速度。
1.1.2.3.4. XGBoost
1.1.2.3.4.1. 说到XGBoost,不得不提GBDT(Gradient Boosting Decision Tree)。因为XGBoost本质上还是一个GBDT,但是力争把速度和效率发挥到极致,所以叫X (Extreme) GBoosted。包括前面说过,两者都是boosting方法。
1.1.2.3.4.1.1. 传统的GBDT在每轮迭代时使用全部的数据,XGBoost则采用了与随机森林相似的策略,支持对数据进行采样。
1.1.2.3.4.2. 优缺点
1.1.2.3.4.2.1. 优点
在使用CART作为基分类器时,XGBoost显式地加入了正则项来控制模 型的复杂度,有利于防止过拟合,从而提高模型的泛化能力。
GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代 价函数进行二阶泰勒展开,可以同时使用一阶和二阶导数。
传统的GBDT采用CART作为基分类器,XGBoost支持多种类型的基分类器,比如线性分类器。
传统的GBDT没有设计对缺失值进行处理,XGBoost能够自动学习出缺失值的处理策略。
XGBoost使用了一阶和二阶偏导, 二阶导数有利于梯度下降的更快更准. 使用泰勒展开取得函数做自变量的二阶导数形式, 可以在不选定损失函数具体形式的情况下, 仅仅依靠输入数据的值就可以进行叶子分裂优化计算, 本质上也就把损失函数的选取和模型算法优化/参数选择分开了. 这种去耦合增加了XGBoost的适用性, 使得它按需选取损失函数, 可以用于分类, 也可以用于回归。
补充
精度更高: GBDT 只用到一阶泰勒展开,而 XGBoost 对损失函数进行了二阶泰勒展开。XGBoost 引入二阶导一方面是为了增加精度,另一方面也是为了能够自定义损失函数,二阶泰勒展开可以近似大量损失函数;
灵活性更强: GBDT 以 CART 作为基分类器,XGBoost 不仅支持 CART 还支持线性分类器,使用线性分类器的 XGBoost 相当于带 和 正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题)。此外,XGBoost 工具支持自定义损失函数,只需函数支持一阶和二阶求导;
正则化: XGBoost 在目标函数中加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、叶子节点权重的 范式。正则项降低了模型的方差,使学习出来的模型更加简单,有助于防止过拟合,这也是XGBoost优于传统GBDT的一个特性。
Shrinkage(缩减): 相当于学习速率。XGBoost 在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。传统GBDT的实现也有学习速率;
列抽样: XGBoost 借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算。这也是XGBoost异于传统GBDT的一个特性;
缺失值处理: 对于特征的值有缺失的样本,XGBoost 采用的稀疏感知算法可以自动学习出它的分裂方向;
XGBoost工具支持并行: boosting不是一种串行的结构吗?怎么并行的?注意XGBoost的并行不是tree粒度的并行,XGBoost也是一次迭代完才能进行下一次迭代的(第次迭代的代价函数里包含了前面次迭代的预测值)。XGBoost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),XGBoost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。
可并行的近似算法: 树节点在进行分裂时,我们需要计算每个特征的每个分割点对应的增益,即用贪心法枚举所有可能的分割点。当数据无法一次载入内存或者在分布式情况下,贪心算法效率就会变得很低,所以XGBoost还提出了一种可并行的近似算法,用于高效地生成候选的分割点。
1.1.2.3.4.2.2. 缺点
虽然利用预排序和近似算法可以降低寻找最佳分裂点的计算量,但在节点分裂过程中仍需要遍历数据集;
预排序过程的空间复杂度过高,不仅需要存储特征值,还需要存储特征对应样本的梯度统计值的索引,相当于消耗了两倍的内存。
1.1.2.3.5. LightGBM
1.1.2.3.5.1. LightGBM (Light Gradient Boosting Machine)是一个实现GBDT算法的框架,支持高效率的并行训练。
1.1.2.3.5.2. 优缺点
1.1.2.3.5.2.1. 优点
- 更快的训练速度
- 更低的内存消耗
- 更好的准确率
- 分布式支持,可以快速处理海量数据
1.1.2.3.5.2.2. 缺点
可能会长出比较深的决策树,产生过拟合。因此LightGBM在Leaf-wise之上增加了一个最大深度限制,在保证高效率的同时防止过拟合;
Boosting族是迭代算法,每一次迭代都根据上一次迭代的预测结果对样本进行权重调整,所以随着迭代不断进行,误差会越来越小,模型的偏差(bias)会不断降低。由于LightGBM是基于偏差的算法,所以会对噪点较为敏感;
在寻找最优解时,依据的是最优切分变量,没有将最优解是全部特征的综合这一理念考虑进去;
1.1.2.4. SVM
1.1.2.4.1. 构造一个算法,把已知样本特征和分类情况做一个逻辑映射关系。构造SVM通常是用核函数进行构造。核函数的目的很单纯,在当前线性空间中样本是不可分的就映射到更高维空间中去,找到超平面,超平面方程。而且在更高维度上的超平面方程并没有实际增加维度变量,更高的这个维度只是像在解几何题里面使用的辅助线。
1.1.2.4.2. 在python中的Scikit-learn库中用到的是一个叫SVC的类,SVC是Support Vector Classification的缩写,即支持向量分类机。SVC所支持的核函数包括linea(线性核函数)、poly(多项式)、rbf(径向基核函数)、sigmoid(神经元激活核函数)、precomputed(自定义核函数),默认使用rbf函数。
1.1.2.4.3. 优缺点
1.1.2.4.3.1. 支持向量机的优点
1.1.2.4.3.1.1. (1)可以解决小样本下机器学习的问题。
1.1.2.4.3.1.2. (2)提高泛化性能。
1.1.2.4.3.1.3. (3)可以解决高维、非线性问题。超高维文本分类仍受欢迎。
1.1.2.4.3.1.4. (4)避免神经网络结构选择和局部极小的问题。
1.1.2.4.3.2. 支持向量机的缺点
1.1.2.4.3.2.1. (1)对缺失数据敏感。
1.1.2.4.3.2.2. (2)内存消耗大,难以解释。
1.1.2.4.3.2.3. (3)运行和调差略烦人。
1.1.2.5. Markov
1.1.2.5.1. 要说隐马尔科夫链,就得先讲马尔科夫链。马尔科夫链的核心是,在给定当前信息或知识的情况下,观察对象过去的历史状态对于预测将来是无关的。也就是说在观察一个系统变化时候,它下一个状态(第n+1个状态)只要观察当前状态(第n个状态)即可。
1.1.2.5.1.1. 在一些资料上会看到贝叶斯信念网络的模型思维方式有些接近,区别在于,隐马尔科夫链比贝叶斯信念网络更为简化,或者隐马尔科夫是其特例。
1.1.2.5.1.2. 隐马尔科夫链是一个双重的随机过程,状态转移之间是一个随机过程,状态和输出也是一个随机过程。一般用来做语音识别,文本分析。后面还有一些维特比算法、前向算法就此跳过了。
1.1.2.5.2. 优缺点
1.1.2.5.2.1. 隐马尔科夫模型的优点:
1.1.2.5.2.1.1. 隐马模型一个最大的缺点就是由于其输出独立性假设,导致其不能考虑上下文的特征,限制了特征的选择,而最大熵隐马模型则解决了这一问题,可以任意的选择特征,但由于其在每一节点都要进行归一化,所以只能找到局部的最优值,同时也带来了标记偏见的问题(label bias),即凡是训练语料中未出现的情况全都忽略掉。
1.1.2.5.2.2. 隐马尔科夫模型的缺点:
1.1.2.5.2.2.1. (1)HMM只依赖于每一个状态和它对应的观察对象:序列标注问题不仅和单个词相关,而且和观察序列的长度,单词的上下文,等等相关。
1.1.2.5.2.2.2. (2)目标函数和预测目标函数不匹配:HMM学到的是状态和观察序列的联合分布P(Y,X),而预测问题中,我们需要的是条件概率P(Y|X)。
1.1.2.6. genetic algorithm
1.1.2.6.1. 遗传算法是一种借鉴生物界的进化规律(适者生存)演化而来的随机化搜索方法。
1.1.2.6.2. 算法过程步骤:
1.1.2.6.2.1. (1)基因编码。尝试对一些个体基因进行描述,构造这些基因的结构,有点像确定自变量的过程
1.1.2.6.2.2. (2)设计初始群体,在这个环节需要构造出一个种群出来,这些种群有很多个生物个体但是基因都不相同
1.1.2.6.2.3. (3)适应度计算(剪枝),对不太适应的个体进行裁剪
1.1.2.6.2.4. (4)产生下一代。这个部分有三种方法:直接选择,基因重组,基因突变;然后再回到第三步进行循环产生,产生下一代,这样一代一代找下去,直到找到最优解为止
1.1.2.6.3. 遗传算法可以很好的应用到别的领域中去,比如TSP问题即旅行商问题,也叫货郎担问题,九宫问题(八数码问题)、生产调度问题、背包问题即NP问题。
1.1.2.6.4. 优缺点
1.1.2.6.4.1. 遗传算法的优点:
1.1.2.6.4.1.1. (1)与问题领域无关切快速随机的搜索能力。
1.1.2.6.4.1.2. (2)搜索从群体出发,具有潜在的并行性,可以进行多个个体的同时比较,robust.
1.1.2.6.4.1.3. (3)搜索使用评价函数启发,过程简单
1.1.2.6.4.1.4. (4)使用概率机制进行迭代,具有随机性。
1.1.2.6.4.1.5. (5)具有可扩展性,容易与其他算法结合。
1.1.2.6.4.2. 遗传算法的缺点:
1.1.2.6.4.2.1. (1)遗传算法的编程实现比较复杂,首先需要对问题进行编码,找到最优解之后还需要对问题进行解码
1.1.2.6.4.2.2. (2)另外三个算子的实现也有许多参数,如交叉率和变异率,并且这些参数的选择严重影响解的品质,而目前这些参数的选择大部分是依靠经验.
1.1.2.6.4.2.3. (3)没有能够及时利用网络的反馈信息,故算法的搜索速度比较慢,要得要较精确的解需要较多的训练时间。
1.1.2.6.4.2.4. (4)算法对初始种群的选择有一定的依赖性,能够结合一些启发算法进行改进。
1.1.2.6.4.2.5. (5)算法的并行机制的潜在能力没有得到充分的利用,这也是当前遗传算法的一个研究热点方向。
1.1.2.7. KNN
1.1.2.7.1. KNN可以说是最简单的分类算法之一,同时,它也是最常用的分类算法之一,注意KNN算法是有监督学习中的分类算法
1.1.2.7.2. KNN的原理就是当预测一个新的值x的时候,根据它距离最近的K个点是什么类别来判断x属于哪个类别
1.1.2.7.3. KNN是一种非参的,惰性的算法模型
1.1.2.7.4. 优缺点
1.1.2.7.4.1. KNN算法优点
1.1.2.7.4.1.1. 简单易用,相比其他算法,KNN算是比较简洁明了的算法。即使没有很高的数学基础也能搞清楚它的原理。
1.1.2.7.4.1.2. 模型训练时间快,上面说到KNN算法是惰性的,这里也就不再过多讲述。
1.1.2.7.4.1.3. 预测效果好。
1.1.2.7.4.1.4. 对异常值不敏感
1.1.2.7.4.2. KNN算法缺点
1.1.2.7.4.2.1. 对内存要求较高,因为该算法存储了所有训练数据
1.1.2.7.4.2.2. 预测阶段可能很慢
1.1.2.7.4.2.3. 对不相关的功能和数据规模敏感
1.1.2.7.5. 何谓K近邻算法,即K-Nearest Neighbor algorithm,简称KNN算法,单从名字来猜想,可以简单粗暴的认为是:K个最近的邻居,当K=1时,算法便成了最近邻算法,即寻找最近的那个邻居。
1.1.2.7.6. 用官方的话来说,所谓K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例(也就是上面所说的K个邻居),这K个实例的多数属于某个类,就把该输入实例分类到这个类中。
1.1.3. Clustering
1.1.3.1. 1.K-means聚类
1.1.3.1.1. 1.算法介绍
1.1.3.1.1.1. kmeans算法又名k均值算法,K-means算法中的k表示的是聚类为k个簇,means代表取每一个聚类中数据值的均值作为该簇的中心,或者称为质心,即用每一个的类的质心对该簇进行描述。
1.1.3.1.2. 2.算法思想
1.1.3.1.2.1. 先从样本集中随机选取 k个样本作为簇中心,并计算所有样本与这 k个“簇中心”的距离,对于每一个样本,将其划分到与其距离最近的“簇中心”所在的簇中,对于新的簇重新计算各个簇的新的“簇中心”,然后再继续距离知道簇中心不发生变化。
1.1.3.1.3. 3.优缺点
1.1.3.1.3.1. 优点:
1.1.3.1.3.2. 缺点:
1.1.3.1.3.2.1. 1.可能收敛到局部最小值,在大规模数据上收敛较慢;我们必须提前知道数据有多少类/组。
1.1.3.1.3.2.2. 2.要提前给K值
1.1.3.1.3.2.3. 3.K-Means算法对初始选取的聚类中心点是敏感的,不同的随机种子点得到的聚类结果完全不同,有时候需要多次选择初始聚类中心才能满足预期
1.1.3.1.3.2.4. 4.K-Means算法并不是适用所有的样本类型。它不能处理非球形簇、不同尺寸和不同密度的簇
1.1.3.1.3.2.5. 5.对异常点敏感
1.1.3.2. 2.Mean-Shift聚类
1.1.3.2.1. 1.算法介绍
1.1.3.2.1.1. Mean Shift算法,又称为均值漂移算法,Mean Shift的概念最早是由Fukunage在1975年提出的,在后来由Yizong Cheng对其进行扩充,主要提出了两点的改进:
1.1.3.2.1.2. 定义了核函数;
1.1.3.2.1.3. 增加了权重系数。
1.1.3.2.2. 2.算法思想
1.1.3.2.2.1. 均值漂移聚类是基于滑动窗口的算法,来找到数据点的密集区域。这是一个基于质心的算法,通过将中心点的候选点更新为滑动窗口内点的均值来完成,来定位每个组/类的中心点。然后对这些候选窗口进行相似窗口进行去除,最终形成中心点集及相应的分组。
1.1.3.2.3. 3.优缺点
1.1.3.2.3.1. 优点:
1.1.3.2.3.1.1. (1)不同于K-Means算法,均值漂移聚类算法不需要我们知道有多少类/组。
1.1.3.2.3.1.2. (2)基于密度的算法相比于K-Means受均值影响较小。
1.1.3.2.3.2. 缺点:
1.1.3.2.3.2.1. (1)窗口半径r的选择可能是不重要的。
1.1.3.2.3.2.2. (2)聚类结果取决于带宽的设置,带宽设置的太小,收敛太慢,簇类个数过多;带宽设置的太大,一些簇类可能会丢失。
1.1.3.2.3.2.3. (3)对于较大的特征空间,计算量非常大。
1.1.3.3. 3.Dbscan聚类
1.1.3.3.1. 1.算法介绍
1.1.3.3.1.1. 与均值漂移聚类类似,DBSCAN也是基于密度的聚类算法。DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法,类似于均值转移聚类算法,但它有几个显著的优点。
1.1.3.3.2. 2.算法思想
1.1.3.3.2.1. DBSCAN的聚类定义很简单:由密度可达关系导出的最大密度相连的样本集合,即为我们最终聚类的一个类别,或者说一个簇。
1.1.3.3.2.2. 那么怎么才能找到这样的簇样本集合呢?DBSCAN使用的方法很简单,它任意选择一个没有类别的核心对象作为种子,然后找到所有这个核心对象能够密度可达的样本集合,即为一个聚类簇。接着继续选择另一个没有类别的核心对象去寻找密度可达的样本集合,这样就得到另一个聚类簇。一直运行到所有核心对象都有类别为止。
1.1.3.3.3. 3.优缺点
1.1.3.3.3.1. 优点:
1.1.3.3.3.1.1. 1)不需要知道簇的数量
1.1.3.3.3.1.2. (2) 可以对任意形状的稠密数据集进行聚类,相对的,K-Means之类的聚类算法一般只适用于凸数据集。
1.1.3.3.3.1.3. (3) 可以在聚类的同时发现异常点,对数据集中的异常点不敏感。
1.1.3.3.3.1.4. (4) 聚类结果没有偏倚,相对的,K-Means之类的聚类算法初始值对聚类结果有很大影响。
1.1.3.3.3.2. 缺点:
1.1.3.3.3.2.1. (1)如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,这时用DBSCAN聚类一般不适合。
1.1.3.3.3.2.2. (2) 如果样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻时建立的KD树或者球树进行规模限制来改进。
1.1.3.3.3.2.3. (3) 调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值ϵϵ,邻域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响。
1.1.3.4. 4.层次聚类
1.1.3.4.1. 1.算法介绍
1.1.3.4.1.1. 层次聚类算法分为两类:自上而下和自下而上。
1.1.3.4.1.2. 凝聚层级聚类(HAC)是自下而上的一种聚类算法。HAC首先将每个数据点视为一个单一的簇,然后计算所有簇之间的距离来合并簇,知道所有的簇聚合成为一个簇为止。
1.1.3.4.1.3. 分裂(divisive)层次聚类:分裂的层次聚类与凝聚的层次聚类相反,采用自顶向下的策略,它首先将所有对象置于同一个簇中,然后逐渐细分为越来越小的簇,直到每个对象自成一簇,或者达到了某个终止条件。该种方法一般较少使用。
1.1.3.4.2. 2.优缺点
1.1.3.4.2.1. 优点:
1.1.3.4.2.1.1. (1)不需要知道有多少个簇
1.1.3.4.2.1.2. (2)对于距离度量标准的选择并不敏感
1.1.3.4.2.2. 缺点:
1.1.3.5. 5.GMM_EM聚类
1.1.3.5.1. 1.算法介绍
1.1.3.5.1.1. K-Means的缺点在于对聚类中心均值的简单使用。下面的图中的两个圆如果使用K-Means则不能作出正确的类的判断。同样的,如果数据集中的点类似下图中曲线的情况也是不能正确分类的。
1.1.3.5.2. 2.算法思想
1.1.3.5.2.1. 使用高斯混合模型(GMM)做聚类首先假设数据点是呈高斯分布的,相对应K-Means假设数据点是圆形的,高斯分布(椭圆形)给出了更多的可能性。我们有两个参数来描述簇的形状:均值和标准差。所以这些簇可以采取任何形状的椭圆形,因为在x,y方向上都有标准差。因此,每个高斯分布被分配给单个簇。
1.1.3.5.2.2. 所以要做聚类首先应该找到数据集的均值和标准差,我们将采用一个叫做最大期望(EM)的优化算法。
1.1.3.5.3. 3.优缺点
1.1.3.5.3.1. 优点:
1.1.3.5.3.1.1. (1)GMMs使用均值和标准差,簇可以呈现出椭圆形而不是仅仅限制于圆形。K-Means是GMMs的一个特殊情况,是方差在所有维度上都接近于0时簇就会呈现出圆形。
1.1.3.5.3.1.2. (2)GMMs是使用概率,所有一个数据点可以属于多个簇。例如数据点X可以有百分之20的概率属于A簇,百分之80的概率属于B簇。也就是说GMMs可以支持混合资格。
1.1.3.5.3.2. 缺点:
1.1.3.5.3.2.1. (1)计算复杂,是一种软聚类,给出样本的类别概率
1.1.3.6. EM
1.1.3.6.1. 什么是EM算法
1.1.3.6.1.1. 最大期望算法(Expectation-maximization algorithm,又译为期望最大化算法),是在概率模型中寻找参数最大似然估计或者最大后验估计的算法,其中概率模型依赖于无法观测的隐性变量。
1.1.3.6.1.2. 最大期望算法经过两个步骤交替进行计算,
1.1.3.6.1.3. 第一步是计算期望(E),利用对隐藏变量的现有估计值,计算其最大似然估计值;
1.1.3.6.1.4. 第二步是最大化(M),最大化在E步上求得的最大似然值来计算参数的值。M步上找到的参数估计值被用于下一个E步计算中,这个过程不断交替进行。
1.1.3.6.1.5. 极大似然估计用一句话概括就是:知道结果,反推条件θ。
1.1.3.6.2. 采用 EM 算法求解的模型有哪些?
1.1.3.6.2.1. 用EM算法求解的模型一般有GMM或者协同过滤,k-means其实也属于EM。EM算法一定会收敛,但是可能收敛到局部最优。由于求和的项数将随着隐变量的数目指数上升,会给梯度计算带来麻烦。
1.1.4. Dimension reduction
1.1.4.1. PCA
1.1.4.1.1. PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法。
1.1.4.1.2. PCA(主成分分析)和LDA(线性判别分析)有很多的相似点,一种无监督的降维方法,而LDA是一种有监督的降维方法。
1.1.4.1.3. PCA的主要思想
1.1.4.1.3.1. 将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征
1.1.4.1.3.2. PCA的工作就是从原始的空间中顺序地找一组相互正交的坐标轴,新的坐标轴的选择与数据本身是密切相关的。
1.1.4.1.4. 优缺点
1.1.4.1.4.1. 优点
1.1.4.1.4.1.1. 仅仅需要以方差衡量信息量,不受数据集以外的因素影响。
1.1.4.1.4.1.2. 各主成分之间正交,可消除原始数据成分间的相互影响的因素。
1.1.4.1.4.1.3. 计算方法简单,主要运算是特征值分解,易于实现。
1.1.4.1.4.2. 缺点
1.1.4.1.4.2.1. 主成分各个特征维度的含义具有一定的模糊性,不如原始样本特征的解释性强。
1.1.4.1.4.2.2. 方差小的非主成分也可能含有对样本差异的重要信息,因降维丢弃可能对后续数据处理有影响。
1.1.4.2. SVD
1.1.4.2.1. 奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域。
本文就对SVD的原理做一个总结,并讨论在在PCA降维算法中是如何运用运用SVD的。
1.1.4.2.2. 优缺点
1.1.4.2.2.1. 优点
1.1.4.2.2.1.1. 1)算法稳定;
1.1.4.2.2.1.2. 2)适用面广;
1.1.4.2.2.1.3. 3)简化数据,减小处理量;
1.1.4.2.2.1.4. 4)去除噪声;
1.1.4.2.2.1.5. 5)算法效果好。
1.1.4.2.2.2. 缺点
1.1.4.2.2.2.1. 1)计算代价很大,时间复杂度是3次方的,空间复杂度是2次方的;
1.1.4.2.2.2.2. 2)不能共享内存;
1.1.4.2.2.2.3. 3)很难并行计算;
1.1.4.2.2.2.4. 4)数据转换可能难以理解。
1.1.4.3. 聚类
1.1.4.3.1. 见上 Clustering
1.1.4.4. Embedding
1.1.4.4.1. embedding 其实就是一种稠密向量的表示形式
1.1.4.4.2. 优缺点
1.1.4.4.2.1. 优点
1.1.4.4.2.1.1. embedding 表示,把自然语言转化为一串数字,从此自然语言可以计算;
1.1.4.4.2.1.2. embedding 替代 oneHot 极大的降低了特征的维度(天下人苦 oneHot 久矣);
1.1.4.4.2.1.3. embedding 替代协同矩阵,极大地降低了计算复杂度。
1.1.4.4.2.2. 缺点
1.1.4.4.2.2.1. 做了embedding就不可解释了
1.2. 深度学习
1.2.1. NN
1.2.1.1. 神经网络结构
1.2.1.1.1. 神经网络的一般结构是由输入层、隐藏层(神经元)、输出层构成的
1.2.1.2. 层数计算
1.2.1.2.1. 一般说到神经网络的层数是这样计算的,输入层不算,从隐藏层开始一直到输出层,一共有几层就代表着这是一个几层的神经网络
1.2.1.3. 为什么神经网络具有非线性切分能力
1.2.1.3.1. 非线性曲线 我们一般用线性分段逼近,而多层神经网络有多个隐层空间 相当于有多个多段折线分割面,当神经网络层数特别多时 分割超平面就相当于一个超曲面 因此可以对非线性的数据分类
1.2.1.4. 激活函数有哪些
1.2.1.4.1. sigmoid函数
1.2.1.4.2. tanh(双曲正切)函数
1.2.1.4.3. ReLu(修正线性单元)函数
1.2.1.4.4. softmax激活函数
1.2.1.5. 随机梯度下降法(SGD)
1.2.1.5.1. 你可以把训练集分割为小一点的子集训练,这些子集被取名为 mini-batch,假设每一个子集中只有 1000 个样本,
那么把其中的𝑥 (1)到𝑥 (1000)取出来,将其称为第一个子训练集,也叫做 mini-batch,然后你再取出接下来的 1000 个样本,从𝑥 (1001)到𝑥 (2000),然后再取 1000个样本,以此类推。
1.2.1.6. 正向传播
1.2.1.6.1. 正向传播(forward-propagation)是指对神经网络沿着从输入层到输出层的顺序,依次计算并存储模型的中间变量(包括输出)。
1.2.1.7. 反向传播(BP)
1.2.1.7.1. 反向传播(back-propagation)指的是计算神经网络参数梯度的方法。总的来说,反向传播依据微积分中的链式法则,沿着从输出层到输入层的顺序,依次计算并存储目标函数有关神经网络各层的中间变量以及参数的梯度。
1.2.1.8. 为什么说神经网络是端到端的网络?
1.2.1.8.1. 端到端学习(end-to-end)是一种解决问题的思路,与之对应的是多步骤解决问题,也就是将一个问题拆分为多个步骤分步解决,而端到端是由输入端的数据直接得到输出端的结果。
1.2.1.8.2. 就是不要预处理和特征提取,直接把原始数据扔进去得到最终结果。
1.2.1.8.3. 特征提取包含在神经网络内部,所以说神经网络是端到端的网络。
1.2.1.9. 优缺点
1.2.1.9.1. 优点:
1.2.1.9.1.1. 通过缩减人工预处理和后续处理,尽可能使模型从原始输入到最终输出,给模型更多可以根据数据自动调节的空间,增加模型的整体契合度。
1.2.1.9.2. 缺点
1.2.1.9.2.1. - 它可能需要大量的数据。要直接学到这个𝑥到𝑦的映射,你可能需要大量(𝑥, 𝑦)数据。
1.2.1.9.2.2. - 它排除了可能有用的手工设计组件。
1.2.1.10. 深度学习框架比较
1.2.1.10.1. TensorFlow
1.2.1.10.1.1. 优缺点
1.2.1.10.1.1.1. 优点
1.功能很齐全,能够搭建的网络更丰富。
2.支持多种编程语言。
3.拥有强大的计算集群。
4.谷歌支持
5.社区活跃度高。
6.支持多GPU。
7.TensorBoard支持图形可视化。
1.2.1.10.1.1.2. 缺点
1.编程入门难度较大。
2.计算图是纯 Python 的,因此速度较慢
3.图构造是静态的,意味着图必须先被「编译」再运行 |
1.2.1.10.2. Keras
1.2.1.10.2.1. 优缺点
1.2.1.10.2.1.1. 优点
1.Keras是TensorFlow高级集成APi
2.Keras是一个简洁的API。 可以快速帮助您创建应用程序。
3.代码更加可读和简洁。
4.Keras处于高度集成框架。
5.社区活跃。
1.2.1.10.2.1.2. 缺点
1.Keras框架环境配置比其他底层框架要复杂一些。
2.虽然更容易创建模型,但是面对复杂的网络结构时可能不如TensorFlow。
3.性能方面比较欠缺。
1.2.1.10.3. Pytorch
1.2.1.10.3.1. 优缺点
1.2.1.10.3.1.1. 优点
1.它可以在流程中更改体系结构。
2.训练神经网络的过程简单明了。
3.可以使用标准 Python 语法编写 for 循环语句
4.大量预训练模型
1.2.1.10.3.1.2. 缺点
1.不够TensorFlow全面,不过未来会弥补。
2.PyTorch部署移动端不是很好。
1.2.1.10.4. MXNet
1.2.1.10.4.1. 优缺点
1.2.1.10.4.1.1. 优点
1.支持多语言。
2.文档齐全。
3.支持多个GPU。
4.清晰且易于维护的代码。
5.命令式和符号式编程风格之间进行选择
1.2.1.10.4.1.2. 缺点
1.不被广泛使用。
2.社区不够活跃。
3.学习难度大一些。