机器学习基础总结
一、其它
1. 机器学习的编程流程
-
模型的训练过程
a. 数据的加载
b. 数据的清洗
c. 数据的分割
d. 数据的特征工程
e. 算法对象构建
f. 算法模型训练
g. 算法模型的效果评估
-
h. 如果模型评估不好,那么进入模型的调整阶段,主要调整的内容如下:
- -1. 考虑一个数据全不全,能不能通过数据收集的方式增加更多的特征信息
- -2. 考虑一下特征与特征之间的关系,能不能通过特征之间的融合增加一些特征信息
- -3. 根据算法的目标属性的特征,可以考虑换一些算法模型
- -4. 考虑模型的调参(超参数的优化)
- -5. 考虑一下集成算法(bagging、boosting、stacking)
-
i. 如果模型评估非常不错,那么进入模型的保存阶段,主要保存方式如下:
-
方式一:二进制磁盘文件
- 方式:通过sklearn中的joblib将模型保存为二进制磁盘文件的形式
- 优点:简单、对于数据的预测可以实时的预测
- 缺点:仅支持Python语言来加载机器学习模型
-
方式二:预测结果直接保存
- 方式:直接使用训练好的模型对所有数据做一个预测,直接将预测结果保存数据库
- 优点:简单、不受语言的限制
- 缺点:对于新数据是没有预测结果的,只有等到下一次的模型构建&预测的时候,对于新数据才可以产生预测结果
-
方式三:模型参数保存
- 方式:对于某些可以获取模型参数的模型,eg:线性回归、Logistic回归等算法;可以直接将模型参数保存数据库,eg:将线性回归的θ以及截距项直接保存数据库
- 优点:简单、不受语言的限制、对数据可以实时的预测
- 缺点:很多模型是不存在模型参数的或者说没法获取模型参数
-
-
模型的预测过程
-
方式一:二进制磁盘文件
-
- 直接使用sklearn的joblib中的API加载二进制磁盘文件形成对应的算法模型
-
- 使用加载好的算法模型直接对数据做一个预测,并将预测结果返回给调用方
-
-
方式二:预测结果直接保存
-
- 预测模块直接根据相关信息,从数据库中获取预测结果
-
-
方式三:模型参数保存
-
- 从数据库中读取模型参数,然后根据算法的执行过程,将模型参数构建成为一个执行算法函数
-
- 使用构建好的算法函数对数据做一个预测,并将预测结果返回给调用方
-
-
-
模型的更新
-
- 模型需要周期性的定时更新;因为数据会发现变化
-
- 模型更新后,需要考虑新模型和旧模型的效果比较
-
2. 算法模型的效果评估方式
-
分类算法
-
准确率
- 默认的评估指标
精确率
召回率
混淆矩阵
F1值
ROC
AUC
-
-
回归算法
MSE
RMSE
MAE
-
R2
- 默认的评估指标
-
聚类算法
- 轮廓系数
- 其它衡量指标类似分类算法的衡量指标
3. 超参数给定的方式
-
- 根据经验给定
-
- 通过交叉验证的方式给定
-
- 通过GridSearchCV网格参数交叉选择验证的方式给定
二、回归算法
1. 线性回归
-
a. 什么叫做线性回归?
- -1. 算法模型属于回归算法,也就是说目标属性y是连续值
- -2. 如果特征属性x和目标属性y之间的映射关系是一个线性关系,那么构建的这样的一个模型就叫做线性回归
-
b. 线性回归的损失函数是什么?
-
-1. 什么叫做损失函数?
- 确定模型优化方向的一个函数,该函数体现的是预测值和实际值之间的差值信息;当差值越小的时候,也就是损失函数越小的时候,模型最优;通过这种损失函数的定义可以将模型的优化过程转换为对损失函数最小值的求解过程。
-
-2. 常见的损失函数
-
最小平方和损失函数(最小二乘的损失函数)
- 线性回归算法中默认
交叉熵损失函数
-
-
-3. NOTE
机器学习中损失函数是固定的,eg:线性回归使用的就是最小平方和损失函数、Logistic回归使用的交叉熵损失函数....
-
深度学习中一般情况下:
-
回归的应用
- 最小平方和损失函数
-
分类的应用
- 交叉熵损失函数
-
-
-
c. 线性回归算法的求解方式是什么?
直接对损失函数基于线性代数的方式计算最小值(最小二乘的解决)
-
梯度下降
批量的梯度下降
-
随机梯度下降
- 在大规模数据集的训练过程中,建议使用该方式
小批量的梯度下降
-
d. 线性回归存在什么问题?
- 因为在线性回归中,是假定特征属性x和目标属性y之间存在的映射关系是线性关系,但是在实际的业务数据上,x和y之间的关系有可能不是属于线性关系的,所以直接使用线性回归来做模型效果就不太好。解决方案:多项式线性回归
-
e. 扩展的其它的线性回归算法
- 多项式线性回归
- Lasso
- Ridge
- Elastic Net
2. 欠拟合
问题描述:模型没有提取出训练数据集上的数据特性,从而导致训练出来的模型在训练数据集上的效果都不佳。
-
产生的原因:
- 模型的学习能力太弱
- 数据集不适合当前模型
- 数据集中的样本数目太少
-
解决方案:
- 换一种强学习能力的模型
- 使用集成学习的思想来训练模型
- 进行数据的特征工程,将数据变化为适合当前模型的形式
- 增加数据的特征属性或者增加数据的样本量
-
eg: 如何使用线性模型对非线性的数据做一个训练???
- 多项式线性回归:可以考虑先将低维空间上的数据映射到高维空间中,让样本数据变的更加的离散,从而让数据变成线性数据,然后再使用普通的线性回归算法对扩展之后的数据做一个模型训练(一般常见方式:多项式扩展+线性回归)
3. 过拟合
问题描述:模型从训练数据中学习了太多的训练数据特征信息,有可能将一些噪音的异常数据特征也学到了,从而导致模型在测试数据或者生产数据上效果不佳,但是在训练数据集上效果不错。
-
产生的原因:
- 模型的学习能力太强
- 数据集中的样本数目太少
- 数据中的噪音异常样本比较多
-
解决方案
-
限制模型的学习能力(加入正则化项/加入惩罚项)
-
L1 norm
- 在线性回归中,也就是Lasso算法;比较容易导致模型参数稀疏化,比较适合特征选择
-
L2 norm
- 在线性回归中,也就是Ridge算法;算法效果比较稳定
-
更改一下模型超参数,降低一下学习能力
更改模型,使用学习能力弱一点的模型
使用集成算法
增加样本数据量
删除一些无用的特征属性(降低一些噪音特征属性的影响),同时增加一些有效特征属性
-
4. 线性的分类算法
思想:首先对线性回归的算法(普通的线性回归、Ridge等)对数据做一个线性拟合,让其中一个类别的数据,计算的函数值为正,而另外一个类别的数据,计算的函数值为负,从而实现分类的算法
-
Logistic回归
-
什么是logistic回归???
- Logistic回归是一种二分类算法,是通过找出两个类别之间的分割超平面,让其中一个类别的数据位于平面的一侧,而另一个类别的数据位于平面的另一侧,从而实现数据的分类 ----> 首先对数据做一个线性回归的算法,让其中一个类别的数据为正,另外一个类别的数据为负,然后使用sigmoid函数将线性回归的函数值转换为0~1之间的概率值,使用概率值体现样本到底属于哪个类别
-
损失函数给定的过程(公式)
思想:利用最大似然估计的方式给定损失函数
-
步骤:
-
- 编写样本的联合概率密度函数
-
- 求解对数似然函数
-
- 直接使用对数似然函数作为Logistic的损失函数
- NOTE: 该损失函数就是交叉熵损失函数
-
-
-
softmax回归
-
Softmax和Logistic回归的区别?
- Logistic回归是一个二分类算法,是找两个类别的线性分割平面
- Softmax回归是一个多分类算法,是找每个类别所服从的线性回归模型
-
三、KNN
1. KNN的原理/思想:
- 利用在样本空间上,相似样本是集中在同一个区域的,并且相似样本具有相同的特征信息,也就是认为相似样本是具有相同的类别或者相同的预测值y;
利用这种特性,从训练数据中找出和当前待预测样本比较相似的K个样本,使用这K个样本产生预测值;
利用的其实是“近朱者赤近墨者黑”的思想。
2. KNN的执行过程:
-
a. 从训练数据中找出和当前待预测样本最相似的K个样本,将这k个样本称为邻近样本
- -1. k如何确定?
- -2. k个样本如何从训练数据中找出?/ 如果从训练数据找找出最相似度的K个样本?
-
b. 将这k个最相似的邻近样本的目标属性进行融合得到当前待预测样本的预测值
- -3. 目标属性如何融合?
3. KNN算法的问题:
-
-1. k如何确定?
- k属于超参数,一般交叉验证给定
- k值过大或者k值过小会存在问题??? 自己补充
-
-2. k个样本如何从训练数据中找出?/ 如果从训练数据找找出最相似度的K个样本?
- a. 最简单的方式:遍历所有训练数据,计算所有训练数据和当前待预测样本的相似度,保存最相似的K个样本即为邻近样本
- NOTE: 最简单的方式中是否存在问题?
-
-3. 如果训练数据的样本量特别大,eg:1千万样本、1亿样本,那么在这个时候如何找最样本的K个样本?
- note:KD-TREE的构建过程,大家稍微的熟悉一下;; 自己补充
-
-4. 目标属性如何融合?
-
分类算法
- 默认方式:在K个样本中,出现次数最多的那个类别就是预测类别
- 加权方式:在计算类别数目的时候,不是认为所有样本的权重都是一样的,而是认为越相似的样本权重系数越大,那么对应的类别权重系数也就越大,最终的预测类别是权重系数最大的那个类别
-
回归算法
- 默认方式:直接将K个样本的目标属性的y值的均值作为待预测样本的预测值
- 加权方式:在计算类别数目的时候,不是认为所有样本的权重都是一样的,而是认为越相似的样本权重系数越大,那么直接使用权重系数对目标属性y作为加权和的方式
-
4. KNN的优化方式:
- a. 在大规模数据情况下的,KNN的预测过程以及为什么需要使用KD-TREE来构建算法---> KD-TREE
- b. 算法模型的融合过程中为什么要使用加权的方式融合??
四、决策树
1. 决策树的构建过程
- a. 遍历所有的特征的所有划分方式,选择出一个最优划分;那这个最优划分就是让划分之后的数据变的"更纯"
- b. 基于选择出来的最优划分,将数据集分为多个子数据集
- c. 对每个子数据集继续采用相同的操作进行数据的划分,直到每个子数据集中只有一个类别的样本数据或者树的深度达到给定的限制条件的时候,结束构建过程。
- d. 对所有的子数据均进行划分,直到达到限制条件。
2. 决策树构建过程中的目的/方向:
将数据划分为不同的数据子集,划分时候保证:每次的划分,都是让数据变的“更纯”,也就是说让一个子数据集中尽可能的只有一个类别的数据或者某个类别的数据出现的样本占绝大多数。
-
纯度的度量
-
分类:
- 信息熵
- Gini系数
- 错误率
- NOTE: 值越小越好
-
回归:
- MAE
- MSE
- NOTE: 值越小越好
-
3. 决策树的预测值如何产生?
-
分类
- a. 基于决策树中的非叶子节点上的特征属性的判断条件,判断样本x属于哪个叶子节点(样本x落在那个叶子节点上)
- b. 以样本x所落的叶子节点中的所有训练数据中出现次数最多的那个类别作为当前样本x的预测值
-
回归
- a. 基于决策树中的非叶子节点上的特征属性的判断条件,判断样本x属于哪个叶子节点(样本x落在那个叶子节点上)
- b. 以样本x所落的叶子节点中的所有训练数据的目标属性y值的均值作为样本x的预测值
4. 决策树算法的类别
-
ID3
- 分类决策树、只能处理离散的特征数据、构建的是多叉树、特征属性仅可以使用一次
-
C4.5
- 分类决策树、可以处理离散和连续的特征数据、构建的是多叉树、特征属性仅可以使用一次
-
CART
- 分类回归决策树、可以处理离散和连续特征数据、构建的是二叉树、特征属性可以多次使用
5. 决策树的欠拟合和过拟合
-
欠拟合
-
- 利用增加树深度来解决
-
- 利用集成算法Adaboost或者GBDT来解决
-
-
过拟合
-
- 降低树的复杂程度, 也就是限制一下树的深度/规模 ---> 剪枝(大家自己扩展整理一下)
-
- 利用集成学习中的随机森林算法来解决
-
五、集成算法
1. 为什么需要使用集成算法?
- 主要原因是单个模型存在一些问题,eg:效果不佳(欠拟合/模型的拟合能力不够)、模型过拟合(在训练数据上的拟合能力太强/模型的学习能力太强),为了让模型具有根据稳定而且更佳效果的结果,采用使用多模型融合的一种策略,而这种策略就叫做集成算法
2. 集成算法的类别
-
a. Bagging
-
- 思想
- 使用不同的数据集来分别训练模型,然后将多个不同模型的预测结果直接融合产生预测值
- 产生数据集方式:采用有放回的重采样的方式来产生不同的数据集;不同主要体现在两个方面:数据的样本数目不一样、数据样本不一样
- 多个模型的融合方式:如果是分类,那么采用多数投票;如果是回归,那么采用均值法
-
- 效果/作用
- 因为采用的是不同的数据集来训练模型的,所以每个模型考虑的样本特征是不一样的,所以有一些模型可能对于某些特殊特征(eg:噪音数据的特征)进行了学习,但是其它模型由于在训练中是不存在这些数据的,所以可能就不会学习这些特征;那么在将多个模型融合的过程中,这种比较少见的、比较特殊的特征信息在预测过程中就不会做过多的考虑;所以可以让模型具有更高的鲁棒性,从而可以缓解模型的过拟合的情况
-
- 经典的算法
-
随机森林
-
构建的过程
-
- 从m条原始数据中使用有放回的重采样抽取训练数据集m条,将抽取出来的m条数据进行数据去重操作,得到真正用于训练的子数据集
-
- 利用抽取出来的子数据集来构建决策树模型,在决策树的构建过程中,在选择划分特征的时候,引入随机特征划分的策略:首先从原始特征中随机选择K个特征,然后从这K个特征中选择最优的划分特征作为当前节点的划分;这种策略可以降低模型的过拟合(因为此时选择的是局部最优划分)
-
- 使用上述两个操作,迭代构建N次,从而产生N个模型,这N个模型就是最终的随机森林模型
-
- 使用构建好的N个模型分别对待预测样本进行预测,然后将N个预测值做一个融合(分类:多数投票,回归:均值)
-
-
-
-
b. Boosting
-
- 思想
- 使用一种模型迭代的方式,让每一步的模型构建都是让模型的最终预测变的更加的准确;也就是说通过boosting这种方式,可以让模型的预测误差率越来越小;也就是每次模型的构建都是需要基于之前模型的预测结果上的。
-
- 效果/作用
- 可以提升模型的拟合能力,主要的作用就是解决模型的欠拟合
-
- 经典的算法
-
Adaboost
-
思想
- 通过修改样本的权重系数,从而改变在模型构建的时候,各个样本预测失败所带来的损失函数值,让模型在构建的时候对于权重系数比较大的样本着重考虑,也就是尽可能的不要让权重大的样本预测失败
- 在模型融合的时候,对于预测比较准确的基模型,给一个比较大的权重,相当于对于预测准确的模型可信度相对比较高(权重体现的是可信度)
-
构建过程
-
- 给定所有样本初始权重一致
-
- 基于样本以及样本权重训练一个基模型,在这个基模型的构建过程中,对于样本权重大的样本来讲,在该基模型中,对于这些样本预测比较准确
-
- 当当前的基模型训练好后,计算出当前基模型在训练数据集上的准确率,基于这个准确率计算当前模型的可信度权重,准确率越高,那么当前基模型可信度权重越大,也就是表示该模型的预测结果越可靠
-
- 当当前的基模型训练好后,计算出每个训练样本数据的预测情况(预测失败or预测成功),然后根据预测情况修改样本权重,如果预测失败,那么样本权重增大,让该样本在下一个模型构建的时候具有更大的影响因子,如果预测成功,那么样本权重减小。
-
- 当错误率或者子模型的数目达到一定限制的时候,结束模型训练
-
-
预测过程
- 按照模型的训练过程,分别使用基础模型对输入数据进行预测,并将预测结果进行融合(加权和)
-
-
GBDT
-
思想
- 通过修改标签y值,让每次构建的模型的误差都足够小,当模型误差值最小时候,所对应的标签值就是最优值。所以在这个过程中,采用损失函数的梯度值作为下一个模型构建时候的新的y值标签
-
构建过程
-
- 训练出基础模型
-
- 基于当前的基础模型计算一下损失函数梯度值,然后更新训练数据中的标签值,使用梯度值作为标签值
-
- 基于标签值更新的数据继续训练下一个模型
-
- 当损失函数值或者子模型的数目达到一定限制的时候,结束模型训练
-
-
预测过程
- 所有子模型的累加值就是最终的预测值
-
-
XGBoost
-
和GBDT的区别
-
- 加入模型复杂度的考虑,防止模型存在过拟合
-
- 底层构建的时候,GBDT是串行构建,XGBoost在选择划分特征的时候是并行构建
-
- gbdt底层模型只支持决策树,xgboost支持决策树、线性回归等模型
-
-
-
-
c. Stacking
-
结构
- 使用原始数据训练第一层模型,然后使用第一层模型的预测值作为第二层模型的训练数据;这里的第一层模型相当于实现了数据特征提取的功能
结合后面深度学习的能力来了解
-
3. 各中集成算法的区别
- a. boosting和bagging有什么区别?
- b. 随机森林和GBDT有什么区别?
- c. AdaBoost和GBDT有什么区别?
六、聚类算法
1. 什么叫做聚类算法? / 对于聚类算法的理解?
- 如果我们的训练数据中是不存在类别标签信息,而且我们又需要根据数据的特征将这些数据划分成为不同的类别,那就需要使用聚类算法
2. 经典的聚类算法
-
KMeans算法
-
思想
- 通过迭代的方式,让每次簇中心的选择都是让样本数据到簇中心点的距离最小化的一个过程
-
构建过程
-
- 随机初始化给定K个簇中心点
-
- 基于当前簇中心点信息,对于所有样本数据做一个簇的划分;根据每个样本到各个簇中心点的距离,选择距离最近的簇,将当前样本认为属于该簇
-
- 基于当前的簇划分方式,更新簇中心点;选择当前簇中所有样本的均值中心点作为新的簇中心点
-
- 继续迭代上述2和3两个步骤,直到迭代次数达到限制或者簇中心不再发生变化,结束模型的构建;从而得到最终的簇中心点坐标。
-
-
预测过程
- 分别计算待预测样本到所有簇中心点的距离/相似度
- 认为待预测样本的所属簇当距离最近或者相似度最高的那个簇中心
-
伪代码
- TODO: 自己加
-
存在什么问题以及解决方案
-
- 对异常点比较敏感
-
解决方案
- K中值聚类
-
- 对簇中心数目K值比较敏感
-
解决方案
- 因为K是簇的数目,也就是一般是类别数目,在实际工作中的时候,这个类别数目一般是可以确定的,所以在实际工作中一般采用直接给定的方式
- 可以采用一些不需要给定K值的聚类算法来做一个前置的计算, eg: BIRCH算法
-
- 对初始的簇中心点坐标比较敏感
-
解决方案
- a. 二分kmeans
- b. kmeans++
- c. kmeans||
-
- 大规模数据的处理
-
解决方案
- Mini Batch KMeans
-
-
-
Mini Batch KMeans算法
-
和KMeans算法的区别
- KMeans算法在更新簇的时候会采用所有样本,这样在大规模数据的时候对于内存的压力是比较大的;而Mini Batch KMeans算法在更新簇的时候,只需要采用部分样本数据来更新,内存的压力是比较小的,所以比较时候大规模数据的聚类操作
- 效果:Mini Batch KMeans算法比KMeans算法,在训练效率上来讲,要快,但是在效果上来讲,比KMeans算法要稍微的差一点。
-
3. 扩展的聚类算法(了解)
- 层次聚类
- 密度聚类
- 谱聚类
七、SVM算法
1. SVM算法的构建原理/构建思想
SVM是一种二分类的算法,算法的执行目的是尽可能的让两个类别的数据分割开;也就是在两个类别中找到一个最优的数据划分平面,而这个平面是让两个类别的数据分割的足够开的,也就是两个类别的数据离这个平面的距离是足够远的;那这个距离我们称之为间隔,离这个平面最近的样本点我们称为支持向量;所以SVM求解的就是让支持向量到分割平面最大化的这样一个划分平面
-
为什么要找最大分割平面?
- 因为如果这个分割平面足够大,那么表示两个类别的数据特征上区分特别明显,也就是说模型的区分能力足够强,也就是模型的鲁棒性足够的好。
2. SVM的公式推导
- 从最初的最大间隔优化函数开始一致到SMO算法之前的最终优化函数结束,这个过程需要自己能够默写出来、并且各个过程能够理解(建议大家选择线性可分SVM算法的过程)
3. SVM算法对于非线性可分数据的解决方案
-
针对于数据本身是线性可分的,但是由于训练数据中存在异常数据点导致数据线性不可分的情况下,解决方案为:软间隔
- 含义:在模型构建过程中(找最优分割平面的过程中),允许存在部分样本分错的情况,因为允许部分样本分错,所以找到的分隔平面会比不允许分错情况下的大。
-
针对于数据本身就是非线性可分的情况下,解决方案为:核函数
含义:为了解决数据线性不可分的情况,一般采用的方式是将数据映射到高维空间中,让数据变的线性可分,但是将数据映射到高维空间后,使用svm的求解过程中,存在向量的内积计算,这个内积计算对于高维空间的向量而言,计算量会非常大,所以直接映射的方式不可取,所以采用一种用低维度上的向量的运算来近似高维空间中的向量内积,而这种方式就叫做核函数
-
类别:
-
线性核函数
- 这个时候相当于没有做非线性变换,也就是等价于线性可分SVM算法
-
多项式核函数
- 相当于先对数据做一个多项式扩展,然后再做线性可分SVM算法
-
高斯核函数
- 一般情况下,选择该方式的效果最优
- 相当于将数据映射到无穷维空间上,所以效果一般不错
-
4. SMO算法过程(可选,了解)
5. SVR算法原理过程(可选,了解)
-
从和SVC之间的区别来了解一下理念
- 在允许的误差范围内,找到一个最大的超平面,让所有的样本的预测值和实际值之间的差值小于给定的误差
6. 噪音/异常数据拦截的解决方案
-
解决方案的思路:
- 学习正常数据的数据特征,对于待预测数据而言,如果待预测数据的数据特征不符合正常数据特征的话,那么就认为是属于异常数据
-
方式:
- OneClassSVM
- IsolationForest
八、二分类和多分类
1. 有哪些算法属于二分类、有哪些算法属于多分类
-
二分类
- Logistic回归
- SVM算法
-
多分类
- Softmax回归
- KNN
- 决策树
2. 对于原本是二分类的算法,如果应用到多分类的需求中
-
ovo
- 假定数据中存在K个类别,将两两类别的数据进行组合成为一个新的数据集,使用新的数据集来训练模型,总共可以得到K(K-1)/2个模型,最终将这些模型做一个融合。融合方式选择:多数投票(在所有基模型的预测结果中,出现次数最多的那个类别作为最终模型的预测结果)
- NOTE: 每个基模型都是一个二分类的模型
-
ovr
- 假定数据中存在K个类别,将其中一个类别作为正例(1),其它K-1个类别的数据作为负例(-1),使用这样的子数据集来训练一个模型;通过改变正例的类别,分别训练K个模型,最终将这K个基模型做一个融合即可得到最终的预测结果。对于每个基模型而言,如果预测值大于0,那么认为属于正例,如果预测值小于0,那么认为属于负例;所以在K个基模型融合的时候,选择预测值最大的那个模型所对应的正例作为最终的预测结果。
- NOTE:每个基模型都是一个二分类的模型
纠错码机制
九、多标签算法(可选、了解)
1. 什么叫做多标签算法?
- 在模型中,同时存在多个需要预测的目标属性y值
2. 多标签应用的解决方案
- a. 将多标签转换为多分类的算法,认为每个标签相当于多分类中的一个取值;然后使用ovo的方式,进行模型构建
- b. Chains:认为目标属性y值之间是存在依赖关系的,所以在模型构建的时候,直接将所依赖的其它y值作为特征属性存在,来预测当前的y值。
- c. Calibrated Label Ranking
十、贝叶斯算法
1. 理解朴素贝叶斯算法的原理
-
之所以叫做朴素的原因:
- 假设样本的特征属性之间是独立互不相干的
- 样本的所属类别是受特征属性取值影响的
直接利用贝叶斯公式,来计算当x给定的时候,y取值的概率值;选择概率最大的取值作为最终的预测类别
2. 贝叶斯算法的训练过程
-
- 在训练数据中计算各个类别的先验概率p(y=k)
-
- 计算各个类别中,各个特征属性的取值的概率,也就是当类别给定的时候,x取值的条件概率:p(x=i|y=k)
3. 贝叶斯算法的预测过程
- 直接把类别的先验概率以及属性的条件概率做一个累乘,选择累乘结果最大的类别作为最终的输出预测类别
4. 朴素贝叶斯算法的类别
-
高斯朴素贝叶斯
- 假定特征属性的取值是服从高斯分布的,所以该模型比较适合连续的特征属性
- 模型在训练条件概率的时候:会对每个类别的每个特征属性都分别对应的均值和方差,得到该类别该特征属性所满足的高斯概率密度函数。
-
伯努利朴素贝叶斯
- 假定特征属性的取值是稀疏的,也就是将有值的情况认为是属于1,没有值的情况认为是属于0的,所以认为特征属性是服从伯努利分布的,那在训练条件的时候,也就是计算的是伯努利的概率密度函数;该算法比较适合高度稀疏的特征矩阵
-
多项式朴素贝叶斯
- 假定特征属性的取值是服从多项式分布的,所以该模型比较适合离散的特征属性
- 模型在训练条件概率的时候:直接计算每个类别的每个特征属性的取值的样本数目占当前类别总样本数目的概率作为条件概率
- NOTE: 为了防止出现条件概率为0的情况,做一个平滑转换,一般为拉普拉斯变换
十一、EM算法
1. 理解EM算法的过程
2. 理解EM算法的应用场景
- 如果在求解模型参数的同时,存在一些未知的隐变量也需要求解的,那么这个时候就比较合适使用EM算法思想来求解
3. 理解GMM高斯混合聚类
十二、隐马尔科夫
1. 马尔科夫性质
- 在一个序列中,如果当前时刻的状态只和上一个时刻的状态有关,而和之前时刻(除了上一个时刻)的状态没有关系,那么认为这样的序列满足马尔科夫性质
2. 隐马尔科夫
在一个观测序列中,值与值之间是存在关系的,并且这个关系是根据内部的某种状态来产生的,而这些未知的状态(隐状态)之间是满足马尔科夫性质的时候,我们就认为当前的序列的隐状态的求解是隐马尔科夫模型
-
HMM的三个主要元素
- 序列的初始状态概率向量π
- 隐状态之间的状态转移概率矩阵A
- 隐状态和观测值之间的转移概率矩阵B
3. HMM的三个方面的问题
NOTE: 理解一下HMM算法到底可以干嘛 --> 理解一下Viterbi算法
-
a. 观测序列的概率计算问题
- 前向算法
- 后向算法
-
b. 模型参数的求解问题
-
有监督
- 直接统计、大数定理
-
无监督
- EM算法
-
-
c. 隐状态的预测问题
- Viterbi算法
十三、主题模型
1. 为什么需要主题模型?
- 因为如果数据中存在某种隐含的特征信息,eg:文本的主题信息,但是在其它的算法模型中,对于这个隐含的特征信息是不会考虑的,比如:在聚类算法中对文本数据做聚类,这个时候只会考虑单词角度的相似度,不会考虑文本内部主题内容上的相似度。
2. 主题模型有什么作用?
- 提取原始数据中的隐含的特征信息,然后基于提取出来的特征信息再训练后续的模型,模型效果可能会更好,eg: 提取文本的主题内容,然后基于文本的主题内容信息来做一个聚类操作,那这个时候聚类考虑的就是文本与文本之间主题是否相似
3. 主题模型的应用场景有哪些?
- 聚类前的数据预处理
- 特征提取/特征降维
- 推荐系统
4. 常见的主题模型
- LSA
- NMF
- LDA
十四、特征工程(重要)
特征使用方案
-
要实现业务需求目标需要哪些数据?
- 基于业务理解,尽可能多的找出对因变量影响的所有自变量
-
可用性评估
- 获取难度
- 覆盖率
- 准确率
特征获取方案
-
如何获取这些特征?
- 用户行为数据
- 业务数据
- 第三方数据
-
如何存储?
- 本地磁盘
- 数据库
- 大数据平台
数据清洗&特征处理
-
特征清洗
清洗异常样本数据
-
采样
-
数据不均衡
- 权重
- 上采样
- 下采样
- SMOTE算法
样本权重
-
-
特征工程
-
单个特征
归一化、标准化、区间缩放法
离散化/二值化/区间化
哑编码/Dummy Coding
缺失值处理
-
数据变换
- log
- 指数
-
多个特征
-
增维
- 多项式扩展
- 核函数
- GBDT+LR
-
降维
- PCA
- LDA
-
特征选择
-
Filter
- 思路:自变量和因变量之间的关联
- 相关系数
- 卡方检验
- 信息增益、互信息
-
Wrapper
思路:通过目标函数(AUC/MSE)来决定是否加入一个变量
-
迭代:产生特征子集,评价
完全搜索
启发式搜索
-
随机搜索
- GA
- SA
-
Embedded
思路:学习器自身自动选择特征
-
正则化:
- L1--Lasso
- L2--Ridge
-
决策树
- 熵、信息增益
-
-
-
衍生变量
- 对原始数据根据业务进行加工,生成的具有商业意义的变量
-
特征监控
-
特征有效性分析
- 分析特征的重要性、权重
-
特征监控
- 监控重要特征,防止特征质量下降,影响模型效果
经典算法参考:
https://mp.weixin.qq.com/s?__biz=MzIyMzk1MDE3Nw==&mid=2247496852&idx=1&sn=c85184c60f12bd1735081bf26d612f7b&chksm=e814d09adf63598c1a3afc93871df596f108a2cc8041cca0d0a1a4cc52492f7aa81b75d19db3&mpshare=1&scene=23&srcid=10060l4GcAQ0jlbZvMHVmBdR#rd
聚类算法的效果就是根据所给定训练数据的数据特征,基于数据的特征信息,将具有相同特征信息的样本数据认为属于同一个类别/簇,从而实现数据划分的需求
XMind: ZEN - Trial Version