特征工程
将原始数据提炼出特征,提炼的结果作为算法和模型的输入使用。
对数值类型特征做归一化:
是什么:
把所有数据特征统一到一个大致相同的数值区间,消除数据特征之间的量纲影响,使得不同特征之间具有可比性
常用方法:
线性函数归一化 (Min-Max Scaling),进行线性变换,结果映射到[0,1]的分布上。
零均值归一化(Z-Score Normalization),映射到均值为0、标准差为1的分布上。
好处:
有利于提升随机梯度下降计算速度。
可以用等值图帮助理解,图形由椭圆形变为圆形后,x1 x2的更新速度变得更为一致,容易更快
通过梯度下降找到最优解。
使用场景:
线性回归,逻辑回归,支持向量机,神经网络。
不适用场景:
决策树(依据特征增益比,跟是否归一化无关)
对类别型特征的处理
是什么:
类别特征值通常是字符串类型,很多算法中要转换成数值特征才能进行计算工作。
编码如何使用在模型中:
此处需要确认,例如某个类别特征比如 00100 独热编码以什么格式使用到算法中呢。
三种编码方式:
序号编码:通常用于处理类别间具有大小关系的数据。
独热编码:用于处理类别间不具有大小关系的特征。
类别取值较多的情况下需要注意:
1、使用稀疏向量以节省空间,
2、尽可能降低特征的维度(此处需要确认维度的含义,是降低特征个数还是降低某个特征下的取值个数)
高维度会带来以下问题:
K近邻算法两点之间的距离难以衡量
逻辑回归中,参数数量增大,常引起过拟合。
过多的维度并没有对分类和预测有帮助
二进制编码:本质上是利用二进制对ID进行hash映射
步骤:先用序号编码给每个类别赋予一个类别ID,然后将类别ID对应的二进制编码作为结果。
与独热编码相比:二进制编码存储空间少于独热编码
高维组合特征的处理
是什么:
为了提高复杂关系的拟合能力,在特征工程中经常会把一阶离散特征两两组合,构成高阶组合特征。
此处会用原来一阶特征的特征值组合起来当做特征项来使用。
为什么可以提高拟合能力?
此处需要确认提高的原因
组合特征量级比较大的时候怎么办
特征可以分为两类,有限的类别特征和大量的ID类型的特征。
可以用降维的方式表示(此处需要确认如何降维),将用户和物品分别用k维的低维向量表示。
组合带来的问题
如果简单地两两组合,依然容易存在参数过多、过拟合等问题,而且并不是所有的特征组合都是有意义的。
如何有效找到组合特征
梯度提升决策树:方法的思想是每次都在之前构建的决策树的残差上构建下一棵决策树。
此处需要确认梯度提升决策树使用
文本表示模型
词袋模型:
将整段文本以词为单位切分开,然后每篇文章可以表示成一个长向量,
向量中的每一维代表一个单词,而该维对应的权重则反映了这个词在原文章中的重要程度。
单词权重计算公式:
TFIDF(t,d)=TF(t,d)×IDF(t)。
TF(t,d)为单词t在文档d中出现的频率,IDF(t)是逆文档频率。
某个单词在所有文档中出现越多,该单词对应的TDF值越小。
TDF公式=lg (总文件数量/单词出现的文件数量)
Ngram模型:
引入:将文章进行单词级别的划分有时候并不是一种好的做法,往往会忽略连续的词语。
相同含义单词的词干抽取。
主题模型:
主题模型用于从文本库中发现有代表性的主题(得到每个主题上面词的分布特性)
词嵌入模型:
词嵌入是一类将词向量化的模型的统称,
核心思想是将每个词都映射成低维空间(通常K=50~300维)上的一个稠密向量(DenseVector)。
与主题模型相比,主题模型有隐含的主题,K维空间有每一维。
深度学习为什么比机器学习在文本表示方面更好?
深度学习模型为我们提供了一种自动地进行特征工程的方式。
模型中的每个隐层都可以认为对应着不同抽象层次的特征。
卷积神经网络、循环神经网络为什么比全连接网络结构在文本表示方面做得更好?
一方面很好地抓住了文本的特性,
另一方面又减少了网络中待学习的参数,提高了训练速度,并且降低了过拟合的风险。
此处需要确认卷积循环神经网络的原理
Word2Vec
word2vec属于词嵌入模型:
谷歌2013年提出的Word2Vec是目前最常用的词嵌入模型之一。
CBOW 与 Skip-gram:
神经网络表示:
CBOW和Skipgram都可以表示成由输入层(Input)、映射层(Projection)
和输出层(Output)组成的神经网络。
输入层:
使用独热编码表示,是N维输入向量。
权重矩阵1:
输入层与隐含层之间是N x K维的权重矩阵
映射层(又称隐含层):
取值可以由由N维输入向量以及权重矩阵1计算得到。
权重矩阵2:
连接隐含层和输出层之间的K×N维权重矩阵
输出层向量:
输出层向量(N维向量)的值可以通过隐含层向量(K维)以及权重矩阵2计算得到。
Softmax激活函数:
对输出层向量应用Softmax激活函数,可以计算出每个单词的生成概率。
训练神经网络的权重:
训练的目标是使得语料库中所有单词的整体生成概率最大化。
权重矩阵有两个(权重矩阵1和权重矩阵2),学习这两个权重可以用反向传播算法实现。
CBOW(Continues Bag of Words):
CBOW的目标是根据上下文出现的词语来预测当前词的生成概率。
Skip-gram:
Skip-gram是根据当前词来预测上下文中各词的生成概率.
Word2Vec与LDA的区别和联系:
不同 |
word2Vec |
LDA |
算法 |
神经网络 |
概率模型生成 |
似然函数作用位置 |
定义在网络的输出上 |
似然函数可以写成若干条件概率连乘的形式 |
学习目标 |
网络的权重 |
学习的是概率分布 |
图像数据不足时的处理方法
此处跳过
模型评估
两个阶段:
离线评估,在线评估两个阶段
评估的目的:
发现模型选择或训练过程中出现的问题
评估指标选择:
对分类、排序、回归、序列预测等不同类型的机器学习问题,评估指标的选择也有所不同。
模型评估的局限性
准确率的局限性:
准确率是什么:
准确率是指分类正确的样本占总样本个数的比例。
拿测试集举例:测试集总共有10个,8个A类别,2个B类别。
模型预测的是7个A类别,1个B类型,其中6个预测正确,则准确率60%。
该指标局限是什么:
当不同类别的样本比例非常不均衡时,占比大的类别往往成为影响准确率的最主要因素。
当有占比大的类别时如何选择准确率指标?
为了解决这个问题,可以使用更为有效的平均准确率指标
(每个类别下的样本准确率的算术平均)作为模型评估的指标。
精确率与召回率的权衡:
精确率 Precision:
精确率是什么:
精确率是指(被分类器分类为正样本且分类正确的个数)与(分类器判定为
正样本的总的样本个数)的比例。
举例:
测试集总共有10个,其中8个A类别,2个B类别。
模型预测的是7个A类别,3个B类型,其中6个A预测正确,精确率6/7。
召回率 Recall:
是什么:
召回率是指分类正确的正样本个数占真正的正样本个数的比例。
Top N中的指标:
排序的时候,没有确定的一个阈值来判断正负样本。
我们往往选取前N个作为正样本。
计算前N个位置上的准确率Precision@N和前N个位置上的召回率Recall@N。
Precision 与 Recall矛盾统一:
为了提高精度,我们往往减少召回数量,只召回“有把握”的,
但是这样也会导致我们漏掉一些本应该需要召回的正样本。
绘制Precision-Recall曲线:
不同Top N下的Precision和Recall 有利于我们考察不同数量的结果对用户的影响。
画图:
横轴是召回率,纵轴是精确度。
把正样本的阈值由大调小(召回的数据越来越多,逐渐降低概率要求的一个过程),
然后把所有取得阈值点对应的坐标系的点连接起来,就绘制成了P-R图。
一般情况下召回率越来越高,精确度越来越低。
不同模型间还可以对比P-R曲线,放到同一个坐标系下。
F1 Score:
综合地反映一个排序模型的性能。
F1 score是精准率和召回率的调和平均值。
公式: 2 x Precision x Recall / (Precision + Recall)
RMSE 平方根误差的意外:
一般情况下,RMSE能够很好地反映回归模型预测值与真实值的偏离程度。
但在实际问题中,如果存在个别偏离程度非常大的离群点(Outlier)时,即使离群点数量非常少,也会让RMSE指标变得很差。
在解决预测问题时,实际结果与预测得出的RMSE误差很高?
离线预测的时候误差很小,但是对于某些数据误差却很大。
可能是某些异常点造成的。
如何解决个别数据RMSE误差很大的情况?
选择比RMSE鲁棒性更好的评估指标(Mean Absolute Percent Error,MAPE)。
该方法相当一进行了归一化,降低个别离群点带来的绝对误差影响。
ROC -受试者工作特征曲线:
是Receiver Operating Characteristic Curve的简称。
定义:
假阳 FP fasle positive:
N个负样本被预测成正样本。表面是正,其实是负样本。
真阳 TP true positive:
P个正样本被预测成正样本。表面是正,本质上也是正样本。
假阳性率 FPR:
False Positive Rate,FPR。
= FP / N
= N个负样本被预测为正样本数量 / N个真实的负样本数量
真阳性率 TPR:
True Positive Rate,TPR。
= TP / P
= P个正样本被预测为正样本的个数 / P个真实正样本数
ROC定义:
横坐标为假阳性率FPR,纵坐标为真阳性率TPR。
横坐标负的预测错了的比例,纵坐标是正的预测对了比例。
截断点(阈值):
截断点在绘制ROC时使用。
截断点用来分隔模型预测的结果即输出的概率,
大于这个截断点预测为正样本,否则预测为负样本。
绘制图形:
依次调整截断点,求出FPR,TPR,然后在坐标系上标注出对应的ROC点。
最后把点连接起来。
AUC:
曲线下的面积(Aera Under Curve,AUC)。
作用:
AUC越大,说明分类器越可能把真正的正样本排在前面,分类性能越好。
ROC 曲线与 P-R 曲线比较:
ROC曲线有一个特点,当正负样本的分布发生变化时,ROC曲线的形状能够基本保持不变。
PR曲线的形状一般会在当正负样本的分布发生变化时而发生较剧烈的变化。
ROC曲线能够尽量降低不同测试集带来的干扰,更加客观地衡量模型本身的性能。
ROC曲线抗干扰的实际意义:
计算广告领域正负样本悬殊,正样本少,负样本多,1/1000 1/10000。
两者反应的点不同:
ROC曲线能够更加稳定地反映模型本身的好坏。
PR曲线能够更直观地反映到模型在特定数据集上的表现性能。
余弦距离的运用
如何评估样本间的距离:
在分析两个特征向量之间的相似性时,常使用余弦相似度来表示。
余弦距离是什么:
余弦距离是 1 - 余弦相似度。
余弦距离 与 欧氏距离的区别:
余弦相似度关注的是向量之间的角度关系,并不关心它们的绝对大小,其取值范围是[−1,1]。
超参数调优
超参数是什么:
在机器学习的上下文中,超参数是在开始学习过程之前设置值的参数。 相反,其他参数的值通过训练得出。
超参数举例:
树的数量或树的深度
矩阵分解中潜在因素的数量
学习率(多种模式)
深层神经网络隐藏层数
k均值聚类中的簇数
超参数搜索算法的要素
一是目标函数,即算法需要最大化/最小化的目标;
二是搜索范围,一般通过上限和下限来确定;
三是算法的其他参数,如搜索步长。
超参数有哪些调优方法:
网格搜索:
原理:
过查找搜索范围内的所有的点来确定最优值。
如何避免耗时耗资源问题:
先使用较广的搜索范围和较大的步长,来寻找全局最优值可能的位置;
然后会逐渐缩小搜索范围和步长,来寻找更精确的最优值。
缺点:
采用较大的搜索范围以及较小的步长时,
十分消耗计算资源和时间,特别是需要调优的超参数比较多的时候。
网格搜索快速版这种操作,由于目标函数一般是非凸的,所以很可能会错过全局最优值。
随机搜索:
过程:
与网格搜索快速版比较像,不同在于搜索的点是随机选取的。
随机搜索的理论依据:
如果样本点集足够大,那么通过随机采样也能大概率地找到全局最优值,或其近似值。
缺点:
同网格搜索快速班一样,结果同样无法保证。
贝叶斯优化算法:
过程:
网格搜索和随机搜索在测试一个新点时,会忽略前一个点的信息;
而贝叶斯优化算法则充分利用了之前的信息。
贝叶斯优化算法通过对目标函数形状进行学习,找到使目标函数向全局最优值提升的参数。
如何学习目标函数形状:
首先根据先验分布,假设一个搜集函数;
然后,每一次使用新的采样点来测试目标函数时,利用这个信息来更新目标函数的先验分布;
最后,算法测试由后验分布给出的全局最值最可能出现的位置的点。
贝叶斯优化算法的缺点:
一旦找到了一个局部最优值,它会在该区域不断采样,所以很容易陷入局部最优值。
如何避免局部最优解这个缺点:
贝叶斯优化算法会在“探索”和“利用”之间找到一个平衡点,
“探索”就是在还未取样的区域获取采样点;
而“利用”则是根据后验分布在最可能出现全局最值的区域进行采样。
过拟合和欠拟合
拟合是什么:
通俗的讲就是模型对于数据的匹配程度。
过拟合:
模型对于数据拟合过当。
欠拟合:
模型对于数据拟合欠缺的情况。
欠拟合正常拟合过拟合的图形表示:
直线拟合散列点。
一般的线拟合散列点。
特别弯曲的线拟合散列点。
过拟合和欠拟合的共同点:
对新数据的泛化能力都不行。
如何降低过拟合:
1、获得更多的数据
使用一定的规则扩充数据。
通过图像的平移、旋转、缩放等方式扩充数据
可以使用生成式对抗网络来合成大量的新训练数据。
2、降低模型复杂度
在神经网络模型中减少网络层数、神经元个数等;
在决策树模型中降低树的深度、进行剪枝等。
3、正则化方法
给模型的参数加上一定的约束。
将权值的大小加入到损失函数中。
例如:
L2正则化,优化原来的目标函数的同时,
也能避免权值过大带来的过拟合风险。
此处需要确认,如何正则化,以及正则化的原理。
如何降低欠拟合:
1、添加新特征
挖掘“上下文特征”“ID类特征”“组合特征”等。
深度学习潮流中,有很多模型可以帮助完成特征工程:
如因子分解机、梯度提升决策树、Deepcrossing等都可以成为丰富特征的方法。
2、增加模型复杂度
例如:
在线性模型中添加高次项。
在神经网络模型中增加网络层数或神经元个数等。
3、减小正则化系数
此处需要确认当欠拟合出现时如何针对性的减少正则化系数
经典算法
本章将介绍有监督学习中的几种经典分类算法。
机器学习是基础,可以为深度学习打基础,还可以让自己更加理解数据处理的道。
此处需要确认为什么深度学习对无标注问题难以大显身手
支持向量机
(SupportVectorMachine,SVM)。
天使魔鬼黑白球分类的故事:
球放在桌子上,最初可以用木棒分开球,
后来球的摆放很杂乱,天使让球飞在空中,最后用纸片分开了黑白球。
故事与术语的对应:
科学家们把这些球称为“数据”
把木棍称为“分类面”
找到最大间隔的木棒位置的过程称为“优化”
拍桌子让球飞到空中的念力叫“核映射”
在空中分隔球的纸片称为“分类超平面”。
最初的解决问题的空间是“输入空间”
为了解决问题而扩展的空间“核映射空间”
todo 跳过比较耗时
逻辑回归
逻辑回归相比于线性回归
1、处理问题的目标不同
逻辑回归处理的是分类问题,
线性回归处理的是回归问题。
2、因变量取值不同
逻辑回归因变量取值是二元分布
3、求解目标不同
逻辑回归求解的是二元分布因变量的期望E[y|x;theta](此处需要确认)
线性回归求解的是 theta T x。
4、逻辑回归可以转化为线性回归表示
log p/1-p = thetaT * x
p是给定输入x预测为正样本的概率
p/1-p 是几率(odds),事件发生的概率与事件不发生的比值。
逻辑回归可以看做是对于“y=1|x”这一事件的对数几率的线性回归。
5、二者都可以用极大似然估计来进行建模
最小二乘法其实是极大似然函数的一个化简。
6、二者都可以用梯度下降法求解
这也是监督学习中一个常见的相似之处
多分类问题
多分类是指样本存在两个以上的分类标签。
当一个样本只对应一个标签时:
1、假设每个样本属于不同标签的概率服从于几何分布
2、使用多项逻辑回归(SoftmaxRegression)来进行分类
当一个样本对应多个标签时:
增加分类器来解决,一个标签的判断建一个分类器。
多项逻辑回归 softmax Regression 向量化公式:

