各种算法的应用场景的使用;简单数据,稀疏数据适用简单模型(LR,linearSVM等),连续数据,复杂数据用复杂模型;
各种算法的应用场景介绍:
KNN的使用场景:需要一个特别容易解释的模型时;比如需要向用户解释原因的推荐算法
贝叶斯:使用比较广的是朴素贝叶斯,所以处理不同维度之间相关性比较小的数据,比较适用
决策树:能够清晰的基于选择不同预测结果的树状结构,树的顶层特征往往能代表一些重要的信息
随机森林:数据维度相对较低的数据(几十维度),同时对准确性有较高的要求
SVM:和随机森林一样,对数据的抗干扰能力很强;
LR: 本质上是一种线性分类器,所以处理不好特征之间线性相关的数据;
LR要求特征最好是稀疏的,就是因为稀疏可以使得特征之间的相关性下降
在另一个方面,LR学习到的是每个特征的权重,所以也可以用来特征选择
神经网络:对于复杂特征的数据学习的效果很好;
Boosting:提升算法 自带特征选择,GBDT只是使用CART回归树来作为基分类器(无论是分类模型还是回归模型);
GBDT:一般树的深度为6层左右就可以了,远远的小于随机森林;
GBDT算法的理解:使用购物金额和购物次数两个特征,来预测购物的年龄;
使用cart回归树进行分类模型,对于样本,分为三类,每类构建一颗决策树,
对于每一条样本将标签添加到样本中去(x,0),(x,1),(x,0),对所有的子节点的标签值求平均;
然后作为求残差进行下一轮的迭代;最后用softmax来比较大小;
8:卡方检验特征选择过程理解:
卡方检验用来描述两个特征的独立性,或者是实际值和期望值的偏离程度,如果卡方检验的值越大表示两个特征越独立以及实际值和期望值偏离的越大;
通常会有一个假设,如果计算出的卡方值过大,说明实际与原假设的偏离程度越大;
通常假设检验的方式是:假设两个特征之间是无关的,如果得到的假设检验值p-value值为0.01,表示只有0.01的概率发生这样的事情,也就是有0.99的概率表明原假设错误,也就是有0.99的概率表明两个特征是相关的;
在Python中sklearn中的卡方检验的方式from sklearn.feature_selection import SelectKBest
from sklearn.feature _selection import chi2
model=SelectBest(chi2,k=2)
model.fit_transpose(X_train,y_train)
#返回相应的值得结果;
9:面试中被问到的决策树缺失值的处理:
1. 在选择分裂属性的时候,训练样本存在缺失值,如何处理?(计算分裂损失减少值时,忽略特征缺失的样本,最终计算的值乘以比例(实际参与计算的样本数除以总的样本数))
假如你使用ID3算法,那么选择分类属性时,就要计算所有属性的熵增(信息增益,Gain)。
假设10个样本,属性是a,b,c。在计算a属性熵时发现,第10个样本的a属性缺失,那么就把第10个样本去掉,前9个样本组成新的样本集,在新样本集上按正常方法计算a属性的熵增。
然后结果乘0.9(新样本占raw样本的比例),就是a属性最终的熵。
2.分类属性选择完成,对训练样本分类,发现样本属性缺失怎么办?(将该样本分配到所有子节点中,权重由1变为具有属性a的样本被划分成的子集样本个数的相对比率,计算错误率的时候,需要考虑到样本权重)
比如该节点是根据a属性划分,但是待分类样本a属性缺失,怎么办呢?假设a属性离散,有1,2两种取值,那么就把该样本分配到两个子节点中去,但是权重由1变为相应离散值个数占样本的比例。
然后计算错误率的时候,注意,不是每个样本都是权重为1,存在分数。
3.测试样本中有缺失值怎么办;
使用缺失值补全的方式进行(最简单的方式),填充所有的可能值,为其可能值做一个分类或者回归得到相应的分类结果;