博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
机器学习整理
阅读量:5347 次
发布时间:2019-06-15

本文共 13158 字,大约阅读时间需要 43 分钟。

 

黑塞矩阵是由目标函数 在点X处的二阶偏导数组成的  阶

1.L1与L2区别?L1为啥具有稀疏性? 

L1是向量各元素的绝对值之和,L2是向量各元素的平方和

l1求导(弱导数)后,在x=0附近其系数相比l2的导数2x大,导致l1罚产生了主导作用,而l2罚的导数在0附近依然很小。

2.sigmoid函数的导函数的取值范围是多少?

y取值[0,1]

求导后,一元二次方程的y值范围,[0,1/4]

xgboost的原理

介绍xgboost、gbdt、rf的区别 

 

bagging和boosting

boosting算法的工作机制是给每一个样本分配一个初始权重,然后用训练样本和权重训练处弱分类器1,根据弱分类器1更新样本的权重,再训练弱分类器2,如此重复进行,直到学习器达到指定的数目,最终将这些弱学习器集成强学习器。可以看出各个弱分类器之间是串行的。

bagging算法的各个弱分类器是并行的,相互之间没有影响,可以单独训练。但是单个学习器的训练数据是不一样的。假设原始数据中有n个样本,有T个弱学习器,在原始数据中进行T次有放回的随机采样,得到T个新数据集,作为每个弱分类器的训练样本,新数据集和原始数据集的大小相等。每一个新数据集都是在原始数据集中有放回的选择n个样本得到的。

 

GBDT原理

GBDT与传统的Boosting区别较大,它的每一次计算都是为了减少上一次的残差,而为了消除残差,我们可以在残差减小的梯度方向上建立模型,所以说,在GradientBoost中,每个新的模型的建立是为了使得之前的模型的残差往梯度下降的方法,与传统的Boosting中关注正确错误的样本加权有着很大的区别。

在GradientBoosting算法中,关键就是利用损失函数的负梯度方向在当前模型的值作为残差的近似值,进而拟合一棵CART回归树。
GBDT的会累加所有树的结果,而这种累加是无法通过分类完成的,因此GBDT的树都是CART回归树,而不是分类树(尽管GBDT调整后也可以用于分类但不代表GBDT的树为分类树)。

1. GBDT相比于决策树有什么优点

泛化性能更好!GBDT的最大好处在于,每一步的残差计算其实变相的增大了分错样本的权重,而已经分对的样本则都趋向于0。这样后面就更加专注于那些分错的样本。

2. Gradient体现在哪里?

可以理解为残差是全局最优的绝对方向,类似于求梯度。

 

random forest优点

a.对于很多数据集表现良好,精确度比较高;
b. 不容易过拟合;
c.可以得到变量的重要性排序->能够处理很高维的数据,并且不用特征选择,而且在训练完后,给出特征的重要性
d. 既能处理离散型数据,也能处理连续型数据,且不需要进行归一化处理;
e. 能够很好的处理缺失数据;
f. 容易并行化等等。

 

偏差和方差区别

偏差指的是算法的期望预测与真实预测之间的偏差程度,反应了模型本身的拟合能力;
方差度量了同等大小的训练集的变动导致学习性能的变化,刻画了数据扰动所导致的影响。
当模型越复杂时,拟合的程度就越高,模型的训练偏差就越小。但此时如果换一组数据可能模型的变化就会很大,即模型的方差很大。所以模型过于复杂的时候会导致过拟合。

 

分类的评价标准

准确度accuracy,AUC,精确率-召回率(Precision-Recall),对数损失函数,F1-score等等 

 

SVM引入核函数本质?

提高维度,增加模型复杂度

树模型的特征选择中除了信息增益、信息增益比、基尼指数这三个外,还有哪些?

得看树的类型吧?回归树的话可以用均方差的减少量。xgboost里用到的是自定义函数的增益值。

ID3算法采用信息增益

C4.5算法采用信息增益比
CART采用Gini系数
XGBoost 

 

PCA输出什么

Sklearn中树模型输出的特征重要程度是本身的还是百分比? 

百分比