两个等号中间的向量的每一个元素表示:
在该分类时,样本的概率。
第二个等号右侧的向量中的元素表示:
该分类下的参数乘以样本特征的线性表达,再取自然对数。
注意:每个分类在模型的参数是不一样的,分别对应 theta 1 , ... ,theta k。
theta 属于n维实数向量空间。
多项逻辑回归是二分类逻辑回归的拓展:
控制多分类的类别变换成2,表示二分类逻辑回归。
theta参数再进行线性变换(减去theta 1),可以把假设函数推导成逻辑回归的表示。
决策树
决策树是一种自上而下,对样本数据进行树形分类的过程,由结点和有向边组成。
节点分类:
内部节点:
表示一个特征或者属性,用来进行类别划分。
叶节点:
表示一个类别。
决策树属于监督学习模型。
集成学习:
将决策树应用集成学习的思想可以得到随机森林、梯度提升决策树等模型。
决策树的生成过程:
特征选择、树的构造、树的剪枝。
决策树启发函数
建立决策树的难点:
希望它能拟合训练数据,达到良好的分类效果。
同时又希望控制其复杂度,使得模型具有一定的泛化能力。
选取最优的决策树:
本身是一个NP完全问题。
实际中我们通常会采用启发式学习的方法构建决策树。
常用的决策树算法:
有ID3、C4.5、CART。
ID3——最大信息增益:
找到信息增益最大的特征,递归进行决策树的生长。
只能处理离散型变量。
是多叉树的形式,一个属性多个属性值可能会对应多个树分支。
缺点:
倾向于取值较多的特征。
样本集合D的经验熵公式:

