进入AI领域做产品 —— 我的自学之路(AI基础算法)
基础算法以及相关知识
学习了产品认知,进行了需求分析,也做了技术预研,总算到了设计环节。
AI产品经理只有理解算法原理,才能更好的帮助研发工程师快速实现目标。
所以这章以基础的机器学习算法来梳理设计流程。
目的
- 帮助研发工程师快速实现产目标;
- 能够用非技术语言,将研发过程的技术原理以及出现的问题及时与领导和客户沟通,获得支持和认可。
数据采集
目的
- 获取数据供算法进行学习。
获取方式
- 直接购买行业数据;
- 自行采集:
- 自身积累;
- 爬虫。
- 第三方合作:
- 交换;
- 购买。
数据探查
类型:
- 是结构化还是非结构化。
大小:
- 数据的条数多少。
分布:
- 是否有目标队列。
属性:
- 是否有数据缺失以及乱码。
场景抽象
目的
- 业务逻辑与算法进行匹配;
- 不同的业务有不同的目标以及其优先级,需要产品经理对业务有清晰的认知,才能将业务场景的需求很好的转化为算法逻辑,并以此选择不同种类的算法进一步缩小范围,逐步接近最佳算法。
注意事项
-
聚焦要解决的核心问题:
- 需求与算法匹配;
- 确认问题对精度的最低要求;
- 确认问题对时效的最低要求。
- 注意数据量的大小、数据质量和数据本身的特性。
基本机器学习算法
全监督学习(分类、回归):
-
定义:
- 学习将输入映射到输出的函数,且训练集中的数据样本都有标签或目标。
线性分类器 —— K近邻:
-
原理:
- 从训练集中找到一些和新数据距离最近的K个数据,根据这些被找到数据的分类,来决定新数据的分类。
-
实现:
- 计算已知类别数据集中的点与当前点之间的距离;
- 按照距离递增次序排序;
- 交叉验证法(以K=1为基准),选取与当前点距离最小的K个点,K一般低于训练样本数的平方根;
- 确定前K个点所在类别的出现频率;
- 返回前K个点所出现频率最高的类别作为当前点的预测分类。
-
优点:
-
简单且高效:
- 算法简单,无需训练,体现在计算时间开销上几乎为0。
-
应用范围灵活:
- 不但可以解决二分类问题,也可以解决多分类问题;
- 适合对稀有事件进行分类(例如当流失率很低时,比如低于0.5%,构造流失预测模型)。
-
鲁棒性不错:
- 对噪音数据不敏感,具有不错的鲁棒性。
-
简单且高效:
-
缺点:
-
计算开销大:
- 计算量大,内存开销大,执行起来很慢。需要遍历新的数据点与样本集中每个数据的“距离”,以判断是否是前K个邻居;
-
受样本分布比例制约:
- 在样本分布比例不均匀的情况下准确率不高。
-
计算开销大:
线性分类器 —— 线性回归:
-
原理:
- 拟合出一条穿过连续数据的直线,且映射到直线上的点最接近预测值,得出连续变量之间的关系。
-
实现:
-
得出假设函数:
- 用于拟合的函数,具有泛化能力:
- 用于拟合的函数,具有泛化能力:
-
得出代价函数:
- 评估假设函数的拟合质量,任何能够衡量模型预测出来的值 h(θ)与真实值 y 之间的差异的函数都可以叫做代价函数;
- 一旦有了这个函数,学习算法的目标就是找到代价函数的最小值,得到综合最小化的θ;
- 均方误差:
-
梯度下降最优化:
- 代价函数求偏导得到梯度,梯度的反方向决定了参数下降的方向,沿着最陡的方向下坡;
- 通过不断迭代更新代价函数值,直到全局最优,收敛。
-
得出假设函数:
-
优点:
-
高效:
- 学习速度快,在数据量大的情况下依然运行速度很快。
-
建模速度快:
- 建模速度快,不需要很复杂的计算。
-
可读性强:
- 可读性强,可以根据系数给出每个变量的理解和解释。
-
高效:
-
缺点:
- 对非线性问题拟合能力差;
- 对噪声数据很敏感。
线性分类器 —— 多项式回归:
-
原理:
- 复杂数据往往不能以一条直线来拟合,这时就要在线性回归方程的基础上增加多项式,让拟合函数变为曲线:
- 复杂数据往往不能以一条直线来拟合,这时就要在线性回归方程的基础上增加多项式,让拟合函数变为曲线:
-
优点:
-
灵活度高:
- 灵活度高,能够模拟非线性可分的数据,线性回归不能做到这一点,它总体上更灵活,可以模拟一些相当复杂的关系。
-
灵活度高:
-
缺点:
-
要手动设置变量的指数:
- 指数调试具有一定难度,需要一些数据的先验知识才能选择最佳指数;
- 容易过拟合,因为指数调试不当很容易导致这个问题。
-
要手动设置变量的指数:
线性分类器 —— 逻辑回归:
-
原理:
- 判别模型,拟合出曲线将正负样本分割的二分类算法,输出值永远在[0,1]之间。
-
实现:
-
得出假设函数:
- 基于线性方程,以及sigmoid函数,将结果限制在S型曲线中,达到分类目的。
- 基于线性方程,以及sigmoid函数,将结果限制在S型曲线中,达到分类目的。
-
划出决策边界:
- G(θx1+θx2+C);
- 决策边界,也称为决策面,是用于在N维空间,将不同类别样本分开的平面或曲面,在坐标轴中可视化分类结果;
- 决策边界是假设函数的属性,由参数决定,而不是由数据集的特征决定。
-
得出代价函数:
-
梯度下降最优化:
-
得出假设函数:
-
优点:
-
高效:
- 计算代价不高,在时间和内存需求上相当高效。它可以应用于分布式数据,并且还有在线算法实现,用较少的资源处理大型数据。
-
稳定:
- 对于数据中小噪声的鲁棒性很好,并且不会受到轻微的多重共线性的特别影响。
- 理解难度低。
-
高效:
-
缺点:
-
容易欠拟合,分类精度不高:
- 模型复杂度不高;
- 正则化的影响。
- 数据特征有缺失或者特征空间很大时表现效果并不好。
-
容易欠拟合,分类精度不高:
线性分类器 —— 支持向量机:
-
原理:
- 判别模型,通过间隔最大化原则,寻找一个超平面将正负样本分割,最终转化为一个凸二次规划问题来求解支持向量,达到二分类目的的算法。
-
实现:
-
计算几何超平面:
- W*x+b=0,W代表法向量即平面的倾斜程度,b是截距,求得W和b就能得到几何超平面。
-
计算几何间隔:
- 通过确认几何间隔,即可得到支持向量到超平面的距离;
- 一个点距离超平面的远近可以表示分类预测的确信度,越远则表示确信度越高;
- SVM的目标是寻找一个超平面,使得离超平面较近的异类点之间能有更大的间隔,保证确信度最高,同时不必考虑所有样本点,只需让求得的超平面使得离它近的点间隔最大:
- 间隔最大化求得的解,是唯一的,此时的超平面是最优的;
- 此时的分隔超平面所产生的分类结果是最鲁棒的,泛化能力最强。
-
求解最优支持向量:
- 通过数据点,找到支持向量距离分隔超平面的最大值,可以理解为梯度下降的作用;
- 基于求最大间隔的思想,得到SVM的基本型;
- 而这个基本型是一个基本型目标函数是二次的,约束条件是线性的,这是一个凸二次规划问题。可以直接用现成的优化计算包求解,利用“对偶问题”来求解:
- 用对偶问题求解更加高效;
- 可以自然引入核函数,进而推广到非线性可分问题。
-
计算几何超平面:
-
优点:
-
计算成本低:
- 因为,最终决策函数只由少数的支持向量所确定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种意义上避免了“维数灾难”。
-
模型性能好:
- 因为,少数支持向量决定了最终结果,这不但可以帮助我们抓住关键样本,剔除大量冗余样本,而且注定了该方法不但算法简单,而且具有较好的“鲁棒”性。
-
计算成本低:
-
缺点:
-
对多分类问题的处理不灵活:
- 主要应用于有监督的二分类场景。
-
对非线性问题没有通用解决方案,必须要谨慎选择核函数:
- 为什么要引入核函数:
- 原始空间线性不可分时,可以将样本映射到高维空间实现可分;
- 而引入这样的映射之后,所要求解的对偶问题中,无需求解真正的映射函数,而只需要知道其核函数。
- SVM核函数之间的区别:
- 线性核:参数少,速度快,对于一般的数据分类效果已经很理想了;
- RBF核:主要用于线性不可分的情况,参数度,分类结果非常依赖参数;
- 如果特征数小,样本数量不多,可以选择RBF核。
-
对缺失数据敏感:
- 缺失数据指的是某些特征数据,向量数据不完整;
- SVM没有处理失值的策略,而SVM希望样本在特征空间中线性可分,所以特征空间的好坏对SVM的性能很重要。
-
对多分类问题的处理不灵活:
逻辑回归与支持向量机的区别:
-
相同点:
- LR和SVM都是判别模型;
- LR和SVM都是监督学习算法;
- LR和SVM都是用于分类场景;
- 如果不考虑核函数,LR和SVM都是线性分类算法,也就是说他们的分类决策面都是线性的;
- 说明:LR也是可以用核函数的,但LR通常不采用核函数的方法.(计算量太大)。
-
不同点:
- LR采用log损失,SVM采用合页(hinge)损失;
- LR对异常值敏感,SVM对异常值不敏感(抗噪音能力,SVM要强);
- 计算复杂度不同。对于海量数据,SVM的效率较低,LR效率比较高;
- 对非线性问题的处理方式不同,LR主要靠特征构造,必须组合交叉特征,特征离散化。SVM也可以这样,还可以通过kernel(因为只有支持向量参与核计算,计算复杂度不高);
- SVM的损失函数就自带正则,损失函数中的1/2||w||^2项),这就是为什么SVM是结构风险最小化算法的原因,而LR必须另外在代价函数上添加正则项。
贝叶斯 —— 朴素贝叶斯:
-
原理:
- 生成模型,它通过学习已知样本,计算出联合概率,再求出条件概率;
- 朴素,即特征数据之间彼此独立,在求解联合概率P(XY)时,需要求解P(X|Y),朴素贝叶斯做了一个很强的条件独立假设(当Y确定时,X的各个分量取值之间相互独立)。
-
生成模型与判别模型:
-
生成模型:
- 先学习得到联合概率分布P(XY),即特征X和标记Y共同出现的概率,然后求条件概率分布,能够学习到数据生成的机制。
-
判别模型:
- 学习得到条件概率分布P(Y|X),即在特征X出现的情况下标记Y出现的概率。
-
生成模型:
-
实现:
-
条件概率公式:
- 条件概率是指事件A在另外一个事件B已经发生条件下的发生概率:
- 条件概率是指事件A在另外一个事件B已经发生条件下的发生概率:
-
全概率公式:
- 表示若事件A1、A2、…、An构成一个完备事件组且都有正概率,则对任意一个事件B都有公式成立:
- 表示若事件A1、A2、…、An构成一个完备事件组且都有正概率,则对任意一个事件B都有公式成立:
-
朴素贝叶斯公式:
- 朴素贝叶斯公式即是将条件概率公式代入全概率公式中:
- 朴素贝叶斯公式即是将条件概率公式代入全概率公式中:
-
条件概率公式:
-
优点:
-
简单且高效:
- 算法逻辑简单,易于实现,只要使用贝叶斯公式转化即可。
-
应用范围灵活:
- 对小规模的数据表现很好,适合多分类场景。
-
计算开销小:
- 分类过程中空间开销小,假设特征相互独立,只会涉及到二维存储。
-
简单且高效:
-
缺点:
-
先验的局限性:
- 朴素贝叶斯假设属性之间相互独立,这种假设在实际过程中往往是不成立的。在属性之间相关性越大,分类误差也就越大;
- 需要计算先验概率,分类决策存在错误率。
-
先验的局限性:
决策树 —— 基本决策树:
-
原理:
- 决策树是一种描述对实例进行分类的树形结构算法;
- 构成决策树包括节点和有向边,节点分为根节点、内部节点、叶节点,根节点和内部节点代表特征属性,叶节点代表判断结果,有向边代表分类。
-
实现:
- 在特征工程过程构造了一些列特征之后,进行特征重要度评估;
- 评估方法是根据信息熵来计算信息增益,之后排序信息增益来确定根节点,进而再一步步在分支确定内部节点。
-
特征排序:
-
经验熵:
- 根据分类的数量,分类结果信息的不确定性:
- 根据分类的数量,分类结果信息的不确定性:
-
条件熵:
- 已知条件A情况下,条件B的不确定性:
- 已知条件A情况下,条件B的不确定性:
-
信息增益:
- 信息增益=经验熵-条件熵,特征能为分类带来多少信息量,带来的信息越多,则特征越重要;
- 特征A有n个不同的取值{a1,a2,…,an},根据特征A的取值将D划分为n个子集{D1,D2,…,Dn}:
- |Di|为Di的样本个数;
- 记子集Di中属于Ck的样本的集合为Dik,即Dik = Di ∩ Ck,|Dik|为Dik的样本个数。
-
排序,确定根节点。
-
-
递归:
- 对子结点递归地调用以上方法构建决策树,直到所有特征的信息增益均很小或没有特征可以选择为止;
- 对于叶节点,当节点将数据集划分时根据分类情况,如果某一类中样本的结果都一致,则这个节点成为叶节点。如果存在不一致则根据不一致则继续划分数据。
-
递归终止:
- 第一个停止条件是所有的类标签完全相同,则直接返回该类标签;
- 第二个停止条件是使用完了所有特征,仍然不能将数据划分仅包含唯一类别的分组,即决策树构建失败,特征不够用。
-
剪枝(模型优化):
-
预剪枝:
- 预剪枝是指决策树生成的过程中,对每个节点在划分前先进行估计,若当前节点划分不能带来泛化性能提升,则停止划分并将当前节点标记为叶节点。
- 原则:
- 计算每次分裂对测试集的准确度,如果提升则划分;如果降低,或是当小于某个阈值的时候,停止树的生长;
- 剪枝通过以下方法判断树的停止生长,停止生长后,按照多数投票的原则判断该结点所属类别:
1). 当树到达一定深度的时候,停止树的生长;
2). 当到达当前结点的样本数量小于某个阈值的时候,停止树的生长。
- 弊端:
- 预剪枝因为基于贪心的本质来禁止这些分支展开,有欠拟合的风险。
-
后剪枝:
- 后剪枝当训练集生成一颗完整的决策树之后,自底向上对非叶节点进行考察,如果将此节点替换为叶节点能提升泛化性能,则进行替换。
- 原理:
- 后剪枝的核心思想是让算法生成一棵完全生长的决策树,然后从最底层向上计算是否剪枝;
- 剪枝过程将子树删除,用一个叶子结点替代,该结点的类别同样按照多数投票的原则进行类别分类;
- 同样地,后剪枝也可以通过在测试集上的准确率进行判断,如果剪枝过后准确率有所提升,则进行剪枝。
- 方法:
- Reduced-Error Pruning(REP,错误率降低剪枝);
- Pesimistic-Error Pruning(PEP,悲观错误剪枝);
- Cost-Complexity Pruning(CCP,代价复杂度剪枝);
- EBP(Error-Based Pruning)(基于错误的剪枝)。
- 弊端:
- 因为后剪枝是决策树完全生成完了再进行检查,并且要自底向上对非叶节点逐一考察,因此训练时间开销比预剪枝大得多。
-
预剪枝:
-
优点:
-
可视化:
- 简单易于理解,生成的可视化决策树很直观。
-
少干预:
- 基本不需要预处理,不需要提前归一化,处理缺失值;
- 因为这是一个概率模型,不关心变量的值而是关心其分布和变量之间的条件概率。
-
高效:
- 在相对短的时间内能够对大型数据源做出可行且效果良好的结果。
-
可视化:
-
缺点:
-
容易过拟合:
- 决策树算法非常容易创建复杂树结构而过拟合,导致泛化能力不强;
- 解决方案:
- 剪枝:可以通过设置节点最少样本数量和限制决策树深度来改进。
-
对数据变动非常敏感:
- 决策树会因为样本发生一点点的改动,就会导致树结构的剧烈改变;
- 解决方案:
- 集成学习。
-
受数据分布比例影响较大:
- 如果某些特征的样本比例过大,生成决策树容易偏向于这些特征;
- 解决方案:
- 这个可以通过调节样本权重来改善。
-
容易过拟合:
决策树 —— 随机森林:
-
原理:
- 基于 Bagging方法,训练多个分类器-决策树,通过依据各个决策树结果进行投票/回归取平均来做最终决定。
-
实现:
-
Bagging:
- Bagging是一种并行的方法;
- 使用相同的算法在不同的训练集上面训练多个基学习器;
- 使用不同的训练算法训练得到多个基学习器。
-
构建方法:
- 随机且有放回地从训练集中的抽取N个训练样本(bootstrap sample),作为某棵树的训练集;
- 如果每个样本的特征维度为M,指定一个常数m<M,随机有放回地从M个特征中选取m个特征子集;
- 每次树进行分裂时,从这m个特征中选择最优划分特征,每棵树都尽最大程度的生长,并且没有剪枝过程;
- 重复上述步骤建立多棵树(基分类器)。
-
决策方法:
- 决策树一般采用二叉决策树,最终结果通过所有决策树投票决定,比较不同分类结果的数量多少,多的一方为最终结果。
-
Bagging:
-
优点:
- 准确度高;
-
不容易过拟合:
- 在数据集上表现良好,通过对数据集以及特征选取这两个随机性的引入,使得随机森林不容易陷入过拟合;
- 主要原因是因为模型学习了太多样本中的随机误差;
- 因为Random Forest随机选择了样本和特征,并且将很多这样的随机树进行了平均,这些随机误差也随之被平均,乃至相互抵消了。
-
抗噪声能力强:
- 在当前的很多数据集上,相对其他算法有着很大的优势,两个随机性的引入,使得随机森林具有很好的抗噪声能力。
-
缺点:
- 计算成本高,因为要计算多个树,计算成本较高。
- 当数据噪声比较大时,会产生过拟合现象;
- 受数据分布比例影响较大,对有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响。
无监督学习(聚类、推荐、降维):
-
定义:
- 算法从没有人为注释的训练数据中抽取信息,学习从分布中采样、去噪、寻找数据分布的流形,或是将数据中的相关样本聚类。
聚类算法 —— K-MEANS:
-
原理:
- 基于设定的分类数量K,随机找K个训练数据点;
- 距离K点最近的数据将被划入此类,并重新计算新的K点位置;
- 接着再重复根据最近的原则分类,不断迭代直到收敛的算法。
-
实现:
-
得出代价函数:
- 以欧氏距离来衡量相关性,实现范围内点到点的平方和最小:
- 以欧氏距离来衡量相关性,实现范围内点到点的平方和最小:
-
随机初始化:
- 随机找K个训练实例点,然后令K个聚类中心分别等于这K个训练实例;
- 我们通常需要多次(50到1000次)运行K均值算法,每一次都重新进行初始化,最后再比较多次运行K-均值的结果,选择代价函数最小的结果。
- 基于业务需求,选择聚类数K。
-
得出代价函数:
-
优点:
-
简单高效:
- 原理比较简单,实现也很容易,收敛速度快;
- 算法的可解释度比较强。
-
简单高效:
-
缺点:
-
参数难把握:
- K值的选取不好把握,实际的应用场景中很难预判;
- 需要人为地确定初始聚类中心,不同的初始聚类中心可能导致完全不同的聚类结果。
-
对噪音敏感:
- 对噪音敏感,因为任何一个点都会被划分。
-
性能欠缺:
- 采用迭代方法,得到的结果只是局部最优;
- 对于不是凸的数据集比较难收敛。
-
参数难把握:
聚类算法 —— DBSCAN:
-
原理:
- 基于空间密度的算法,随机找到一个数据点,计算其半径范围R内其它点的数量是否满足最少数据P要求;
- 如果满足则设该点为核心点并划分簇,接着遍历簇中所有点来看其半径范围R内的点是否满足P,依此扩大簇,形成密度相连的最大合集。
-
实现:
-
确认半径R:
- 确定R的一种方法是计算任意点到所有点的距离,并进行排序;
- 一旦发现有相邻一组数据差异巨大,那么前一个数据可选择作为基础数进行测试。
-
确认最少数据P:
- 一般选择较少的数进行测试,并调试。
-
计算核心点:
- 在该点的半径R内的点数大于P,则认为该点是核心点。
-
计算边界点:
- 在核心点的半径范围R之内,但是这个点的半径范围R内的点数小于P。
-
计算噪音点:
- 既不是核心点,也不是边界点的点,将要被删除。
-
确认半径R:
-
优点:
-
少干预:
- DBSCAN无需提前设置K值。
-
抗噪强:
- DBSCAN对噪音数据可以实现过滤。
-
特殊类型数据优势:
- DBSCAN对低维的、球状的数据簇具有更好的处理效果。
-
少干预:
-
缺点:
- 最终聚类数量不可控;
-
低效:
- 算法复杂度高,对计算资源消耗大。
-
数据类型局限:
- 处理高维数据性能较差,效果一般,因为高维数据的密度相连性不高,更适合基于距离的聚类算法;
- 处理数据分离不明显的数据集时,聚类效果会受到较大影响。
推荐算法 —— 基于热度:
-
概述:
- 非机器学习方法,但是在产品生初期提供了平滑的体验;
- 产品初期,用户量数据量小,无法做到基于兴趣和习惯为用户做个性化推荐,所以一般会采用热度算法,覆盖大部分内容需求,且启动成本很低。
-
新闻热度分 = 初始热度分 + 用户交互产生的热度分 – 随时间衰减的热度分:
- 初始热度不应该一致,解决办法就是把初始热度设置为变量;
- 用户行为分规则不是固定不变的,先要明确用户的的哪些行为会提高新闻的热度值,解决办法是对这些行为赋予一定的得分规则;
- 热度随时间的衰减不是线性的,如果是线性衰减,当某些新闻突然有大量用户阅读,获得很高的热度分时,可能会持续排名靠前很久,让用户觉得内容更新过慢。
推荐算法 —— 基于内容:
-
概述:
- 产品具备了一定的量级时,如果一直采用热度推荐,长尾和个性化的内容就鲜有人看,这时要考虑让用户不但能看到大家喜欢的内容,也能看到自己喜欢的内容。
-
原理:
- 推荐给用户喜欢过的、关注过的Item在内容上类似的Items;
- 比如用户看了哈利波特I,基于内容的推荐算法发现哈利波特II-VI与用户以前观看的内容(共有很多关键词)有很大关联性,接着把后者推荐给用户。
-
优点:
- 避免Item的冷启动问题:
- 冷启动:如果一个Item从没有被关注过,其他推荐算法则很少会去推荐,但是基于内容的推荐算法可以分析Item之间的关系,实现推荐。
- 对用户数量没有要求;
- 用户独立性;
- 解释性较好。
- 避免Item的冷启动问题:
-
缺点:
- 推荐的Item可能会重复;
- 无法挖掘潜在兴趣,确定性太强,因为均来自于历史,也就是由于这一点,基于内容的推荐一般与其他推荐算法同时存在;
- 新用户无法推荐,由于没有浏览历史。
推荐算法 —— 协同过滤:
-
概述:
- 解决了内容推荐的问题,更能挖掘用户的潜在兴趣。
-
原理:
- 借鉴和你相关人群的观点来进行推荐;
- 对于每个用户,采集对每个内容的消费行为,量化构建用户-内容行为矩阵,通过该矩阵的分析处理计算内容-内容的两两相似度,将高相似度的内容进行分发。
-
实现:
-
用户行为采集:
- 正反馈行为:
- 显性:评价、分享、点赞、收藏、下载等主动行为;
- 隐性:页面停留、播放视频等自然操作。
- 负反馈行为:差评、不喜欢等。
- 用户特征划分;
-
用户-内容行为的矩阵构建:
- 划定采集行为的窗口期:
- 从现在开始我要回溯多久的一个数据,确定窗口期的原因在于我们的内容会发生变化,并且用户的兴趣也可能发生变化;
- 因此,具体的窗口期需要根据各个业务领域而定,比如新闻类,窗口期不宜设置过长。
- 定义正负反馈行为的权重:
- 一般来说,显性的正反馈的权重大于隐形的正反馈;
- 比如正向的评价,肯定会比页面停留时间的权重要高,而负反馈的权重需要根据用户行为的深浅进行判断。
c)数据的预处理(降噪和归一化)。
-
矩阵分析计算相似度:
- 基于物品,将用户对所有的物品的偏好,作为一个向量计算用户之间的相似度(从物品角度找相似度高的物品进行推荐);
- 基于用户,将所有用户对某个物品的偏好,作为向量来计算物品之间的相似度(从人的角度找哪些人有相同偏好进行推荐)。
-
用户行为采集:
-
优点:
-
能制造惊喜感:
- 算法常常能起到意想不到的推荐效果——推荐出来一些结果让用户惊喜;
- 进行有效的长尾Item。
-
学习要求不高:
- 只依赖用户行为,不需要对内容进行深入了解,使用范围广;
- 不依赖对于内容的理解,甚至可夸异构内容实现推荐。
-
能制造惊喜感:
-
缺点:
-
冷启动门槛高:
- 一开始需要大量的<User,Item>行为数据, 即需要大量冷启动数据,启动门槛高。
-
数据依赖:
- 学习量不足时推荐效果差。
-
可解释性差:
- 很难给出合理的推荐解释。
-
类似、重复信息问题不可避免:
- 业务关联导致的相关性:在内容的生命周期内,由于业务关联导致用户既看了这个,又看了那个;
- 头部内容的问题:非常热门的内容容易覆盖用户行为,比如最近比较火的某个视频,如果仅仅基于行为来说的话,很多用户都会对其产生正向的行为,这样计算出来的结果就会导致接下来的很多推荐内容有相似性,因此还需要进行降权处理。
- 容易受脏数据污染。
-
冷启动门槛高:
异常检测 —— 基于密度:
-
原理:
- 寻找一个最佳阈值,对数据中存在的不正常或非典型个体进行检测和标志;
- 和监督学习的区别在于,数据倾斜,异常数据在总数据中占比很少,监督学习很难进行分类。
-
算法分类:
- 一分类支持向量机:数据特征较多的场景;
- 基于PCA的异常检测:训练时间短的场景。
-
实现:
- 根据训练集数据,估计出特征的均值和方差,然后构建出概率密度估计函数P(x);
- 对交叉验证集,尝试不同的ϵ值作为阈值,并预测数据是否异常,接着根据F1值(越高越好)选择最佳的阈值ϵ;
- 选出最佳的ϵ后,针对测试集进行预测,将小于阈值的划为异常点;
-
特征选择:
- 特征数据满足高斯分布则直接得出P(x),如果不满足则对数据进行处理,取其对数或是幂次,让其满足高斯分布;
- 使用误差分析法调整、增减特征。
-
优点:
- 可以找出分布不均匀的数据中局部异常的数据;
- 可以给出数据的异常得分,得分越高越可能异常,不是二分类。
-
缺点:
-
干预多:
- 人工调参,需要度量密度,需要设定阈值。
-
不适合高维数据:
- 只能找到异常点,无法找出异常簇。
-
干预多:
半监督学习(打标数据难获得的分类):
-
定义:
- 降低标签获取的成本,在训练数据中一部分有标签而另一部分没有标签。
标签传播:
-
原理:
- 在一个庞大的数据集合中,已知一部分标记数据,然后通过数据间彼此关系,在关系网中传播,最后得到全部数据的标记结果。
-
实现:
-
传播依据:
- 根据距离的远近来判断;
- 任一目标将传递属性给下一目标,属性传递过程会衰减,最终下一目标将根据被传递到其身上的属性的权重来判断其到底属于哪个属性。
-
计算边权重:
- 两点距离越近,即传播距离越短,这两点的边权重越大;
- 数据集合每个点肯定是受到离其最近的点的影响较大。
-
计算转移概率:
- 得到边权重之后,计算A到B点的传播概率P,P表示的是B受到A影响的概率;
- 一个点只会有一个目标结果,如果A和C同时传递结果给B,那么根据A和C到B的边权重判断谁占优势。
-
循环遍历:
- 对整个关系图结构数据遍历一遍,直到标签传播到整个数据集并收敛,就可以得到标签传播的最终结果。
-
传播依据:
-
优点:
-
模型效率较高:
- 实现简单,复杂度低,比较高效。
- 执行时间很短。
-
模型效率较高:
-
缺点:
-
性能不稳定:
- 每次迭代结果不稳定,导致准确率并不高。
-
性能不稳定:
强化学习(流程中需要不断推理):
-
定义:
- 强化学习是一种让计算机通过不断尝试,从错误(反馈)中学习如何在特定的情境下,选择可以得到最大的回报的行动,最后找到规律、达到目标的方法。
隐马尔可夫:
-
原理:
- 隐马尔可夫是一个关于时序的概率模型,它描述了一个由隐藏的马尔可夫链生成状态序列,再由状态序列生成观测序列的过程;
- 其中,状态之间的转换以及观测序列和状态序列之间都存在一定的概率关系,隐马尔可夫主要用来对上述过程进行建模;
- 模型包含三大要素,之后利用三大要素解决三大问题。
-
实现:
- 概率计算问题,主要利用前向算法或后向算法;
- 学习问题,将前向算法和后向算法结合,就可以解决只有观测序列求模型参数的问题;
- 状态序列预测问题,主要使用维特比算法,此算法使用动态规划的思想,使得最终计算出来的状态序列能达到整体最优。
-
优点:
- 能够捕捉数据中的“顺序”特性。
-
缺点:
- 输出独立假设,导致其不能考虑上下文的特征,限制了特征的选择;
- 目标函数和预测目标函数不匹配,隐马尔可夫求得的是联合概率,而需要的是条件概率。
深度学习:
-
定义:
- 由多层参数化可微的非线性模块搭建起来的模型。
前馈 —— 神经网络:
-
原理:
- 由一或两层参数化可微的非线性模块搭建起来的模型;
- 神经网络的本质就是一个的复合函数,通过隐藏层的**函数来拟合特征与目标之间的真实函数关系。
-
实现:
- 输入层神经元数量确定:输入向量维数=输入层神经元数;
- 确定隐层数量以及其中包含神经元数量;
- 输出层神经元数量确定:分类数=输出层神经元数;
- 随机初始化边权重: 如果全部置0,那么隐层就没有意义,因为每个节点的输出结果都是一样的;
- 向前传播计算,得出假设函数H(θ):
- 前一层,计算后一层的矩阵运算,权重矩阵1,加权超过神经元阈值将输出**函数Z1结果;
- 计算最终输出z的方式是利用了中间层的a1(2),a2(2)和第二个权值矩阵计算得到的,权重矩阵2;
- 前一层,计算后一层的矩阵运算,权重矩阵1,加权超过神经元阈值将输出**函数Z1结果;
- 计算假设函数的代价函数J(θ);
- 反向传播:
- 反向的原因:
- 计算一个节点的误差项,需要先计算每个与其相连的下一层节点的误差项;
- 这就要求误差项的计算顺序必须是从输出层开始,然后反向依次计算每个隐藏层的误差项,直到与输入层相连的那个隐藏层;
- 这就是反向传播算法的名字的含义。当所有节点的误差项计算完毕后,我们就可以根据式5来更新所有的权重:
- 反向传播算法是利用了神经网络的结构进行的计算。不一次计算所有参数的梯度,而是从后往前;
- 首先计算输出层的梯度,然后是第二个参数矩阵的梯度,接着是中间层的梯度,再然后是第一个参数矩阵的梯度,最后是输入层的梯度;
- 计算结束以后,所要的两个参数矩阵的梯度就都有了;
- 使用梯度检查确认反向传播正常执行,之后关闭梯度检查;
- 使用梯度下降法迭代更新连接权、阈值,来最小化J(θ),得出最优参数;
- 重复,直到例如训练误差达到设定的值。
-
优点:
- 无需特征工程,自主学习特征;
- 运行时间非常快;
-
性能强大:
- 性能非常强大,处理复杂问题高效,能充分逼近复杂的非线性关系,具备联想记忆的功能。
- 对噪声神经有较强的鲁棒性和容错能力。
-
缺点:
-
黑盒特性:
- 黑盒理解成本高,得出结果后,依据不能很好解释。
-
容易过拟合:
- 容易过拟合,因为神经网络的层数增加了,参数也增加了,导致拟合能力增强,方差主导。
-
数据量要求大:
- 需要海量的数据,百万级以上。
-
计算成本高:
- 每一个神经元都要进行高维度的矩阵运算,而随着层数增多,反向传播迭代次数增多,矩阵计算的规模将非常巨大。
-
训练时间长:
- 由于计算成本间接导致,主要限制因素还是当前的算力局限。
-
黑盒特性:
浅层学习和深度学习:
-
为什么深度学习火:
- 因为之前的浅层学习,大部分是基于统计学的推理,是基于先验假设的,而深度学习不做任何假设,直接从数据中学习经验,当数据量足够大的时候效果能无限逼近真实情况。
-
为什么深度学习得到发展:
-
数据:
- 浅层的机器学习算法在数据量面前,会触及一个天花板;
- 一旦到达极限,传统机器学习算法将无法跟上数据增长的步伐,性能则停滞不前,而深度学习的上限远高于浅层机器学习。
-
算力:
- GPU等硬件发展、云计算对计算资源的整合;
- 深度学习中涉及很多的矩阵运算,因此很多深度学习都要求有GPU参与运算,因为GPU就是专门为矩阵运算而设计的。
-
算法:
- 深度学习算法运行得更快;
- 深度学习算法精度更高。
-
数据:
-
深度学习和机器学习的区别:
-
概述:
- 最本质的区别是,深度学习用了很多层隐层;
- 这个区别体现在,深度学习更能解决复杂的非线性问题,同时能够自主选择、提取特征,但是需要海量的数据以及强大的硬件支撑。
-
数据:
- 数据依赖:
- 深度学习依赖大数据,不然过拟合不可避免;
- 普通机器学习在大数据下容易达到瓶颈,而深度学习不会。
- 特征工程:
- 深度学习无需特征工程,采用自动编码的方式,逐层抽象特征,对复杂的特征抽取场景有较好的效果;
- 大量超参数:
- 深度学习伴随着大量的超参数需要调试,调参方法不同即使相同的模型也无法达到一样的效果。
-
算力:
- 硬件依赖:
- 深度学习需要高性能GPU,因为其涉及大量重复可并行计算、浮点计算;
- 使用CPU做同样的计算速度会非常慢。
-
算法:
- 解决问题的方式:
- 深度学习处理复杂问题性能更强,精度更高。
- 运行时间:
- 深度学习训练好后实时反馈。
- 可理解性:
- 深度学习结果依据不可解释。
-
场景:
- 浅层学习是机器学习应用主流,多在解决一些日志类的数据分析,特别是结构化数值类数据的一些预测场景;
- 深度学习主要解决复杂特征场景,如图像识别、语音识别等。
-
概述:
前馈 —— 普通深度神经网络:
-
原理:
- 由多层参数化可微的非线性模块搭建起来的模型,而它本身能够用BP算法去训练;
- 原理同NN,但是隐层数量大大增多,在语音识别领域4层就比较深了,但是在计算机视觉领域,20层以上也比较常见:
- 拟合能力:
- 隐层数量的增多,相应的神经元连接权、阈值等参数就会增多,这样模型的复杂度就增加了;
- 增加隐层不仅增加了拥有**函数的神经元数目,还增加了**函数的嵌套的层数,进一步增加复杂度;
- 拟合能力可以通过增加算法的复杂度而提升,深层神经网络即是这个方式来增加复杂度,但是计算量非常大。
-
算法性能:
i.随着拟合能力的提升,过拟合会容易产生,而对应的解决方案之一就是海量数据。
-
和神经网络的具体区别:
- 单隐层,多神经元,可以拟合任何函数;
- 多隐层,少神经元,也可以拟合任何函数,但是在效率上更加高,更节约资源。
-
为什么神经网络层数越多越好:
- 随着层数增加,其非线性分界拟合能力不断增强,无限逼近真实结果;
- 非线性可由假设函数组成部分之间的相互作用表示出来,而神经网络就是在模拟这些组成部分的相互作用。
-
优点:
- 比神经网络更的性能更强大;
- 深度学习在数据和算力上的限制得到了突破,泛化误差将无限趋近于0。
-
缺点:
-
梯度消失:
- 不能用BP训练,因为误差在多隐层内逆传播时,往往会发散从而导致不能收敛;
-
打标数据依赖:
- 非常依赖打标数据,但是目前数据采集率很低,大部分数据没有被采集,同时采集到的数据存在很多噪声需要进行打标和处理。
-
梯度消失:
前馈 —— 卷积神经网络:
-
原理:
- 一种空间概念上的深度学习结构,主要通过卷积来解决空间上的一些复杂特征问题。
-
实现:
-
输入层:
- 与传统机器学习一样,需要进行预处理,如归一化、PCA。
-
卷积:
- 卷积:输入*卷积核=输出:
- 卷积核就是一个模板,一个滤波器,筛选出高频信号,达到特征筛选的目的;
- 卷积核处理图像之后,会将对应特征凸显。
- 整个CNN学习过程就是机器在确定卷积核的具体数值,使得信号能够更好的分类;
- 卷积层与输入层仅仅是局部连接;
- 压缩之后用高维度矩阵X低维度矩阵,输出卷积核值。
-
激励:
- 实际上是对卷积层的输出结果做一次非线性映射;
-
激励函数Relu函数:
- Relu函数特点:
- 速度快:
1). 和sigmoid函数需要计算指数和倒数相比,relu函数其实就是一个max(0,x),计算代价小很多。 - 减轻梯度消失问题:
1). X是sigmoid函数的导数;
2). 在使用反向传播算法进行梯度计算时,每经过一层sigmoid神经元,梯度就要乘上一个X;
3). X函数最大值是1/4;
4). 因此,乘一个X会导致梯度越来越小,这对于深层网络的训练是个很大的问题;
5). 而relu函数的导数是1,不会导致梯度变小;
6). 当然,**函数仅仅是导致梯度减小的一个因素,但无论如何在这方面relu的表现强于sigmoid;
7). 使用relu**函数可以让你训练更深的网络。 - 稀疏性:
1). 通过对大脑的研究发现,大脑在工作的时候只有大约5%的神经元是**的;
2). 而采用sigmoid**函数的人工神经网络,其**率大约是50%;
3). 有论文声称人工神经网络在15%-30%的**率时是比较理想的;
4). 因为relu函数在输入小于0时是完全不**的,因此可以获得一个更低的**率。
-
下采样/池化:
- 对图像进行*抽样,减少数据的处理量过滤细节,并且使得有效的信息尽可能保留,减小过拟合;
-
池化的方法很多,一般采用最大池化:
- 原理是将矩阵分区,并在每个小区选出最大值,以几个小区的最大值组成新的矩阵并输出;
- 这样保留了最主要特征而且减小计算复杂度。
- 除此之外还有平均池化可以考虑。
-
输出层/全连接:
- 通过卷积核下采样生产了许多特征图谱,是输入图片的参数以及位置信息;
- 这些信息都属于细节,而全连接/高斯连接做一个分类结果判断,判断结果是否为X。
- 反向传播法更新权重。
-
输入层:
-
全连接处理图像的问题:
-
参数数量限制:
- 全连接不能适应参数数量太多,图像只扩大一点,参数数量就会多很多,因此它的扩展性很差,并且容易过拟合。
-
没有利用像素之间的位置信息:
- 对于图像识别任务来说,每个像素和其周围像素的联系是比较紧密的,和离得很远的像素的联系可能就很小;
- 如果一个神经元和上一层所有神经元相连,那么就相当于对于一个像素来说,把图像的所有像素都等同看待,这不符合前面的假设;
- 当我们完成每个连接权重的学习之后,最终可能会发现,有大量的权重,它们的值都是很小的(也就是这些连接其实无关紧要)。努力学习大量并不重要的权重,这样的学习必将是非常低效的。
-
网络层数限制:
- 网络层数越多其表达能力越强,但是通过梯度下降方法训练深度全连接神经网络很困难,因为全连接神经网络的梯度很难传递超过3层;
- 因此,我们不可能得到一个很深的全连接神经网络,也就限制了它的能力。
-
参数数量限制:
-
CNN的解决方法:
-
概述:
- 都是为了去粗取精,精简参数;
- 对于图像识别任务来说,卷积神经网络通过尽可能保留重要的参数,去掉大量不重要的参数,提高学习效率并降低过拟合的风险。
-
局部连接:
- 每个神经元不再和上一层的所有神经元相连,而只和一小部分神经元相连。这样就减少了很多参数。
-
权值共享:
- 一组连接可以共享同一个权重,而不是每个连接有一个不同的权重,这样又减少了很多参数。
-
下采样:
- 可以使用Pooling来减少每层的样本数,过滤细节,进一步减少参数数量,同时还可以提升模型的鲁棒性。
-
概述:
-
优点:
- 共享卷积核,对高维数据处理无压力;
- 可以自动进行特征提取,卷积层可以提取特征,卷积层中的卷积核(滤波器);真正发挥作用,通过卷积提取需要的特征。
-
缺点:
- 信息丢失,池化层会丢失大量有价值信息,忽略局部与整体之间关联性;
- 黑盒,由于特征提取的封装,为网络性能的改进罩了一层黑盒;
- 局部最优,用梯度下降算法很容易使训练结果收敛于局部最小值而非全局最小值;
- BP低效,当网络层次太深时,采用BP传播修改参数会使靠近输入层的参数改动较慢。
反馈 —— 循环神经网络:
-
原理:
- 一种时间概念上的深度学习结构,环状的深度神经网络,隐藏层的输出可以继续作为其输入不断更新;
- 对于文本分析来说,下一个时间产生的文本会受到前一刻文本的影响,在时间维度上彼此关联,而CNN对输入格式有固定要求就不能满足学习需求了,而RNN没有这方面限制。
-
优点:
- 可以处理任意输入/输出长度;
- 可以使用其内部存储器来处理任意输入序列。
-
缺点:
- 有梯度消失时的问题,当序列很长的时候问题尤其严重;
- 训练非常困难,因为计算能力受到内存和带宽等的约束。
反馈 —— 长短时记忆网络:
-
原理:
- 是RNN模型的一种特殊结构类型,其增加了输入门、输出门、遗忘门三个控制单元(“cell”);
- 随着信息的进入该模型,LSTM中的cell会对该信息进行判断,符合规则的信息会被留下,不符合的信息会被遗忘;
- 以此原理,可以解决神经网络中长序列依赖问题。
-
优点:
- 非常适合用于处理与时间序列高度相关的问题;
- 解决了梯度反传过程由于逐步缩减而产生的Vanishing Gradient问题。
-
缺点:
- RNN的梯度问题在LSTM及其变种里面得到了一定程度的解决,但还是不够;
- 计算费时。每一个LSTM的cell里面都意味着有4个全连接层(MLP),如果LSTM的时间跨度很大,并且网络又很深,这个计算量会很大,很耗时。
数据预处理
目的
对整个数据集进行调整,减少噪音数据对训练数据集的影响,以便提高最终算法的训练效果。
数据优化方法
采样:
-
随机采样:
- 有放回;
- 无放回。
-
系统采样:
- 等距采样,总体单位按某一个顺序分为N个部分,从第一个部分开始,依次对每个部分的K号进行抽取,组成样本;
- 无放回。
-
分层采样:
- 将数据分为若干类别,再在类别中随机抽取一定数量的观察样本。
去除噪声:
- 去除数据集中有干扰的数据。
- 正态分布3σ原则:把3倍方差之外的数据设想成噪声进行去除。
特征缩放/归一化:
-
目的:
-
使得训练函数的收敛速度更快,循环次数更少,去除量纲给计算带来的影响:
- 因为如果特征参数的区间差距很大,那么在代价函数的坐标轴中绘制的等高线就是比较扁高的;
- 这个情况下,梯度下降时容易走之字形,导致迭代次数很多甚至无法收敛;
- 缩放不必追求精确,仅仅是一个比较粗糙的值,将数据范围约束在正负1或0.5之间,比如梯度下降法在数据范围大致相同的情况下收敛的速度将提升;
- 通常使用:(输入数据-数据平均值)/(数据最大值-最小值|或者是标准差)。
-
提高模型的精度:
- 一些分类器是基于欧氏距离计算的,如果特征的区间范围大,那么会导致距离的计算取决于这个特征,从而导致偏差。
-
使得训练函数的收敛速度更快,循环次数更少,去除量纲给计算带来的影响:
-
应用:
-
非概率模型:
- 这些模型因为会受到量纲的影响,所以要进行归一化。
-
概率模型:
- 这些模型不受量纲影响,他们不关心变量的值,而是关心变量的分布和变量之间的条件概率,所以不需要归一化。
-
非概率模型:
数据过滤:
- 先简单判断,将无意义的字段剔除。
模型优化方法
梯度下降法(迭代求解):
-
梯度:
- 所谓梯度,是J(θ)代价函数的偏导数;
- 所谓学习速率α,是梯度下降的步长:
- 步长太小,收敛速度慢;
- 步长太大,可能会越过最小值点,导致无法收敛。
- 所谓梯度下降,是沿着梯度的反向更新θ值,让每次迭代θ都更小,即沿着最陡的方向下坡,直到J(θ)收敛到最小值:
- 负梯度是函数值下降最快的方向。
-
BGM:
-
原理:
- 通过同步更新的方式,对全局数据进行遍历,让代价函数的值无限逼近最小值,尽可能收敛的一种手段。
-
优点:
- 无论特征量多少都能正常运作。
-
缺点:
- 缺点是每次迭代θ,都需要遍历所有数据,计算量过大;
- 需要手动调试α,并多次尝试α。
-
原理:
-
SGM:
-
原理:
- 打乱所有数据集排序,并从一个随机点开始梯度下降,每次迭代只针对一个数据集进行拟合的方式来趋近最小代价函数值。
-
优点:
- 每次迭代只需要针对一个数据集进行拟合,速度快;
- 能够跳出局部最小,因为引入随机因素,即便陷入局部最小,它计算的梯度仍然不可能为0,这样就有机会跳出局部最小。
-
缺点:
- 精度不是很高,往往不能趋近全局最小,而是在其附近徘徊。
-
原理:
-
MBGM:
-
原理:
- 介于BGM和SGM之间,确定一个步长B(2-100)来取B个数据集进行批量迭代,每次批量处理完之后就更新一次θ。
-
优点:
- 比SGM具有更高的精度,因为可以对数据集进行向量化批量处理,此时数据的维数不高不低。
-
缺点:
- 需要调试步长值。
-
原理:
-
确认收敛:
-
函数收敛:
- 极限的概念,当参数无限趋近一个值的时候将有一个近似的有限值,这个值就是要求的。
-
BGM:
- 所有迭代完成后,绘制代价函数曲线。
-
SGM:
- 每1000次迭代,绘制平均代价函数曲线;
- 基于曲线来确认是否收敛,以及是否需要调整学习速率α。
-
函数收敛:
正规方程式(一次求解):
-
原理:
- 通过对参数直接求解;
- 在特征量小于10000,可以考虑使用正规方程求解:
-
优点:
- 无须选择α,对于梯度算法来说,性能的好坏还与学习率的设置有关,学习率设置不合适,时间消耗较长,甚至得不到最优解,而正规方程的方法不需要学习率的设置;
- 无须迭代,当特征点的数量不是很大时,使用正规方程更加简答,不需要像梯度下降算法一样迭代实现,一次计算就可以得出最优参数。
-
缺点:
- 特征量非常多的时候(大于1万),求解过程中矩阵的维度会不断增长,导致计算量巨大,效率低下;
- 对Xt X矩阵有要求,要求其可逆;
- 不能对非线性的代价函数求解,比起梯度下降更具局限性。
偏差与方差:
-
偏差:
- 偏差指的是所有模型的输出的平均值和真实模型输出之间的差别;
- 偏差量度了学习算法的期望预测与真实结果的偏离程度,刻画了算法本身的拟合能力。
-
方差:
- 方差指的是所有模型的输出结果彼此之间的分散程度;
- 方差量度了同样大小的训练集的变动导致的学习性能的变化,刻画了数据扰动造成的影响。
-
噪声:
- 噪声表达了当前任务上任何学习算法所能达到的期望泛化误差的下界,刻画了学习问题本身的难度。
-
泛化误差:
- 偏差+方差+噪声;
- 模型在新样本上的误差。
-
高偏差低方差——欠拟合:
-
原理:
- 模型对训练集数据学习不足,导致拟合曲线忽略了很多关键特征;
- 在训练不足的情况下,拟合能力弱以及扰动不足以影响学习器,所以是偏差主导了泛化误差。
-
避免:
- 特征数量:
- 适当增加必要的特征数量。
- 模型复杂度:
- 增加多项式使假设函数复杂度提升;
- 在代价函数中加入正则化公式,并使得参数足够小。
-
原理:
-
低偏差高方差——过拟合:
-
原理:
- 模型过度学习了训练集数据,导致一些噪声数据也作为了决策依据;
- 随着训练程度加深,拟合能力逐渐增强,而训练数据发生的扰动也开始被学习到了,方差逐渐主导了泛化误差。
-
避免:
- 数据量:
- 数据采样一定要尽可能覆盖全部数据种类,并很好地清洗,避免噪音过多导致提前过拟合;
- 增加数据集数量。
- 特征数量:
- 建模时尽量从相对简单的模型开始,过多特征和过度复杂容易导致过拟合
- 模型复杂度:
- 在代价函数中加入正则化公式,并使得参数足够大。
-
原理:
-
学习曲线:
-
原理:
- 结合了训练集的代价函数曲线,与交叉训练集的代价函数曲线,一同评估误差。
-
如何评价:
- 欠拟合:两函数曲线随着数据量增大,迅速接近相等,同时曲线趋向平缓;
- 过拟合:两函数曲线随着数据量增大,缓慢趋近,同时曲向保持相交的走势。
-
原理:
正则化:
-
原理:
- 在代价函数后加入的惩罚公式,目的是为了降低各项参数的权重从而降低模型的复杂度,规避过拟合;
- 模型越复杂的目的是为了形成更好的曲线或平面去进行拟合,这个时候以偏差主导的情况会渐渐转变为方差主导,因为拟合得越深入越来越多点将被考虑,拟合函数输出的曲线将在剧本有很强的波动。
-
L1正则化:
- 正则化项是向量中各个元素的绝对值之和。
-
L2正则化
- 正则化项是向量中各个元素求平方和之后开方。
-
区别:
-
使用L1范数,可以使得参数稀疏化:
- L1会趋向于产生少量的特征,而其他的特征都是0:
- 如果特征数量少那么拟合能力就会下降。
- 因为最优的参数值很大概率出现在坐标轴上,这样就会导致某一维的权重为0 ,产生稀疏权重矩阵;
- 参数的稀疏,在一定程度上实现了特征的选择:
- 一般而言,大部分特征对模型是没有贡献的;
- 这些没有用的特征虽然可以减少训练集上的误差,但是对测试集的样本,反而会产生干扰;
- 稀疏参数的引入,可以将那些无用的特征的权重置为0。
-
使用L2范数,倾向于使参数稠密地接近于0,避免过拟合:
- L2会选择更多的特征,这些特征都会接近于0;
- 即L2减少的是特征参数的权重,而不是像L1一样减少特征;
- 最优的参数值很小概率出现在坐标轴上,因此每一维的参数都不会是0。当最小化||w||时,就会使每一项趋近于0。
-
使用L1范数,可以使得参数稀疏化:
特征工程
目的
目的是提升训练模型的精度。
特征工程是浅层模型设计时最关键的点,因为算法的选择是有限的,而特征的选择是多样化的,并且这个选择对最终结果的影响也是最关键的。
意义
产品经理需要深入理解行业、理解业务,才能将数据和行业、业务结合,设计出最合适的模型。
特征抽象
目的:
- 将数据源抽象成算法可以理解的数据;
- 只有真正理解业务,把数据和业务结合起来才能挖掘出数据的价值,而这个正是产品经理需要协助工程师做的关键的事情。
数据结构:
- 结构化数据,也是机器学习识别的数据类型;
- 半结构化数据;
- 非结构化数据,如图片语音等,目前做法是转化为二进制格式,然后通过算法挖掘其中信息。
时间戳:
- 取一个时间为基准,将所有时间转化为与那个时间的差值,一个具体数字。
二值类:
- 抽象为0/1。
多值有序类:
- 抽象为0/1/2…
多值无序类:
-
信息阉割:
- 根据预测目标,将目标设为1,其他无论是什么种类都设0。
-
ONE-HOT编码:
- 将文本编码[0\1\2],然后再组合[0,0,1,1,0,0,1]。
特征衍生
目的:
- 将现有特征进行组合,生成新的更具有意义、价值的特征,提升模型的质量;
- 是对数据和业务结合的进一层理解,实际的行业经验。
衍生思路 —— 拆分关系:
-
购物二分类:
- 买;
- 不买。
-
购物行为对象:
- 购物者;
- 商品;
- 购物者和商品的关系。
- 衍生出购物者和商品相关特征,如购买频率、复购率。
特征降维
目的:
- 挖掘出关键的字段并去除噪声,减少了输入矩阵的维度,提升模型的学习效率并减少计算量;
- 保持特征间的独立性。
特征选择 —— 特征重要性评估法:
-
目的:
- 了解特征列对目标列的影响程度,确定其合适的权重;
- 消除不确定性,熵(宏观态下的不确定性)。
信息熵判断(模型还未训练,未雨绸缪):
-
信息熵:
- 考虑这个信息源所有可能发生情况的平均不确定性;
- 一个事物的不确定性越大,其未来发展的可能性就越多,信息量就越大。
-
信息增益:
- 特征能为分类带来多少信息,带来的信息越多,则特征越重要;
- 对一个特征而言,系统有它和没它时信息量将发生变化,这个前后信息量的差值直接是这个特征给系统带来的信息量。
-
信息熵判断:
- 目标量信息增益值 - 特征列信息增益值。
回归模型参数判断(模型至少已经训练过1次):
- 归一化;
- 生成逻辑回归模型;
- 对逻辑回归模型中的参数绝对值大小进行排序。
特征提取:
主成分分析 PCA:
-
原理:
- 用线性映射投影的方法,把高维数据映射到了低位空间中,PCA在投影过程中尽可能保证投影维度上的数据方差最大,同时保留较多原数据点的属性;
- 旋转坐标轴至方差最大的方向。
线性判别式分析 LDA:
-
原理:
- 将高维的模式样本投影到最佳鉴别矢量空间,以达到抽取分类信息和压缩特征空间维数的效果;
- 投影后保证模式样本在新的子空间有最大的类间距离和最小类间距离,即模式在该空间中有最佳的可分离性。
局部线性嵌入 LLE:
-
原理:
- 非线性降维法,降维后可以继续保持数据的流形结构,原来高维度上相近的数据点在低维上依旧距离近。
模型训练
训练并生成备选模型…
模型评估
目的
基于某些标准,选出、调试出概率最适的模型。
验证
K-折交叉验证:
- 将原始数据分成K组(一般是均分),将每个子集数据分别做一次验证集,其余的K-1组子集数据作为训练集,这样会得到K个模型;
- 用这K个模型最终的验证 集的分类准确率的平均数作为此K-CV下分类器的性能指标;
- K一般大于等于2,实际操作时一般从3开始取,只有在原始数据集合数据量小的时候才会尝试取 2;
- K-CV可以有效的避免过学习以及欠学习状态的发生,最后得到的结果也比较具有说服性。
标准
样本指标:
-
TP:
- 对的被预测为对的;
- 实际对。
-
FP:
- 错的被预测为对的;
- 实际错。
-
FN:
- 对的被预测为错的;
- 实际对。
-
TN:
- 错的被预测为错的;
- 实际错。
查准率:
- TP/(TP+FP),在一次预测里面,对的被预测为对的,占所有被预测为对的 的比例;
- 评估的是准确性。
查全率:
- TP/(TP+FN),在一次预测里面,对的被预测为对的,占所有实际是对的 的比例;
- 评估的是覆盖率。
F1值:
- (2X准确率X召回率)/(准确率+召回率);
- 因为准确率和召回率是相互矛盾的,但是我们希望这两个指标尽量高,综合下来创建了F1值来评价。
ROC:
- 通过TP和FP绘制的曲线,曲线越靠近左上角则模型质量越高。
AUC
- 是通过ROC计算出来的面积,面积越大则模型质量越高。
计算成本;
响应速度;
特异性;
通用性。
小结
学习完整个流程之后,对AI设计的思路有了相对深刻的认知,也熟悉了各种基本算法的原理和优劣。
这样,对AI“内视”的框架也基本搭建了起来,今后在面对真实的业务场景时,我相信能很快融入其中并且在继续学习时也有了方向以及基础。