size = 10000np.random.seed(seed=10)X_seed = np.random.normal(0, 1, size)X0 = X_seed + np.random.normal(0, .1, size)X1 = X_seed + np.random.normal(0, .1, size)X2 = X_seed + np.random.normal(0, .1, size)X = np.array([X0, X1, X2]).TY = X0 + X1 + X2rf = RandomForestRegressor(n_estimators=20, max_features=2)rf.fit(X, Y);print "Scores for X0, X1, X2:", map(lambda x:round (x,3),                                    rf.feature_importances_)

Scores for X0, X1, X2: [0.278, 0.66, 0.062]

当计算特征重要性时,可以看到X1的重要度比X2的重要度要高出10倍,但实际上他们真正的重要度是一样的。尽管数据量已经很大且没有噪音,且用了20棵树来做随机选择,但这个问题还是会存在。

需要注意的一点是,关联特征的打分存在不稳定的现象,这不仅仅是随机森林特有的,大多数基于模型的特征选择方法都存在这个问题。

 

PCA 提取的是数据分布方差比较大的方向,隐藏层可以提取有预测能力的特征

 

测试集和验证集的区别

 训练集就是用来训练参数的,说准确点,一般是用来梯度下降的。
而验证集基本是在每个epoch完成后,用来测试一下当前模型的准确率。
因为验证集跟训练集没有交集。从狭义来讲,验证集没有参与梯度下降的过程,也就是说是没有经过训练的;但从广义上来看,验证集却参与了一个“人工调参”的过程,我们根据验证集的结果调节了迭代数、调节了学习率等等,使得结果在验证集上最优。

生成模型与判别模型

判别方法:由数据直接学习决策函数 Y = f(X),或者由条件分布概率 P(Y|X)作为预测模型,即判别模型。

生成方法:由数据学习联合概率密度分布函数P(X,Y),然后求出条件概率分布P(Y|X)作为预测的模型,即生成模型。
由生成模型可以得到判别模型,但由判别模型得不到生成模型。
常见的判别模型有:K近邻、SVM、决策树、感知机、线性判别分析(LDA)、线性回归、传统的神经网络、逻辑斯蒂回归、boosting、条件随机场
常见的生成模型有:朴素贝叶斯、隐马尔可夫模型、高斯混合模型、文档主题生成模型(LDA)、限制玻尔兹曼机

最大似然估计:现在已经拿到了很多个样本(你的数据集中所有因变量),这些样本值已经实现,最大似然估计就是去找到那个(组)参数估计值,使得前面已经实现的样本值发生概率最大。因为你手头上的样本已经实现了,其发生概率最大才符合逻辑。这时是求样本所有观测的联合概率最大化,是个连乘积,只要取对数,就变成了线性加总。此时通过对参数求导数,并令一阶导数为零,就可以通过解方程(组),得到最大似然估计值。(利用已知的样本结果反推最有可能(最大概率)导致这样结果的参数值。

最小二乘:找到一个(组)估计值,使得实际值与估计值的距离最小。本来用两者差的绝对值汇总并使之最小是最理想的,但绝对值在数学上求最小值比较麻烦,因而替代做法是,找一个(组)估计值,使得实际值与估计值之差的平方加总之后的值最小,称为最小二乘。“二乘”的英文为least square,其实英文的字面意思是“平方最小”。这时,将这个差的平方的和式对参数求导数,并取一阶导数为零,就是OLSE。

 

ErrorBar(误差棒图)

是统计学中常用的图形。ErrorBar图涉及到数据的“平均值”和“标准差”。

下面举例子理解误差棒图中涉及到的“平均值”和“标准差”。

 某地降雨量的误差棒图[1]如图1所示,从横纵1月份的刻度值往正上查找时,可发现1月份的降雨量对应于一个“工”字型的图案。该“工”字型的图案的中间的点对应的纵轴的刻度值(大约12),表示该地1月份的降雨量的“平均值”,大约12cm。而“工”字型图案的上横线或下横线所对应的纵轴的刻度值到中间点(即均值)的差值大约为0.5,表示该地1月份的降雨量的“标准差”大约为0.5cm。

 

1) 每次可以选择每两三个维度,然后做plot.

2) 把数据映射到低维度再做观察 (PCA,LDA,MDS..etc)

KNN维度灾难

knn的基础是距离。维度灾难在使用距离的比较时问题尤甚。 