分成K类,Ck是属于k类的样本集合,加上双竖线表示个数。
所有分类在样本集合上的熵。
某个特征A对于数据集D经验条件熵公式:

Di表示A特征的其中一个取值,H(Di)表示A特征的第i个取值的经验熵。
所有分类在某个特征A上的某个特征值i上的熵,
然后用该特征i样本在样本集D上出现的比例乘以上述熵,
对以上两项乘积进行求和,
得到的就是经验条件熵。
信息增益公式:

该公式某个特征的信息增益等于经验熵与经验条件熵的二者之差。
公式中前一项减数是一定大于被减数的。
C4.5——最大信息增益比:
相比DI3:
可以处理连续性变量。
增加了对取值较多的特征的惩罚。
如何处理连续性变量:
1、找切分点,找类别分割线:通过对数据排序之后找到类别不同的分割线作为切分点
根据最大信息增益的方式找一个属性下那一个属性值作为切分点。
见[C4.5算法是怎么离散化属性值为连续型的属性的呢?](https://www.zhihu.com/question/48098439)
见[C4.5如何处理连续值](https://blog.csdn.net/zhangbaoanhadoop/article/details/79904091)
切分点又叫分裂点
2、根据切分点把连续属性转换为布尔型
此处需要确认连续值处理的时候一个特征会生成多个切分节点吗?
某个特征A对于数据集D的信息增益比公式:

数据集D关于特征A的取值熵公式:

CART——最大基尼指数(Gini)
某些资料称之为基尼不纯度,与用来衡量贫富差距的基尼系数是不同的概念。见,[基尼系数与基尼不纯度](https://www.jianshu.com/p/3f340f5999ed)。
基尼不纯度含义与信息熵类似。
相比ID3 、C4.5:
ID3 、C4.5 仅仅可以用于分类。
CART不仅可以分类,还可以进行回归。
ID3 、C4.5 会产生多叉分支,特征不会在多层级之间复用。
CART不会产生多叉分支,特征会在多层级之间复用。
ID3 、C4.5有剪枝,CART直接利用全部数据。
如何对决策树进行剪枝?
剪枝的目的:
提高决策树的泛化能力。
两种剪枝方式:
预剪枝(PrePruning)和后剪枝(PostPruning)
预剪枝:
生成决策树的过程中提前停止树的增长。
生成结点之前,计算模型的泛化能力:
如果能提高泛化能力,继续生长,否则停止生长。
一个节点同时存在多个类别的样本怎么处理:
多数原则
停止决策树生长的方法:
1、控制树的深度
2、对结点的样本数量有要求
3、验证测试集效果是否比生长前要好
后剪枝:
在已生成的过拟合决策树上进行剪枝,得到简化版的剪枝决策树。
先完全生长,然后再统一计算是否剪枝。
则决策树学习的损失函数可以定义为:

C(T)表示模型对训练数据的预测误差,也就是拟合程度。
|T| 表示模型复杂度。
参数a的作用:
较大的的a促使选择较简单的模型。
较小的a促使选择较复杂的模型。
复杂度|T|与拟合度C(T)的关系:
子树越大,拟合越好,模型复杂度越高。
子树越小,拟合不好,模型复杂度越低。
损失函数的意义:
是复杂度和拟合度的平衡。
也就是在复杂度尽可能小的情况下,拟合最好的情况。
所以损失函数加入了复杂度的概念。
预剪枝 VS 后剪枝:
预剪枝思想直接、算法简单、效率高,适合大规模问题的解决。
预剪枝方法1,2
预剪枝有欠拟合风险。
奥卡姆剃刀定律:
奥卡姆剃刀定律不是一个定理,而是一种思考问题的方式。
我们面对任何工作的时候,
如果有一个简单的方法和一个复杂的方法能够达到同样的效果,
我们应该选择简单的那个。
简单更有可能反应事物的内在规律。
决策树生成与决策树剪枝的区别
以下摘自统计统计学习方法-李航
决策树生成只考虑了通过提高信息增益(或信息增益比)对训练数据进行更好的拟合。
而决策树剪枝通过优化损失函数还考虑了减小模型复杂度。
生成学习是局部模型,剪枝学习是全局模型。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。