海康
1.电话面试:
介绍你做的项目?
特征选择方法
解释logostic回归?
说一下Xgboost?
Xgboost和GBDT的区别?
发布
2.杭州面
问项目很详细,重点看项目?
你认为你项目的哪一部分做得好?
如果你再给你一次机会,你会考虑什么?
Xgboost特点(我用的更多)?
选择特征的方法?
其他人说我自己的项目,问得很详细,有些你没做过,不要写
多益
(参考这个基本一样;面试官懒得面试几天都用这个题目)
机器学习
监督学习和无监督学习有区别
监督学习:学习标记的训练样本,尽可能分类和预测训练样本集以外的数据。(LR,SVM,BP,RF,GBDT)
无监督学习:训练学习未标记的样本,比发现这些样本中的结构知识要好。(KMeans,DL)
正则化
正则化是为过拟合而提出的,认为解决模型最好的是一般优化最小的经验风险。现在将模型复杂性(正则化是模型参数向量的范数)添加到这个经验风险中,并使用一个rate比率权衡模型的复杂性和以往经验风险的权重。模型复杂度越高,结构化经验风险越大,目前的目标是优化结构化经验风险,可防止模型训练过于复杂,有效降低过拟合的风险。奥卡姆剃刀的原理是最好的模型,可以很好地解释已知数据,非常简单。
过拟合
如果你盲目地提高训练数据的预测能力,所选模型的复杂性往往很高,这种现象被称为过拟合。模型训练的误差很小,但测试的误差很大。
产生的原因
过拟合原因
1. 样本数据问题。
样本太少
抽样方法错误,抽样的样本数据不能有效地代表业务逻辑或业务场景。例如,样本符合正态分布,但按平均分布,或样本数据不能代表整体数据的分布
样本中的噪声数据干扰过大
2. 模型问题
模型复杂度高 、参数太多
决策树模型没有剪枝
权值学习的迭代次数足够多(Overtraining),拟合了训练数据中的噪声和训练例中没有代表性的特征.
解决方法
1. 样本数据。
增加样本数量,降低样本维度,添加验证数据
抽样方法应符合业务场景
清洁噪声数据
2. 模型或训练问题
控制模型的复杂性,优先考虑简单的模型,或使用模型集成技术。
使用先验知识,添加正则项。L1正则更容易产生稀疏解,L正则倾向于使参数w倾向于0.
交叉验证
不要过度训练。优化求解时,收敛前停止迭代。
决策树模型没有剪枝
权值衰
线性分类器与非线性分类器的区别及其优缺点
假如模型是参数的线性函数,并且有线性分类面,那就是线性分类器,否则不是。
常见的线性分类器有:LR,贝叶斯分类,单层感知机,线性回归
常策树、RF、GBDT、多层感知机SVM两者都有(看线性核还是高斯核)
线性分类器速度快,编程方便,但拟合效果可能不是很好
非线性分类器编程复杂,但拟合能力强
为什么LR要使用Sigmod函数?
说到底源于sigmoid,或者说exponentialfamily所具有的最佳性质,即maximum entropy的性质。虽然历史上不清楚先后,但并不妨碍maximum entropy给了logistic regression数学解释很好。为什么maximum entropy好呢?entropy翻译是熵,所以maximum entropy也就是说,最大熵。熵原本是information theory概率分布中使用的概念可以表示分布中包含的不确定性,熵越大,不确定性越大。所以你可以想象熵的均匀分布是最大的,因为基本的新数据是任何值的概率都是平等的。我们现在关心的是熵在给出一些假设后的最大分布。也就是说,在满足我假设的前提下,这种分布应该越均匀越好。例如,众所周知的正态分布假设已知mean和variance后熵分布最大。回过来看logistic regression,这里假设了什么?首先,我们正在进行建模预测 Y|X,并认为 Y|X 服从bernoulli distribution,所以我们只需要知道 P(Y|X);其次,我们需要线性模型,所以 P(Y|X) = f(wx)。接下来,我们只需要知道 f 是什么就行了。我们可以通过最大熵原则推出这个原则 f,就是sigmoid。其实前面也有人剧透。bernoulli的exponential family形式,即 1/ (1 e^-z)
LR与Liner SVM区别
nLinear SVM和LR都是线性分类器
nLinear SVM不直接依赖数据分布,分类平面不受一类点影响;LR则受所有数据点的影响,如果数据不同类别labelly unbalance一般需要先做数据balancing。
nLinear SVM依靠数据表达的距离测量,因此首先需要对数据进行测量normalization(归一化);LR不受其影响Linear SVM依赖penalty实验中需要做的系数validation
nLinear SVM和LR的performance都会收到outlier就其敏感性而言,很难得出明确的结论。
常用的分类算法有哪些?
SVM、神经网络、随机森林、逻辑回归KNN、贝叶斯
请描述大似然估计MLE估计最大后验MAP两者的区别。请解释为什么MLE比MAP过拟合更容易。
最大的估计似乎提供了一种评估模型参数的给定观察数据的方法,即:模型已确定,参数未知。简单地说,假设我们想统计全国人口的身高,首先假设这个身高服从正常分布,是该分布的均值与方差未知。我们没有人力与物力去统计全国每个人的身高,但是可以通过采样,获取部分人的身高,然后通过最大似然估计来获取上述假设中的正态分布的均值与方差。最大后验估计是根据经验数据获得对难以观察的量的点估计。与最大似然估计类似,但是最大的不同时,最大后验估计的融入了要估计量的先验分布在其中。故最大后验估计可以看做规则化的最大似然估计。
SVM为什么引入对偶问题?什么是对偶?
l 对偶问题往往更加容易求解(结合拉格朗日和kkt条件)
可以很自然的引用核函数(拉格朗日表达式里面有内积,而核函数也是通过内积进行映射的)
l 在优化理论中,目标函数 f(x) 会有多种形式:如果目标函数和约束条件都为变量 x 的线性函数, 称该问题为线性规划; 如果目标函数为二次函数, 约束条件为线性函数, 称该最优化问题为二次规划; 如果目标函数或者约束条件均为非线性函数, 称该最优化问题为非线性规划。每个线性规划问题都有一个与之对应的对偶问题,对偶问题有非常良好的性质,以下列举几个:
对偶问题的对偶是原问题;
无论原始问题是否是凸的,对偶问题都是凸优化问题;
对偶问题可以给出原始问题一个下界;
当满足一定条件时,原始问题与对偶问题的解是完全等价的
判别式模型和生成式模型
判别方法:由数据直接学习决策函数 Y = f(X),或者由条件分布概率 P(Y|X)作为预测模型,即判别模型。
生成方法:由数据学习联合概率密度分布函数 P(X,Y),然后求出条件概率分布P(Y|X)作为预测的模型,即生成模型。
由生成模型可以得到判别模型,但由判别模型得不到生成模型。
常见的判别模型有:K近邻、SVM、决策树、感知机、线性判别分析(LDA)、线性回归、传统的神经网络、逻辑斯蒂回归、boosting、条件随机场
常见的生成模型有:朴素贝叶斯、隐马尔可夫模型、高斯混合模型、文档主题生成模型(LDA)、限制玻尔兹曼机
SVM如何实现,SMO算法如何实现?
SMO是用于快速求解SVM的。
它选择凸二次规划的两个变量,其他的变量保持不变,然后根据这两个变量构建一个二次规划问题,这个二次规划关于这两个变量解会更加的接近原始二次规划的解,通过这样的子问题划分可以大大增加整个算法的计算速度,关于这两个变量:
其中一个是严重违反KKT条件的一个变量
另一个变量是根据自由约束确定,好像是求剩余变量的最大化来确定的。
如果训练样本数量少于特征数量,怎么办?
如果训练集很小,那么高偏差/低方差分类器(如朴素贝叶斯分类器)要优于低偏差/高方差分类器(如k近邻分类器),因为后者容易过拟合。然而,随着训练集的增大,低偏差/高方差分类器将开始胜出(它们具有较低的渐近误差),因为高偏差分类器不足以提供准确的模型。你也可以认为这是生成模型与判别模型的区别。维度高用非线性分类器,维度低用线性分类器。
Xgboost是如何调参的?
XGBoost的参数
●General Parameters:
○ booster:所使用的模型,gbtree或gblinear
○ silent:1则不打印提示信息,0则打印,默认为0
○ nthread:所使用的线程数量,默认为最大可用数量
●Booster Parameters(gbtree):
○ eta:学习率,默认初始化为0.3,经多轮迭代后一般衰减到0.01至0.2
○ min_child_weight:每个子节点所需的最小权重和,默认为1
○ max_depth:树的最大深度,默认为6,一般为3至10
○ max_leaf_nodes:叶结点最大数量,默认为2^6
○ gamma:拆分节点时所需的最小损失衰减,默认为0
○ max_delta_step:默认为0
○ subsample:每棵树采样的样本数量比例,默认为1,一般取0.5至1
○ colsample_bytree:每棵树采样的特征数量比例,默认为1,一般取0.5至1
○ colsample_bylevel:默认为1
○ lambda:L2正则化项,默认为1
○ alpha:L1正则化项,默认为1
○ scale_pos_weight:加快收敛速度,默认为1
●Learning Task Parameters:
○ objective:目标函数,默认为reg:linear,还可取binary:logistic、multi:softmax、multi:softprob
○ eval_metric:误差函数,回归默认为rmse,分类默认为error,其他可取值包括rmse、mae、logloss、merror、mlogloss、auc
○ seed:随机数种子,默认为0
解释一下LDA?
主题模型是一个比较广的领域。Spark 1.3加入了隐含狄利克雷分布(LDA),差不多是现今最成功的主题模型。最初被开发用于文本分析和群体遗传学,LDA之后被不断拓展,应用到从时间序列分析到图片分析等问题。首先,我们从文本分析的角度描述LDA。
什么是主题?主题不是LDA的输入,所以LDA必须要从纯文本中推断主题。LDA将主题定义为词的分布。例如,当我们在一个20个新闻组的文章数据集上运行MLlib的LDA,开始的几个主题是:
Adaboost、GBDT和 Xgboost的区别?
1. 传统GBDT以CART作为基分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题)。
2. 2传统GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。顺便提一下,xgboost工具支持自定义代价函数,只要函数可一阶和二阶求导。
3. xgboost在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。从Bias-variancetradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合,这也是xgboost优于传统GBDT的一个特性。
4. Shrinkage(缩减),相当于学习速率(xgboost中的eta)。xgboost在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。实际应用中,一般把eta设置得小一点,然后迭代次数设置得大一点。(补充:传统GBDT的实现也有学习速率)
5. 列抽样(column subsampling)。xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算,这也是xgboost异于传统gbdt的一个特性。
6. 对缺失值的处理。对于特征的值有缺失的样本,xgboost可以自动学习出它的分裂方向。
7. xgboost工具支持并行。boosting不是一种串行的结构吗?怎么并行的?注意xgboost的并行不是tree粒度的并行,xgboost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。xgboost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),xgboost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。
8. 可并行的近似直方图算法。树节点在进行分裂时,我们需要计算每个特征的每个分割点对应的增益,即用贪心法枚举所有可能的分割点。当数据无法一次载入内存或者在分布式情况下,贪心算法效率就会变得很低,所以xgboost还提出了一种可并行的近似直方图算法,用于高效地生成候选的分割点。
Adaboost和gbdt的区别是adaboost对于每个样本有一个权重,样本预估误差越大,权重越大。gradientboosting则是直接用梯度拟合残差,没有样本权重的概念。
SVM 的推导,特性?多分类怎么处理?
SVM是最大间隔分类器,几何间隔和样本的误分次数之间存在关系。
从线性可分情况下,原问题,特征转换后的dual问题,引入kernel(线性kernel,多项式,高斯),最后是soft margin。
线性:简单,速度快,但是需要线性可分
多项式:比线性核拟合程度更强,知道具体的维度,但是高次容易出现数值不稳定,参数选择比较多。
高斯:拟合能力最强,但是要注意过拟合问题。不过只有一个参数需要调整。
多分类问题,一般将二分类推广到多分类的方式有三种,一对一,一对多,多对多。
一对一:将N个类别两两配对,产生N(N-1)/2个二分类任务,测试阶段新样本同时交给所有的分类器,最终结果通过投票产生。
一对多:每一次将一个例作为正例,其他的作为反例,训练N个分类器,测试时如果只有一个分类器预测为正类,则对应类别为最终结果,如果有多个,则一般选择置信度最大的。从分类器角度一对一更多,但是每一次都只用了2个类别,因此当类别数很多的时候一对一开销通常更小(只要训练复杂度高于O(N)即可得到此结果)。
多对多:若干各类作为正类,若干个类作为反类。注意正反类必须特殊的设计
决策树的特性?
决策树基于树结构进行决策,与人类在面临问题的时候处理机制十分类似。其特点在于需要选择一个属性进行分支,在分支的过程中选择信息增益最大的属性,在划分中我们希望决策树的分支节点所包含的样本属于同一类别,即节点的纯度越来越高。决策树计算量简单,可解释性强,比较适合处理有缺失属性值的样本,能够处理不相关的特征,但是容易过拟合,需要使用剪枝或者随机森林。信息增益是熵减去条件熵,代表信息不确定性较少的程度,信息增益越大,说明不确定性降低的越大,因此说明该特征对分类来说很重要。由于信息增益准则会对数目较多的属性有所偏好,因此一般用信息增益率(c4.5) 其中分母可以看作为属性自身的熵。取值可能性越多,属性的熵越大。Cart决策树使用基尼指数来选择划分属性,直观的来说,Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不一致的概率,因此基尼指数越小数据集D的纯度越高,一般为了防止过拟合要进行剪枝,有预剪枝和后剪枝,一般用crossvalidation集进行剪枝。连续值和缺失值的处理,对于连续属性a,将a在D上出现的不同的取值进行排序,基于划分点t将D分为两个子集。一般对每一个连续的两个取值的中点作为划分点,然后根据信息增益选择最大的。与离散属性不同,若当前节点划分属性为连续属性,该属性还可以作为其后代的划分属性。
SVM、LR、决策树的对比?
SVM既可以用于分类问题,也可以用于回归问题,并且可以通过核函数快速的计算,LR实现简单,训练速度非常快,但是模型较为简单,决策树容易过拟合,需要进行剪枝等。从优化函数上看,soft margin的SVM用的是hingeloss,而带L2正则化的LR对应的是cross entropy loss,另外adaboost对应的是exponential loss。所以LR对远点敏感,但是SVM对outlier不太敏感,因为只关心support vector,SVM可以将特征映射到无穷维空间,但是LR不可以,一般小数据中SVM比LR更优一点,但是LR可以预测概率,而SVM不可以,SVM依赖于数据测度,需要先做归一化,LR一般不需要,对于大量的数据LR使用更加广泛,LR向多分类的扩展更加直接,对于类别不平衡SVM一般用权重解决,即目标函数中对正负样本代价函数不同,LR可以用一般的方法,也可以直接对最后结果调整(通过阈值),一般小数据下样本维度比较高的时候SVM效果要更优一些。SVM通过映射到高维在做回归使用的。
GBDT 和 决策森林的区别?
随机森林采用的是bagging的思想,bagging又称为bootstrap aggreagation,通过在训练样本集中进行有放回的采样得到多个采样集,基于每个采样集训练出一个基学习器,再将基学习器结合。随机森林在对决策树进行bagging的基础上,在决策树的训练过程中引入了随机属性选择。传统决策树在选择划分属性的时候是在当前节点属性集合中选择最优属性,而随机森林则是对结点先随机选择包含k个属性的子集,再选择最有属性,k作为一个参数控制了随机性的引入程度。
另外,GBDT训练是基于Boosting思想,每一迭代中根据错误更新样本权重,因此是串行生成的序列化方法,而随机森林是bagging的思想,因此是并行化方法。
如何判断函数凸或非凸?
首先定义凸集,如果x,y属于某个集合C,并且所有的 也属于c,那么c为一个凸集,进一步,如果一个函数其定义域是凸集,并且
则该函数为凸函数。上述条件还能推出更一般的结果,
如果函数有二阶导数,那么如果函数二阶导数为正,或者对于多元函数,Hessian矩阵半正定则为凸函数。
(也可能引到SVM,或者凸函数局部最优也是全局最优的证明,或者上述公式期望情况下的Jessen不等式)
解释对偶的概念
一个优化问题可以从两个角度进行考察,一个是primal 问题,一个是dual 问题,就是对偶问题,一般情况下对偶问题给出主问题最优值的下界,在强对偶性成立的情况下由对偶问题可以得到主问题的最优下界,对偶问题是凸优化问题,可以进行较好的求解,SVM中就是将primal问题转换为dual问题进行求解,从而进一步引入核函数的思想。
如何进行特征选择?
特征选择是一个重要的数据预处理过程,主要有两个原因,首先在现实任务中我们会遇到维数灾难的问题(样本密度非常稀疏),若能从中选择一部分特征,那么这个问题能大大缓解,另外就是去除不相关特征会降低学习任务的难度,增加模型的泛化能力。冗余特征指该特征包含的信息可以从其他特征中推演出来,但是这并不代表该冗余特征一定没有作用,例如在欠拟合的情况下也可以用过加入冗余特征,增加简单模型的复杂度。
在理论上如果没有任何领域知识作为先验假设那么只能遍历所有可能的子集。但是这显然是不可能的,因为需要遍历的数量是组合爆炸的。一般我们分为子集搜索和子集评价两个过程,子集搜索一般采用贪心算法,每一轮从候选特征中添加或者删除,分别成为前向和后先搜索。或者两者结合的双向搜索。子集评价一般采用信息增益,对于连续数据往往排序之后选择中点作为分割点。
常见的特征选择方式有过滤式,包裹式和嵌入式,filter,wrapper和embedding。Filter类型先对数据集进行特征选择,再训练学习器。Wrapper直接把最终学习器的性能作为特征子集的评价准则,一般通过不断候选子集,然后利用cross-validation过程更新候选特征,通常计算量比较大。嵌入式特征选择将特征选择过程和训练过程融为了一体,在训练过程中自动进行了特征选择,例如L1正则化更易于获得稀疏解,而L2正则化更不容易过拟合。L1正则化可以通过PGD, 近端梯度下降进行求解。
机器学习模型的评价指标?
分类:召回率、准确率、F值、ROC-AUC和PRC
回归:R值
小例子:
假设我们手上有60个正样本,40个负样本,我们要找出所有的正样本,系统查找出50个,其中只有40个是真正的正样本,计算上述各指标。
*TP: 将正类预测为正类数 40
*FN: 将正类预测为负类数 20
*FP: 将负类预测为正类数 10
*TN: 将负类预测为负类数 30
准确率(accuracy) = 预测对的/所有 = (TP+TN)/(TP+FN+FP+TN) = 70%
精确率(precision) = TP/(TP+FP) = 80%
召回率(recall) = TP/(TP+FN) = 2/3
为什么会产生过拟合,有哪些方法可以预防或克服过拟合?
一般在机器学习中,将学习器在训练集上的误差称为训练误差或者经验误差,在新样本上的误差称为泛化误差。显然我们希望得到泛化误差小的学习器,但是我们事先并不知道新样本,因此实际上往往努力使经验误差最小化。然而,当学习器将训练样本学的太好的时候,往往可能把训练样本自身的特点当做了潜在样本具有的一般性质。这样就会导致泛化性能下降,称之为过拟合,相反,欠拟合一般指对训练样本的一般性质尚未学习好,在训练集上仍然有较大的误差。
欠拟合:一般来说欠拟合更容易解决一些,例如增加模型的复杂度,增加决策树中的分支,增加神经网络中的训练次数等等。
过拟合:一般认为过拟合是无法彻底避免的,因为机器学习面临的问题一般是np-hard,但是一个有效的解一定要在多项式内可以工作,所以会牺牲一些泛化能力。过拟合的解决方案一般有增加样本数量,对样本进行降维,降低模型复杂度,利用先验知识(L1,L2正则化),利用cross-validation,early stopping等等。
采用 EM 算法求解的模型有哪些,为什么不用牛顿法或梯度下降法?
用EM算法求解的模型一般有GMM或者协同过滤,k-means其实也属于EM。EM算法一定会收敛,但是可能收敛到局部最优。由于求和的项数将随着,会给梯度计算带来麻烦。
EM算法的基本概念和应用场景?
最大期望(EM)算法是在概率(probabilistic)模型中寻找参数最大似然估计或者最大后验估计的算法,其中概率模型依赖于无法观测的隐藏变量(Latent Variable)。假设我们估计知道A和B两个参数,在开始状态下二者都是未知的,并且知道了A的信息就可以得到B的信息,反过来知道了B也就得到了A。可以考虑首先赋予A某种初值,以此得到B的估计值,然后从B的当前值出发,重新估计A的取值,这个过程一直持续到收敛为止。
参考链接:http://www.tuicool.com/articles/Av6NVzy
最大期望经常用在机器学习和计算机视觉的数据聚类领域。
用 EM 算法推导解释 Kmeans
k-means算法是高斯混合聚类在混合成分方差相等,且每个样本仅指派一个混合成分时候的特例。注意k-means在运行之前需要进行归一化处理,不然可能会因为样本在某些维度上过大导致距离计算失效。k-means中每个样本所属的类就可以看成是一个隐变量,在E步中,我们固定每个类的中心,通过对每一个样本选择最近的类优化目标函数,在M步,重新更新每个类的中心点,该步骤可以通过对目标函数求导实现,最终可得新的类中心就是类中样本的均值。
机器学习中如何避免局部最优?
首先改变学习迭代算法,采用adam之类动态更新的迭代算法,或者采用启发式算法,加入规避局部最小值的措施。再或者就是多做几次。
常见聚类算法比较
(1) k-means
优点:简单,易于理解和实现;时间复杂度低,每轮迭代负载度为O(n*k)
缺点:需要对均值给出定义;需要指定聚类的数目;一些过大的异常值会带来很大影响;需要指定初始聚类中心,算法对初始值敏感;适合球形类簇。
(2) 层次聚类(试图在不同层次对数据集进行划分,从而形成树形的聚类结构。AGNES是一种采用自底向上聚合策略的层次聚类算法)
优点:距离和规则的相似度容易定义,限制少;不需要预先指定聚类数目;可以发现类的层次关系;可以聚类成其他形状
缺点:计算复杂度高;奇异值也能产生很大影响;算法很可能聚类成链状
(3) 基于密度的聚类
(4) 基于网格的聚类
(5) 基于平方误差的迭代重分配聚类
(6) 基于约束的聚类
用过哪些聚类算法,解释密度聚类算法
k-means算法,聚类性能的度量一般分为两类,一类是聚类结果与某个参考模型比较(外部指标),另外是直接考察聚类结果(内部指标)。后者通常有DB指数和DI,DB指数是对每个类,找出类内平均距离/类间中心距离最大的类,然后计算上述值,并对所有的类求和,越小越好。类似k-means的算法仅在类中数据构成簇的情况下表现较好,密度聚类算法从样本密度的角度考察样本之间的可连接性,并基于可连接样本不断扩展聚类蔟得到最终结果。DBSCAN(density-based spatial clustering of applications with noise)是一种著名的密度聚类算法,基于一组邻域参数 进行刻画,包括 邻域,核心对象(邻域内至少包含 个对象),密度直达(j由i密度直达,表示j在i的邻域内,且i是一个核心对象),密度可达(j由i密度可达,存在样本序列使得每一对都密度直达),密度相连(xi,xj存在k,i,j均有k可达),先找出样本中所有的核心对象,然后以任一核心对象作为出发点,找出由其密度可达的样本生成聚类蔟,直到所有核心对象被访问过为止。
聚类算法中的距离度量有哪些
聚类算法中的距离度量一般用闽科夫斯基距离,在p取不同的值下对应不同的距离,例如p=1的时候对应曼哈顿距离,p=2的情况下对应欧式距离,p=inf的情况下变为切比雪夫距离,还有jaccard距离,幂距离(闽科夫斯基的更一般形式),余弦相似度,加权的距离,马氏距离(类似加权)作为距离度量需要满足非负性,同一性,对称性和直递性,闽科夫斯基在p>=1的时候满足读来那个性质,对于一些离散属性例如{飞机,火车,轮船}则不能直接在属性值上计算距离,这些称为无序属性,可以用VDM(ValueDiffrence Metrix),属性u上两个离散值a,b之间的VDM距离定义为
其中表示在第i个簇中属性u上a的样本数,样本空间中不同属性的重要性不同的时候可以采用加权距离,一般如果认为所有属性重要性相同则要对特征进行归一化。一般来说距离需要的是相似性度量,距离越大,相似度越小,用于相似性度量的距离未必一定要满足距离度量的所有性质,例如直递性。比如人马和人,人马和马的距离较近,然后人和马的距离可能就很远。
解释贝叶斯公式和朴素贝叶斯分类求解方法
贝叶斯公式
最小化分类错误的贝叶斯最优分类器等价于最大化后验概率
基于贝叶斯公式来估计后验概率的主要困难在于,条件概率 是所有属性上的联合概率,难以从有限的训练样本直接估计得到。朴素贝叶斯分类器采用了属性条件独立性假设,对于已知的类别,假设所有属性相互独立。这样,朴素贝叶斯分类则定义为
如果有足够多的独立同分布样本,那么 可以根据每个类中的样本数量直接估计出来。在离散情况下先验概率可以利用样本数量估计或者离散情况下根据假设的概率密度函数进行最大似然估计。朴素贝叶斯可以用于同时包含连续变量和离散变量的情况。如果直接基于出现的次数进行估计,会出现一项为0而乘积为0的情况,所以一般会用一些平滑的方法,例如拉普拉斯修正
频率学派和贝叶斯派的本质区别
使用随机事件的发生的频率描述概率的方法,就是通常说的古典概型,或者称为频率学派。另外有一个更加综合的观点就是贝叶斯学派,在贝叶斯学派的观点下概率表示的是事件的不确定性大小。
使用概率表示不确定性,虽然不是唯一的选择,但是是必然的,因为如果想使用比较自然的感觉进行合理的综合的推断的话。在模式识别领域,对概率有一个更综合的了解将会非常有帮助。例如在多项式曲线拟合的过程中,对观察的目标变量使用频率学派的观点来理解看起来比较合适。但是我们希望确定最佳模型的参数w的不确定性情况,于是我们可以看见在贝叶斯理论中不仅可以描述参数的不确定性,实际上选择模型本身也是不确定的
优化方法(随机梯度下降、拟牛顿法等优化算法)
两种算法都是通过对数据进行参数评估,然后进行调整,找到一组最小化损失函数的参数的方法。 在标准梯度下降中,您将评估每组参数的所有训练样本。这类似于为解决这个问题而采取了大而缓慢的步骤。 在随机梯度下降中,在更新参数集之前,您只需评估1个训练样本。这类似于向解决方案迈出的小步骤。
特征比数据量还大时,选择什么样的分类器
如果训练集很小,那么高偏差/低方差分类器(如朴素贝叶斯分类器)要优于低偏差/高方差分类器(如k近邻分类器),因为后者容易过拟合。然而,随着训练集的增大,低偏差/高方差分类器将开始胜出(它们具有较低的渐近误差),因为高偏差分类器不足以提供准确的模型。你也可以认为这是生成模型与判别模型的区别。
L1和L2正则的区别,如何选择L1和L2正则?L1在0处不可导,怎么处理
他们都是可以防止过拟合,降低模型复杂度
L1是在loss function后面加上模型参数的1范数(也就是|xi|)L0范数的最小化问题在实际应用中是NP难问题,无法实际应用
L2是在loss function后面加上模型参数的2范数(也就是sigma(xi^2)),注意L2范数的定义是sqrt(sigma(xi^2)),在正则项上没有添加sqrt根号是为了更加容易优化
L1 会产生稀疏的特征
L2 会产生更多地特征但是都会接近于0
L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。L1在特征选择时候非常有用,而L2就只是一种规则化而已。
L1对应拉普拉斯分布,L2对应高斯分布,L1偏向于参数稀疏性,L1不可导可以使用ProximalAlgorithms或者ADMM来解决
随机森林的学习过程;随机森林中的每一棵树是如何学习的;随机森林学习算法中CART树的基尼指数是什么?
随机森林由LeoBreiman(2001)提出,它通过自助法(bootstrap)重采样技术,从原始训练样本集N中有放回地重复随机抽取k个样本生成新的训练样本集合,然后根据自助样本集生成k个分类树组成随机森林,新数据的分类结果按分类树投票多少形成的分数而定。其实质是对决策树算法的一种改进,将多个决策树合并在一起,每棵树的建立依赖于一个独立抽取的样品,森林中的每棵树具有相同的分布,分类误差取决于每一棵树的分类能力和它们之间的相关性。特征选择采用随机的方法去分裂每一个节点,然后比较不同情况下产生的误差。能够检测到的内在估计误差、分类能力和相关性决定选择特征的数目。单棵树的分类能力可能很小,但在随机产生大量的决策树后,一个测试样品可以通过每一棵树的分类结果经统计后选择最可能的分类。
为什么一些机器学习模型需要对数据进行归一化?
http://blog.csdn.net/xbmatrix/article/details/56695825
归一化化就是要把你需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。
1)归一化后加快了梯度下降求最优解的速度。等高线变得显得圆滑,在梯度下降进行求解时能较快的收敛。如果不做归一化,梯度下降过程容易走之字,很难收敛甚至不能收敛
2)把有量纲表达式变为无量纲表达式, 有可能提高精度。一些分类器需要计算样本之间的距离(如欧氏距离),例如KNN。如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要)
3) 逻辑回归等模型先验假设数据服从正态分布。
归一化的类型有线性归一化、标准差归一化、非线性归一化
归一化和标准化的区别?
:
1)把数据变成(0,1)之间的小数
2)把有量纲表达式变成无量纲表达
常见的有线性转换、对数函数转换、反余切函数转换等
:
数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间。在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权。
1 ) 最小-最大规范化(线性变换)
y=((x-MinValue) / (MaxValue-MinValue))(new_MaxValue-new_MinValue)+new_minValue
2)z-score规范化(或零-均值规范化)
y=(x-X的平均值)/X的标准差
3)小数定标规范化:通过移动X的小数位置来进行规范化
y= x/10的j次方 (其中,j使得Max(|y|) <1的最小整数
4).对数Logistic模式:
新数据=1/(1+e^(-原数据))
5)模糊量化模式
新数据=1/2+1/2sin[派3.1415/(极大值-极小值)
特征向量的缺失值处理
1. 缺失值较多.直接将该特征舍弃掉,否则可能反倒会带入较大的noise,对结果造成不良影响。
2. 缺失值较少,其余的特征缺失值都在10%以内,我们可以采取很多的方式来处理:
1) 把NaN直接作为一个特征,假设用0表示;
2) 用均值填充;
3) 用随机森林等算法预测填充
决策树的停止条件
直到每个叶子节点都只有一种类型的记录时停止,(这种方式很容易过拟合)
另一种时当叶子节点的记录树小于一定的阈值或者节点的信息增益小于一定的阈值时停止
SVM、LR、决策树的对比?
模型复杂度:SVM支持核函数,可处理线性非线性问题;LR模型简单,训练速度快,适合处理线性问题;决策树容易过拟合,需要进行剪枝
损失函数:SVM hinge loss; LR L2正则化; adaboost 指数损失
数据敏感度:SVM添加容忍度对outlier不敏感,只关心支持向量,且需要先做归一化; LR对远点敏感
数据量:数据量大就用LR,数据量小且特征少就用SVM非线性核
GBDT 和随机森林的区别?
随机森林采用的是bagging的思想,bagging又称为bootstrap aggreagation,通过在训练样本集中进行有放回的采样得到多个采样集,基于每个采样集训练出一个基学习器,再将基学习器结合。随机森林在对决策树进行bagging的基础上,在决策树的训练过程中引入了随机属性选择。传统决策树在选择划分属性的时候是在当前节点属性集合中选择最优属性,而随机森林则是对结点先随机选择包含k个属性的子集,再选择最有属性,k作为一个参数控制了随机性的引入程度。
另外,GBDT训练是基于Boosting思想,每一迭代中根据错误更新样本权重,因此是串行生成的序列化方法,而随机森林是bagging的思想,因此是并行化方法。
监督学习一般使用两种类型的目标变量
标称型和数值型
标称型:标称型目标变量的结果只在有限目标集中取值,如真与假(标称型目标变量主要用于分类)
数值型:数值型目标变量则可以从无限的数值集合中取值,如0.100,42.001等 (数值型目标变量主要用于回归分析)
为什么说朴素贝叶斯是高偏差低方差?
它简单的假设了各个特征之间是无关的,是一个被严重简化了的模型。所以,对于这样一个简单模型,大部分场合都会bias部分大于variance部分,也就是高偏差,低方差
决策树的父节点和子节点的熵的大小?请解释原因。
父节点的熵>子节点的熵
最好是在项目/实习的大数据场景里用过,比如推荐里用过 CF、LR,分类里用过 SVM、GBDT;
一般用法是什么,是不是自己实现的,有什么比较知名的实现,使用过程中踩过哪些坑;
KMeans怎么选择聚类中心?如果存在空块怎么办?
1) 选择批次距离尽可能远的K个点
首先随机选择一个点作为第一个初始类簇中心点,然后选择距离该点最远的那个点作为第二个初始类簇中心点,然后再选择距离前两个点的最近距离最大的点作为第三个初始类簇的中心点,以此类推,直至选出K个初始类簇中心点。
2) 选用层次聚类或者Canopy算法进行初始聚类,然后利用这些类簇的中心点作为KMeans算法初始类簇中心点。 常用的层次聚类算法有BIRCH和ROCK,在此不作介绍
如何确定K-mean中的值?
给定一个合适的类簇指标,比如平均半径或直径,只要我们假设的类簇的数目等于或者高于真实的类簇的数目时,该指标上升会很缓慢,而一旦试图得到少于真实数目的类簇时,该指标会急剧上升。类簇的直径是指类簇内任意两点之间的最大距离。类簇的半径是指类簇内所有点到类簇中心距离的最大值
机器学习常见优化算法比较
概率论:均匀分布如何转变为高斯分布?
由均匀分布生成标准正态分布主要有3种方法:Box–Muller算法 ,中心极限定理和Kinderman and Monahanmethod。
给你公司内部群组的聊天记录,怎样区分出主管和员工?
如何评估网站内容的真实性(针对代刷、作弊类)?
深度学习在推荐系统上可能有怎样的发挥?
路段平均车速反映了路况,在道路上布控采集车辆速度,如何对路况做出合理估计?采集数据中的异常值如何处理?
如何根据语料计算两个词词义的相似度?
在百度贴吧里发布 APP 广告,问推荐策略?
如何判断自己实现的 LR、Kmeans 算法是否正确?
100亿数字,怎么统计前100大的?
常见的聚类算法?
校正R2或者F值是用来评估线性回归模型的。那用什么来评估逻辑回归模型?
1.由于逻辑回归是用来预测概率的,我们可以用AUC-ROC曲线以及混淆矩阵来确定其性能。
2.此外,在逻辑回归中类似于校正R2的指标是AIC。AIC是对模型系数数量惩罚模型的拟合度量。因此,我们更偏爱有最小AIC的模型。
3.空偏差指的是只有截距项的模型预测的响应。数值越低,模型越好。残余偏差表示由添加自变量的模型预测的响应。数值越低,模型越好。
推荐系统:
推荐系统的实现主要分为两个方面:基于内容的实现和协同滤波的实现。
基于内容的实现:
不同人对不同电影的评分这个例子,可以看做是一个普通的回归问题,因此每部电影都需要提前提取出一个特征向量(即x值),然后针对每个用户建模,即每个用户打的分值作为y值,利用这些已有的分值y和电影特征值x就可以训练回归模型了(最常见的就是线性回归)。这样就可以预测那些用户没有评分的电影的分数。(值得注意的是需对每个用户都建立他自己的回归模型)
从另一个角度来看,也可以是先给定每个用户对某种电影的喜好程度(即权值),然后学出每部电影的特征,最后采用回归来预测那些没有被评分的电影。
当然还可以是同时优化得到每个用户对不同类型电影的热爱程度以及每部电影的特征。具体可以参考Ng在coursera上的ml教程:
基于协同滤波的实现:
协同滤波(CF)可以看做是一个分类问题,也可以看做是矩阵分解问题。协同滤波主要是基于每个人自己的喜好都类似这一特征,它不依赖于个人的基本信息。比如刚刚那个电影评分的例子中,预测那些没有被评分的电影的分数只依赖于已经打分的那些分数,并不需要去学习那些电影的特征。
SVD将矩阵分解为三个矩阵的乘积,公式如下所示:
中间的矩阵sigma为对角矩阵,对角元素的值为Data矩阵的奇异值(注意奇异值和特征值是不同的),且已经从大到小排列好了。即使去掉特征值小的那些特征,依然可以很好的重构出原始矩阵。如下图所示:
其中更深的颜色代表去掉小特征值重构时的三个矩阵。
果m代表商品的个数,n代表用户的个数,则U矩阵的每一行代表商品的属性,现在通过降维U矩阵(取深色部分)后,每一个商品的属性可以用更低的维度表示(假设为k维)。这样当新来一个用户的商品推荐向量X,则可以根据公式X’*U1*inv(S1)得到一个k维的向量,然后在V’中寻找最相似的那一个用户(相似度测量可用余弦公式等),根据这个用户的评分来推荐(主要是推荐新用户未打分的那些商品)。具体例子可以参考网页:SVD在推荐系统中的应用。另外关于SVD分解后每个矩阵的实际含义可以参考google吴军的《数学之美》一书(不过个人感觉吴军解释UV两个矩阵时好像弄反了,不知道大家怎样认为)。或者参考machine learning in action其中的svd章节。
TF-IDF是什么?
TF指Term frequecy,代表词频,IDF代表inverse document frequency,叫做逆文档频率,这个算法可以用来提取文档的关键词,首先一般认为在文章中出现次数较多的词是关键词,词频就代表了这一项,然而有些词是停用词,例如的,是,有这种大量出现的词,首先需要进行过滤,比如过滤之后再统计词频出现了中国,蜜蜂,养殖且三个词的词频几乎一致,但是中国这个词出现在其他文章的概率比其他两个词要高不少,因此我们应该认为后两个词更能表现文章的主题,IDF就代表了这样的信息,计算该值需要一个语料库,如果一个词在语料库中出现的概率越小,那么该词的IDF应该越大,一般来说TF计算公式为(某个词在文章中出现次数/文章的总词数),这样消除长文章中词出现次数多的影响,IDF计算公式为。将两者乘乘起来就得到了词的TF-IDF。传统的TF-IDF对词出现的位置没有进行考虑,可以针对不同位置赋予不同的权重进行修正,注意这些修正之所以是有效的,正是因为人观测过了大量的信息,因此建议了一个先验估计,人将这个先验估计融合到了算法里面,所以使算法更加的有效。
文本中的余弦距离是什么,有哪些作用?
余弦距离是两个向量的距离的一种度量方式,其值在-1~1之间,如果为1表示两个向量同相,0表示两个向量正交,-1表示两个向量反向。使用TF-IDF和余弦距离可以寻找内容相似的文章,例如首先用TF-IDF找出两篇文章的关键词,然后每个文章分别取出k个关键词(10-20个),统计这些关键词的词频,生成两篇文章的词频向量,然后用余弦距离计算其相似度。
如何解决类别不平衡问题?
2. 处理不平衡数据集的方法
2.1.1 随机欠采样(RandomUnder-Sampling)
2.1.2 随机过采样(RandomOver-Sampling)
2.1.3 基于聚类的过采样(Cluster-BasedOver Sampling)
在这种情况下,K-均值聚类算法独立地被用于少数和多数类实例。这是为了识别数据集中的聚类。随后,每一个聚类都被过采样以至于相同类的所有聚类有着同样的实例数量,且所有的类有着相同的大小。
2.1.4 信息性过采样:合成少数类过采样技术(SMOTE)
这一技术可用来避免过拟合——当直接复制少数类实例并将其添加到主数据集时。从少数类中把一个数据子集作为一个实例取走,接着创建相似的新合成的实例。这些合成的实例接着被添加进原来的数据集。新数据集被用作样本以训练分类模型。
2.15 改进的合成少数类过采样技术(MSMOTE)
2.2 算法集成技术(AlgorithmicEnsemble Techniques)
Bagging boosting
什么是贝叶斯估计
new 和 malloc 的区别
hash冲突是指什么?怎么解决?给两种方法,写出过程和优缺点。
是否了解线性加权、bagging、boosting、cascade等模型融合方式
LDA的原理和推导 做广告点击率预测,用哪些数据什么算法 推荐系统的算法中最近邻和矩阵分解各自适用场景 用户流失率预测怎么做(游戏公司的数据挖掘都喜欢问这个) 一个游戏的设计过程中该收集什么数据 如何从登陆日志中挖掘尽可能多的信息
推荐系统的冷启动问题如何解决
是否了解A/B Test以及A/B Test结果的置信度
给你一个有1000列和1百万行的训练数据集。这个数据集是基于分类问题的。经理要求你来降低该数据集的维度以减少模型计算时间。你的机器内存有限。你会怎么做?(你可以自由做各种实际操作假设。)
1.由于我们的RAM很小,首先要关闭机器上正在运行的其他程序,包括网页浏览器,以确保大部分内存可以使用。
2.我们可以随机采样数据集。这意味着,我们可以创建一个较小的数据集,比如有1000个变量和30万行,然后做计算。
3.为了降低维度,我们可以把数值变量和分类变量分开,同时删掉相关联的变量。对于数值变量,我们将使用相关性分析。对于分类变量,我们可以用卡方检验。
4.另外,我们还可以使用PCA(主成分分析),并挑选可以解释在数据集中有最大偏差的成分。
5.利用在线学习算法,如VowpalWabbit(在Python中可用)是一个可能的选择。
6.利用StochasticGradientDescent(随机梯度下降)法建立线性模型也很有帮助。
7.我们也可以用我们对业务的理解来估计各预测变量对响应变量的影响大小。但是,这是一个主观的方法,如果没有找出有用的预测变量可能会导致信息的显著丢失。
在PCA中有必要做旋转变换吗?如果有必要,为什么?如果你没有旋转变换那些成分,会发生什么情况?
旋转(正交)是必要的,因为它把由主成分捕获的方差之间的差异最大化。这使得主成分更容易解释。
但是不要忘记我们做PCA的目的是选择更少的主成分(与特征变量个数相较而言),那些选上的主成分能够解释数据集中最大方差。通过做旋转,各主成分的相对位置不发生变化,它只能改变点的实际坐标。
如果我们没有旋转主成分,PCA的效果会减弱,那样我们会不得不选择更多个主成分来解释数据集里的方差。
给你一个数据集。这个数据集有缺失值,且这些缺失值分布在离中值有1个标准偏差的范围内。百分之多少的数据不会受到影响?为什么?
这个问题给了你足够的提示来开始思考!由于数据分布在中位数附近,让我们先假设这是一个正态分布。我们知道,在一个正态分布中,约有68%的数据位于跟平均数(或众数、中位数)1个标准差范围内的,那样剩下的约32%的数据是不受影响的。因此,约有32%的数据将不受到缺失值的影响。
给你一个癌症检测的数据集。你已经建好了分类模型,取得了96%的精度。为什么你还是不满意你的模型性能?你可以做些什么呢?
如果你分析过足够多的数据集,你应该可以判断出来癌症检测结果是不平衡数据。在不平衡数据集中,精度不应该被用来作为衡量模型的标准,因为96%(按给定的)可能只有正确预测多数分类,但我们感兴趣是那些少数分类(4%),是那些被诊断出癌症的人。
因此,为了评价模型的性能,应该用灵敏度(真阳性率),特异性(真阴性率),F值用来确定这个分类器的“聪明