会导致这个问题是因为,当维度增大时,距离某个样本点单位距离内的其他样本点数量的比值会减少,这会导致我们寻找更远的距离才能找到临近的值。 
注意,虽然看起来对于knn选择的k个样本点并没有影响,但问题是选择的样本点随着维度的增高,距离该样本是越来越远的,因此没有那么有参考价值了。 
这是维度灾难对于knn影响特别大的地方。

 

假设有一个特征,它的取值范围D在0到1之间均匀分布,并且对狗和猫来说其值都是唯一的,我们现在利用这个特征来设计分类器。如果我们的训练数据覆盖了取值范围的20%(e.g 0到0.2),那么所使用的训练数据就占总样本量的20%。上升到二维情况下,覆盖二维特征空间20%的面积,则需要在每个维度上取得45%的取值范围。在三维情况下,要覆盖特征空间20%的体积,则需要在每个维度上取得58%的取值范围...在维度接近一定程度时,要取得同样的训练样本数量,则几乎要在每个维度上取得接近100%的取值范围,或者增加总样本数量,但样本数量也总是有限的。

在分类中我们使用的特征数量越多,那么由于高维下数据的稀疏性我们不得不需要更多的训练数据来对分类器的参数进行估计(高维数下分类器参数的估计将变得更加困难)。维数灾难造成的另外一个影响是:数据的稀疏性致使数据的分布在空间上是不同(实际上,数据在高维空间的中心比在边缘区域具备更大的稀疏性,数据更倾向于分布在空间的边缘区域)。

简单来说就是不对样本的总体分布做假设,直接分析样本的一类统计分析方法。

通常对样本进行统计分析的时候,首先要假设他们来自某个分布,然后用样本中的数据去estimate这个分布对应的参数,之后再做一些test之类。比如你假设某个样本来自同一个正态分布,然后用样本数据估算\mu\sigma,再用估算出来的这两个值做test。

non-pararmetric则不然,不对总体分布做假设,自然也就不必estimate相应的参数。

非参数机器学习算法的一些常见例子包括:

  • KNN
  • 决策树,比如CART和C4.5
  • SVM

参数机器学习算法的一些常见例子包括:

  • Logistic Regression
  • LDA(线性判别分析)
  • 感知机
  • 朴素贝叶斯
  • 简单的神经网络

 

不同初值对算法有影响

感知机由于采用不同的初值或选取不同的误分类点,解可以不同,对偶形式和原始形式都是。

kmeans的K值和K个初始类簇中心点对于聚类效果的好坏有很大的影响,不同的初始类簇中心点或不同的k值聚类的结果不同。

EM算法对初值敏感

神经网络w b初值 

 

Precision 和Recall

精确率是指分类器分类正确的正样本的个数占该分类器所有分类为正样本个数的比例。
召回率是指分类器分类正确的正样本个数占所有的正样本个数的比例。

 

Min-Max Normalization和Z-score使用场景

在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,第二种方法(Z-score standardization)表现更好。

在不涉及距离度量、协方差计算、数据不符合正态分布的时候,可以使用第一种方法或其他归一化方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。

 

归一化与标准化本质是使得目标函数的Hessian矩阵的条件数变小,有更好的收敛性质了。

对条件数来个一句话总结:条件数 是一个矩阵(或者它所描述的线性系统)的稳定性或者敏感度的度量,如果一个矩阵的 条件数在1附近,那么它就是well-conditioned的,如果远大于1,那么它就是 ill-conditioned 的,如果一个系统是 ill-conditioned 的,它的输出结果就不要太相信了。

 概率模型、决策树不需要归一化,因为他们不关心变量的值,而是关心变量的分布和变量之间的条件概率。像SVM、线性回归之类的最优化问题需要归一化。归一化之后加快了梯度下降求最优解的速度,并有可能提高精度。 

 

关于升维和降维区别

1、升维和降维有什么区别

   降维是为了降低特征的复杂度,

  升维是因为在低维空间无法有效分类,当映射到高维时却是可以进行好的分类
  eg: 打个比方,你在两张纸上随机的画点,如果以纸的二维平面要把两张平面上的点分开,这个是很难分的
           但是如果你增加一维,那么你直接就从两张纸的中间分开就行了
2、升维是不是也要考虑复杂度啊
  是的,比如纸的这个问题,你升到四维就是多余的

5、降维和聚类是不是本质一样的啊?
   完全不一样,降维的对象是向量的各维,聚类的对象是N个向量 。
  降维的对象是单个的向量么?当然是,比如,空间中一个点有x, y, z坐标,我现在降维到x,  y 坐标。
  聚类是干什么?我现在有N个点,每个点都以x  , y ,z 来表示,然后我把N个点分为几个类。
   eg:现在我们用word2vec训练一个文本,训练后就是‘一个’向量,如果感觉维度大的话,我们就要做降维处理。
   但是是否要做降维处理,也要具体问题具体分析。
 
 
原始问题和对偶形式
每一个线性规划问题,我们称之为原始问题,都有一个与之对应的线性规划问题我们称之为对偶问题。原始问题与对偶问题的解是对应的,得出一个问题的解,另一个问题的解也就得到了。并且原始问题与对偶问题在形式上存在很简单的对应关系:
  • 目标函数对原始问题是极大化,对对偶问题则是极小化
  • 原始问题目标函数中的收益系数(优化函数中变量前面的系数)是对偶问题约束不等式中的右端常数,而原始问题约束不等式中的右端常数则是对偶问题中目标函数的收益系数
  • 原始问题和对偶问题的约束不等式的符号方向相反
  • 原始问题约束不等式系数矩阵转置后即为对偶问题的约束不等式的系数矩阵
  • 原始问题的约束方程数对应于对偶问题的变量数,而原始问题的变量数对应于对偶问题的约束方程数
  • 对偶问题的对偶问题是原始问题
总之他们存在着简单的矩阵转置,系数变换的关系。当问题通过对偶变换后经常会呈现许多便利,如约束条件变少、优化变量变少,使得问题的求解证明更加方便计算可能更加方便。
作者:刘亚迪
链接:https://www.zhihu.com/question/26526858/answer/92557148

如何理解感知机学习算法的对偶形式?

对偶形式将权重向量w转化为实例x_i和标记y_i的线性组合形式,且在统计学习方法中也提到,对偶形式中的训练实例仅以内积的形式出现,所以可以预先使用Gram矩阵存储,也就是时间换空间的方法提高计算效率

 

过拟合原因和解决

过拟合有两种原因:

训练集和测试机特征分布不一致(白天鹅黑天鹅)

或者模型太过复杂(记住了每道题)而样本量不足

解决过拟合也从这两方面下手,收集多样化的样本,简化模型,交叉检验。

 

ROC和PR曲线的选择

如果负样本对于问题没有多大价值,或者负样本比例很大。 那么,PR曲线通常更合适。比如样本正负比例非常不平衡,且正样本非常少见,那我们使用PR曲线。 举个例子:欺诈检测,其中非欺诈样本可能为10000,而欺诈样本可能低于100。

否则ROC会更有用

 

卡方检验原理

卡方检验最基本的思想就是通过观察实际值与理论值的偏差来确定理论的正确与否。

具体做的时候常常先假设两个变量确实是独立的(行话就叫做“原假设”),然后观察实际值(也可以叫做观察值)与理论值(这个理论值是指“如果两者确实独立”的情况下应该有的值)的偏差程度:

如果偏差足够小,我们就认为误差是很自然的样本误差,是测量手段不够精确导致或者偶然发生的,两者确确实实是独立的,此时就接受原假设;

如果偏差大到一定程度,使得这样的误差不太可能是偶然产生或者测量不精确所致,我们就认为两者实际上是相关的,即否定原假设,而接受备择假设。

公式:

理论值为均值E(这也是数学期望的符号哦),实际值为x。

方差代替均值,可以解决了正负抵消的问题;除以E让均值的大小不影响我们对差异程度的判断

当提供了数个样本的观察值x1,x2,……xi ,……xn之后,代入到式中就可以求得卡方值,用这个值与事先设定的阈值比较,如果大于阈值(即偏差很大),就认为原假设不成立,反之则认为原假设成立。

例子

 

线性SVM分类器和Softmax线性分类器的主要区别

线性SVM分类器和Softmax线性分类器的主要区别在于损失函数不同。SVM更关注分类正确样本和错误样本之间的距离( \Delta=1 ),只要距离大于 \Delta ,就不在乎到底距离相差多少,忽略细节。而Softmax中每个类别的得分函数都会影响其损失函数的大小。举个例子来说明,类别个数C=3,两个样本的得分函数分别为[10, -10, -10],[10, 9, 9],真实标签为第0类。对于SVM来说,这两个 L_i 都为0;但对于Softmax来说,这两个 L_i 分别为0.00和0.55,差别很大。

 

最大似然估计:现在已经拿到了很多个样本(你的数据集中所有因变量),这些样本值已经实现,最大似然估计就是去找到那个(组)参数估计值,使得前面已经实现的样本值发生概率最大。因为你手头上的样本已经实现了,其发生概率最大才符合逻辑。这时是求样本所有观测的联合概率最大化,是个连乘积,只要取对数,就变成了线性加总。此时通过对参数求导数,并令一阶导数为零,就可以通过解方程(组),得到最大似然估计值。

最小二乘:找到一个(组)估计值,使得实际值与估计值的距离最小。本来用两者差的绝对值汇总并使之最小是最理想的,但绝对值在数学上求最小值比较麻烦,因而替代做法是,找一个(组)估计值,使得实际值与估计值之差的平方加总之后的值最小,称为最小二乘。“二乘”的英文为least square,其实英文的字面意思是“平方最小”。这时,将这个差的平方的和式对参数求导数,并取一阶导数为零,就是OLSE。

 

最小二乘与极大似然函数的关系?

最小二乘法以估计值与观测值的差的平方和作为损失函数,极大似然法则是以最大化目标值的似然概率函数为目标函数,从概率统计的角度处理线性回归并在似然概率函数为高斯函数的假设下同最小二乘建立了的联系。 

最大似然法需要已知概率分布函数,一般假设其满足正态分布函数的特性,在这种情况下,最大似然估计和最小二乘估计是等价的,也就是说估计结果是相同的

 

协方差矩阵有什么意义?

从物理意义上说,就是计算各维度之间的相关性(前提是已经经过白化)。

由于样本特征均值白化后为0,各特征方差一样,计算得到的协方差矩阵,其中元素的值越大,则说明对应下标的特征之间相关性越高。

PCA就是基于这种性质。

 

我们可以知道,在EM框架下,求得的参数θ一定是收敛的,能够找到似然函数的最大值。那么K-Means是如何来保证收敛的呢?

目标函数

假设使用平方误差作为目标函数

E-Step

固定参数μk,将每个数据点分配到距离它本身最近的一个簇类中:

M-Step

固定数据点的分配,更新参数(中心点)μk:

所以,答案有了吧。为啥K-means会收敛呢?目标是使损失函数最小,在E-step时,找到一个最逼近目标的函数γ;在M-step时,固定函数γ,更新均值μ(找到当前函数下的最好的值)。所以一定会收敛了~

 

=1,和无关

 后面两项是常数项,去掉还是等价的。于是便有

 

验证集获取:

一般的解决方法是将已有的数据集随机划分成两个个部分,一个用来训练模型,另一个用来验证与评估模型

另一种方法是重采样,即对已有的数据集进行有放回的采样,然后将数据集随机划分成两个部分,一个用来训练,一个用来验证。

至于具体的做法有hold-out validation、k-fold cross-validation(交叉验证)、bootstrapping与jackknife resampling

超参数的调优:

模型参数使指通过模型训练中的学习算法而进行调整的,而模型超参数不是通过学习算法而来的,但是同样也需要进行调优。

常见方法:格搜索(grid search)、随机搜索(random search)以及启发式搜索(smart search)等

之后用验证集预测并与真实值对比确定超参数的优劣,可以用交叉验证

 

模型本身参数的训练不使用交叉验证,使用已有的全部数据训练,验证与评估模型和训练模型不是一回事

 

这取决于你的损失函数。 在许多情况下,对于偏离平均值的点给予更多的权重是有意义的 - 也就是说,10的偏差是5倍的偏差的两倍多。在这种情况下,RMSE是更合适的误差度量。

如果十分钟比五分钟差一倍,那么MAE更合适。

 

 

当你想使用(R)MSE而不是MAE时,这是另一种情况:当你的观测的条件分布是不对称的,而你想要一个无偏差的拟合。 (R)MSE最小化均值,MAE最小化中位数。 所以,如果你最小化MAE,那么拟合会更接近中位数并且有偏差。

 

推导:

(1)最小二乘法英文名Least Squares,其实翻译成「最小平方法」,更容易让人理解。其核心就是定义了损失函数;

(2)评价误差的方法不止一个,还有诸如  等(当然这就不是最小二乘法了);

(3)最小二乘法不仅可以用于一次函数的拟合,还可以用于更高次函数的拟合;

(4)最小二乘法既是一种曲线拟合的方法,也可用于最优化(如梯度下降)。

 

最优化方法:

梯度下降法

牛顿法和拟牛顿法

启发式优化方法  模拟退火方法、遗传算法、蚁群算法以及粒子群算法等等。

 EM算法

 

为什么梯度的负方向是局部下降最快的方向?

  • 梯度的由来

   函数 z = f(x,y) 在p(x,y) 点沿哪一方向增加的速度最快? 我们定义梯度的方向是函数在该点增长最快的方向。由方向导数公式推导如下

  

其中cos(G,el)=1时,方向导数取得最大值 |G|,我们称G为梯度。梯度的方向与偏导的方向一致,增加的速度最快。二元函数z=f(x,y)的梯度,记为

  可知,函数在某点的梯度是一个向量,它是方向导数取得最大值的方向,而它的模为方向导数的最大值。

  • 等值线与梯度的表示

  梯度的方向与过点p的等值线上的法向量的一个方向相同,且指向等值线(函数值)增加的方向。在几何上 z = f(x,y) 表示一个曲面,曲面被 z=c 所截得的曲线在xoy轴投影如下图2,对f(x,y) = c2 对x求导,其中涉及到y是x的隐变量,得

  在p点的切线斜率是,则由以上公式可得法向量的斜率是,这也正是梯度的斜率(下图1)。又由于沿梯度的方向导数大于0,所以沿梯度方向是函数增加。

       

        图1

 

几何意义:

矩阵乘法对应了一个变换,是把任意一个向量变成另一个方向或长度都大多不同的新向量。在这个变换的过程中,原向量主要发生旋转、伸缩的变化。如果矩阵对某一个向量或某些向量只发生伸缩变换,不对这些向量产生旋转的效果,那么这些向量就称为这个矩阵的特征向量,伸缩的比例就是特征值。

 

特征值对应的特征向量就是理想中想取得正确的坐标轴,而特征值就等于数据在旋转之后的坐标上对应维度上的方差。

也就是说,直接求出矩阵A的特征向量得出对应的特征向量。我们就能找到旋转后正确的坐标轴。这个就是特征值和特征向量的一个实际应用:“得出使数据在各个维度区分度达到最大的坐标轴。”

所以,在数据挖掘中,就会直接用特征值来描述对应特征向量方向上包含的信息量,而某一特征值除以所有特征值的和的值就为:该特征向量的方差贡献率(方差贡献率代表了该维度下蕴含的信息量的比例)。

通常经过特征向量变换下的数据被称为变量的主成分,当前m个主成分累计的方差贡献率达到一个较高的百分数(如85%以上)的话,就保留着这m个主成分的数据。实现了对数据进行降维的目的。整个主成分分析的算法原理也就是这个。

 

遗传算法( GA,  Genetic Algorithms )

遗传算法可参考  。

算法描述:首先随机产生一批特征子集,并用评价函数给这些特征子集评分,然后通过交叉、突变等操作繁殖出下一代的特征子集,并且评分越高的特征子集被选中参加繁殖的概率越高。这样经过N代的繁殖和优胜劣汰后,种群中就可能产生了评价函数值最高的特征子集。

缺点:依赖于随机因素,有实验结果难以重现。

 

神经网络,正则项放在最后一层

batch normalization和drop out在

 

k-d tree算法原理

k-d tree是每个节点均为k维数值点的二叉树,其上的每个节点代表一个超平面,该超平面垂直于当前划分维度的坐标轴,并在该维度上将空间划分为两部分,一部分在其左子树,另一部分在其右子树。即若当前节点的划分维度为d,其左子树上所有点在d维的坐标值均小于当前值,右子树上所有点在d维的坐标值均大于等于当前值,本定义对其任意子节点均成立。
1.1)树的构建
一个平衡的k-d tree,其所有叶子节点到根节点的距离近似相等。但一个平衡的k-d tree对最近邻搜索、空间搜索等应用场景并非是最优的。
常规的k-d tree的构建过程为:循环依序取数据点的各维度来作为切分维度,取数据点在该维度的中值作为切分超平面,将中值左侧的数据点挂在其左子树,将中值右侧的数据点挂在其右子树。递归处理其子树,直至所有数据点挂载完毕。

 

MAE MSE对比

1.以MAE为损失的模型相比,以MSE为损失的模型会赋予更高的权重给离群点

MAE损失适用于训练数据被离群点损坏的时候(即,在训练数据而非测试数据中,我们错误地获得了不切实际的过大正值或负值)。

直观来说,我们可以像这样考虑:对所有的观测数据,如果我们只给一个预测结果来最小化MSE,那么该预测值应该是所有目标值的均值。但是如果我们试图最小化MAE,那么这个预测就是所有目标值的中位数。我们知道中位数对于离群点比平均值更鲁棒,这使得MAE比MSE更加鲁棒。

2.使用MAE损失(特别是对于神经网络)的一个大问题是它的梯度始终是相同的,这意味着即使对于小的损失值,其梯度也是大的。这对模型的学习可不好。为了解决这个问题,我们可以使用随着接近最小值而减小的动态学习率。MSE在这种情况下的表现很好,即使采用固定的学习率也会收敛。MSE损失的梯度在损失值较高时会比较大,随着损失接近0时而下降,从而使其在训练结束时更加精确。

决定使用哪种损失函数?

如果离群点是会影响业务、而且是应该被检测到的异常值,那么我们应该使用MSE。

另一方面,如果我们认为离群点仅仅代表数据损坏,那么我们应该选择MAE作为损失。

 

 

经验风险最小化

损失函数越小,模型就越好,接下来用期望风险来描述模型在整个数据集上的损失,假设我们已经得到了数据的概率测度P(X,Y),那么就可以计算损失函数的期望即期望风险:

 

这里假设数据集包含了所有可能的数据,即P(x,y)是已知的,显然这是不可能的,我们只能尽量多的获取数据集中的数据,但是不可能获得所有输入空间中的数据。有了期望风险学习的目标就确定了,即找到使期望风险最小的模型,但是就像前面说明的,全部数据的分布是未知的,那么求解期望风险的问题就是一个病态问题。那该怎么办呢,虽然我么不知道数据集的概率测度,但是我们拥有给定的一定的独立同分布的样本,因此,我们可以用模型f(x)在这个给定的样本集上的平均损失最小化来代替无法求得得期望风险最小化。

    如果数据是独立同分布,因此就不用考虑数据集的概率密度了,当然,这也会造成一定的损失,但是结果是可信的。

假设给定的数据集为:

经验风险或经验损失函数为:

 

使用经验风险泛函最小的函数来逼近期望风险泛函最小的函数,这一原则成为经验风险最小化归纳原则(ERM原则)。

根据大数定律,当样本数趋于无穷大时,经验风险趋于期望风险。但是,在实际应用中,训练样本的个数是有限的,甚至还会很少,所以使用经验风险逼近期望风险的效果就不好了。

对于小样本问题,经验风险效果并不理想,因为经验风险最小化容易带来过拟合现象。过拟合现象其实就是模型的选择太在意训练误差了,反而导致预测误差随着训练误差减小而增大,造成训练结果不理想。

结构风险最小化

    为了解决经验风险最小化逼近引发的一系列问题,vpnik等几位大牛发展了现代的统计学习理论,提出了结构风险最小化,更加适合解决小样本问题,并且提出了寻找结构风险最小化的方法,这一套理论发展出了有名的分类器:基于VC维理论和结构风险最小化的支持向量机SVM,它能够更快更迅速的解决小样本问题,在大样本集上也有一些基于稀疏矩阵的改进方法,成为2000年来的研究热点之一。

VC维概念:

函数集Q(f)的VC维是指能够被集合中的函数以所有可能的2^h种方式,分成两类的样本的最大数目h。另一个说法是:假如存在一个有h个样本的样本集能够被函数集中的函数按照所有可能的2^h方式分成两类,则称该函数集能把样本为h的样本集打散。VC维就是h的最大值,对于h+1,函数集就无法打乱了。对于线性函数,其VC维很简单,就是函数维数+1。

定义N(f)代表函数集Q(f)中的函数能够把给定的样本分成多少种类,称H(f)=ln(N(f))为随机熵,描述了函数集在给定数据上的多样性,引入生长函数G(n)=ln(N(f)),则生长函数与VC维的关系为:

G(h)=hln2

G(h+1)小于(h+1)ln2

即生长函数或者是线性的,或者以对数为上界。如果函数集的生长函数是线性的,则函数集的VC维是无穷大的,因为函数集能够打散的数据集数目可以无限大,反之,如果生长函数是以参数h的对数函数为界,则函数集的VC维就是h。

VC衡量了一个函数集的复杂程度,VC维越大,函数集越复杂,虽然函数打散的样本数增加了,但是计算函数的复杂度却增加了,反而不能得到好的结果(引起过拟合),VC维越小,函数集越简单,求解速度快而且方便。支持向量机只关注对偶公式中参数不为0的支持向量的那些样本,因此VC维很小。奥卡姆剃刀原理:在所有可能选择的模型中,能够很好地解释已知数据并且十分简单的才是最好的模型。

经验风险和期望风险的误差是依概率有界的,通过一系列复杂的公式推导我们得到如下公式:

其中,n为样本数,h为VC维,不等式右边第一项为经验风险,第二项为置信风险,是一个减函数,整个公示反映了经验风险和真实误差的差距上界,表征了根据经验风险最小化原则得到的模型的泛化能力。称为泛化误差上界。 

上述公示表明:当样本数较大时,n/h很大,置信范围就会很小,经验风险最小化接近实际最优解,而当n/h比较小时,置信范围就会很大,经验风险最小化泛化能力就差。

结构风险=经验风险+置信风险

 

链接:https://www.nowcoder.com/discuss/29988?type=0&order=0&pos=7&page=1

来源:牛客网

 

LR模型为什么采用似然估计损失函数

答:因为最小二乘法是假设残差服从正太分布的,而LR在sigmoid 作用后就不会服从正态分布了,所以采用的是最大似然估计。

面试后思考:1.最小二乘法反映的是线性空间上的线性投影的最短距离,在非线性空间上表现不如MLE。(MLE可以看作一种特殊情况下的Bayesian 估计,具体来说,就是在prior 是 diffuse (无知的)情况下,让posterior 分布取得极大值的系数值)

2.如果采用均方差最损失函数的时候,梯度下降求偏导时会有一项导数项,这样会导致梯度在一定阶段会收敛的特别慢,而对数损失函数log正好能和sigmoid的exp抵消掉,会加快收敛速度。

更优解?

最小二乘法是高斯分布下最大似然估计的一般结果,LR是伯努利分布下最大似然估计的一般结果(交叉熵损失),所以两者本质上都是最大似然估计

转载于:https://www.cnblogs.com/34fj/p/8678325.html

你可能感兴趣的文章
项目--简单导出CSV文件
查看>>
Oracle session相关数据字典(一)
查看>>
织梦文章内容提取第一张或者多张图片输出
查看>>
C#用正则表达式 获取网页源代码标签的属性或值
查看>>
BZOJ 3399 [Usaco2009 Mar]Sand Castle城堡(贪心)
查看>>
WCF(一) 简单的认知
查看>>
[MFC][DShow]简单例子
查看>>
降序排列
查看>>
十一、类型转换
查看>>
面试内容,值得一看
查看>>
UILabel
查看>>
【热门技术】三种SEO方式
查看>>
[Hades_技术]哈迪斯初级技术应用
查看>>
SQLiteOpenHelper
查看>>
Luogu P1141 01迷宫【搜索/dfs】By cellur925
查看>>
js onclick事件传参
查看>>
WiCloud 商业Wi-Fi管理平台
查看>>
团队项目--未完待续
查看>>
双重标准,我该怎么解决
查看>>
python中的网页标签等字符处理
查看>>