DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=2,
max_features=None, max_leaf_nodes=None,
min_impurity_decrease=0.0, min_impurity_split=None,
min_samples_leaf=1, min_samples_split=2,
min_weight_fraction_leaf=0.0, presort=False, random_state=42,
splitter='best')
criterion:特征选择标准 ‘gini’ or ‘entropy’ (default=”gini”),前者是基尼系数,后者是信息熵。两种算法差异不大对准确率无影响,信息熵运算效率低一点,因为它有对数运算,一般说使用默认的基尼系数”gini”就可以了,即CART算法。
splitte:特征划分标准 ‘best’ or ‘random’ (default=”best”) ,前者在特征的所有划分点中找出最优的划分点。后者是随机的在部分划分点中找局部最优的划分点。 默认的”best”适合样本量不大的时候,如果样本数据量非常大,此时推荐random 。
max_depth:决策树最大深度 int or None, optional (default=None) 一般来说,数据少或者特征少的时候可以不管这个值。如果样本量多,特征也多的情况下,推荐限制这个最大深度。常用的可以取值10-100之间。常用来解决过拟合
max_features:划分时考虑的最大特征数,默认是"None",意味着划分时考虑所有的特征数;如果是"log2"意味着划分时最多考虑log2N个特征;如果是"sqrt"或者"auto"意味着划分时最多考虑N−−√N个特征。如果是整数,代表考虑的特征绝对数。如果是浮点数,代表考虑特征百分比,即考虑(百分比xN)取整后的特征数。一般来说,如果样本特征数不多,比如小于50,我们用默认的"None"就可以了,如果特征数非常多,我们使用其他取值来控制划分时考虑的最大特征数。
min_samples_split:内部节点再划分所需最小样本数 default=2),如果是 int,则取传入值本身作为最小样本数; 如果是 float,则取ceil(min_samples_split * 样本数量) 的值作为最小样本数,即向上取整。这个值限制了子树继续划分的条件,如果某节点的样本数少于min_samples_split,则不会继续进行划分。如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。之前的一个项目例子,大概10万样本,选择min_samples_split=10。
min_impurity_decrease:节点划分最小不纯度 float, optional (default=0.) 这个值限制了决策树的增长,如果某节点的不纯度(例如:基尼系数,信息增益,均方差,绝对差)小于这个阈值,则该节点不再生成子节点。
min_samples_leaf:叶节点最少样本数,默认是1,如果是 int,则取值本身作为最小样本数; 如果是 float,取最少样本数占样本总数的百分比,向上取整。 这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。如果样本量不大,不需要管这个值。如果样本量数量级非常大,则增大这个值。10万样本使用min_samples_leaf的值为5。
max_leaf_nodes:最大叶子节点数 int or None, optional (default=None) 通过限制最大叶子节点数,可以防止过拟合,默认是”None”,即不限制最大的叶子节点数。如果加了限制,算法会建立在最大叶子节点数内最优的决策树。如果特征不多,可以不考虑这个值,但是如果特征分成多的话,可以加以限制,具体的值可以通过交叉验证得到。
min_impurity_split :信息增益的阀值。决策树在创建分支时,信息增益必须大于这个阀值,否则不分裂
from:https://www.cnblogs.com/pinard/p/6056319.html
from:https://blog.csdn.net/qq_41577045/article/details/79844709
决策树的构建过程,就是从训练集中归纳出一组分类规则。基本分为以下几步:
选择信息墒变化幅度最大的那个特征来作为数据集划分依据。即:选择信息增益最大的特征作为分裂节点。决策树是一种判别模型,既支持分类问题,也支持回归问题,是一种非线性模型,它支持多分类问题
基尼指数(基尼不纯度):表示在样本集合中一个随机选中的样本被分错的概率。是衡量信息不纯度的指标。Gini指数越小表示集合中被选中的样本被分错的概率越小,也就是说集合的纯度越高。
即 基尼指数(基尼不纯度)= 样本被选中的概率 * 样本被分错的概率。公式:
说明: 表示选中的样本属于k类别的概率,则这个样本被分错的概率是(1-
)。样本集合中有K个类别,一个随机选中的样本可以属于这k个类别中的任意一个,因而对类别就求和,例如当为二分类时,Gini(P) = 2p(1-p)
信息熵(entropy)是用来衡量一个随机变量出现的期望值。如果信息的不确定性越大,熵的值也就越大,出现的各种情况也就越多。 设D为用类别对训练元组进行的划分,则D的熵(entropy)表示为:
随机森林是一种集成学习算法,是Bagging算法的具体实现。集成学习是机器学习中的一种思想,而不是某一具体算法,它通过多个模型的组合形成一个精度更高的模型,参与组合的模型称为弱学习器。在预测时使用这些弱学习器模型联合进行预测,训练时需要依次训练出这些弱学习器。
随机森林用有放回抽样构成出的样本集,训练多棵决策树,训练每一棵树时,从样本集中有放回的抽取n个样本,每个样本可能会被抽中多次,也可能一次都没抽中。训练决策树的每个节点时只使用了随机抽样的部分特征,由于使用了随机抽样,随机森林泛化性能一般比较好,可以有效的降低模型的方差。预测时,对于分类问题,一个测试样本会送到每一棵决策树中进行预测,然后投票,得票最多的类为最终分类结果。对于回归问题,随机森林的预测输出是所有决策树输出的均值。
随机森林是一种有监督学习算法。随机森林的一大优势在于它既可用于分类,也可用于回归问题。
构建单棵树的步骤:
1、有放回的随机采样,样本数占总数的2 / 3。
2、对于每一个结点,随机选择m个特征,从中选择能提供最好划分的特征和划分点,在下一个结点重复前两个步骤直到所有训练样例都属于同一类。
随机森林的错误率依赖两件事。
1、树之间的相关性越大,整体错误率越高。
2、单棵树的错误率越高,整体错误率越高。
随机森林算法中树的增长会给模型带来额外的随机性。决策树采用每个节点被分割成最小化误差的最佳特征,而在随机森林中,分裂节点时不再是搜索最好的特征,而是在一个随机生成的特征子集里搜索最好的特征。因此,在随机森林中,仅考虑用于分割节点的随机子集,甚至可以通过在每个特征上使用随机阈值来使树更加随机,而不是如正常的决策树一样搜索最佳阈值。这个过程产生了广泛的多样性,通常可以得到更好的模型。
随机森林算法的另一个优点是可以很容易地测量每个特征对预测的相对重要性。重要的特征更可能出现在靠近根节点的位置,而不重要的特征通常出现在靠近叶节点的位置(甚至根本不出现)。因此,通过计算一个特征在森林中所有树上的平均深度,可以估算出一个特征的重要程度。Scikit-Learn通过变量feature_importances_你就可以访问到这个计算结果。
贝叶斯分类器将样本判定为后验概率最大的类,是一种生成模型,它直接用贝叶斯公式解决分类问题。假设样本的特征向量为x,类别标签为y,根据贝叶斯公式,样本属于每个类的条件概率(后验概率)为:
分母p(x)对所有类都是相同的,分类的规则是将样本归到后验概率最大的那个类,不需要计算准确的概率值,只需要知道属于哪个类的概率最大即可,这样可以忽略掉分母。分类器的判别函数为:
在实现贝叶斯分类器时,需要知道每个类的条件概率分布p(x|y)。一般假设样本服从正态分布。训练时确定先验概率分布的参数,一般用最大似然估计,即最大化对数似然函数。
如果假设特征向量的各个分量之间相互独立,则称为朴素贝叶斯分类器,此时的分类判别函数为:
参考:https://blog.csdn.net/qq_30815237/article/details/86571250
Boosting是一种提高弱分类器准确度的方法。通常在分类问题中,boosting通过改变训练样本的权重,学习多个分类器,并将这些分类器线性组合,提高分类性能。Boosting 就是通过组合许多弱分类器(只比随机选择好一点)来产生一个强大的分类器组。且弱分类器的设计简单没有太大计算量。
boosting算法有很多,如AdaBoost,LPBoost,TotalBoost,BrownBoost,xgboost,MadaBoost,LogitBoost等等。大多数boosting算法都是改变训练数据的权值分布,针对不同的训练数据分布调用弱学习算法学习一系列弱分类器。因此,许多boosting算法之间的差异在于对训练样本和假设进行加权的方法不同。众多boosting算法中,最著名的就是 Adaboost(适应性提升,是 Adaptive Boosting 的简称) 和 Gradient Boosting(梯度提升)。
Adaboost是分类器,最终的强分类器是所有的弱分类器的加权平均。
与 Adaboost 一样,梯度提升也是通过逐步增加分类器运行的,每一个分类器都修正之前的分类结果。然而,它并不像 Adaboost 那样每一次迭代都更改实例的权重,这个方法是去使用新的分类器去拟合前面分类器预测的残差 。
GBDT使用CART,是回归树。
二者都是集成学习算法,都是将多个弱学习器组合成强学习器的方法。
Boosting:每一轮根据上一轮的分类结果动态调整每个样本在分类器中的权重,训练得到k个弱分类器,他们都有各自的权重,通过加权组合的方式得到最终的分类结果。(串行),用于boosting的基础模型通常是低方差高偏差的模型,boosting用于减少偏置(偏差)
Bagging和pasting:都是训练得到k个弱学习器,将这k个弱学习器以投票的方式得到最终的分类结果。获得不同种类分类器的方法之一是使用不同的训练算法。还有另一种方法是每个预测器使用的算法相同,但是在不同的训练集随机子集上进行训练。(并行),主要用于减少方差,生成一个比单个模型更鲁棒的模型。
bagging和pasting都允许训练实例在多个预测器中被多次采样,但是只有bagging允许训练实例被同一个预测器多次采样。
新预测器更多地关注前序拟合不足的训练实例。从而使新的预测器不断地越来越专注于难缠的问题,这就是AdaBoost使用的技术。 例如,要构建一个AdaBoost分类器,首先需要训练一个基础分类器(比如决策树),用它对训练集进行预测。然后对错误分类的训练实例增加其相对权重,接着,使用这个最新的权重对第二个分类器进行训练,然后再次对训练集进行预测,继续更新权重,并不断循环向前。
详细的boosting算法请参见:机器学习实战7-sklearn集成学习和随机森林
机器学习算法(2)——AdaBoost算法
我们要清楚,SVM中,对于维度的计算,我们可以用内积的形式.
常用的核函数主要有:
① 多项式核函数:
一个n维的向量映射后的特征空间向量Φ(x)的维度为。
② 高斯核函数:
当xi和xj很接近时,核函数的值约为1;相差很大时,核函数的值约为0。高斯核函数又称为径向基函数。能把原始有限维空间的向量映射到无穷维的特征空间(参见:https://blog.csdn.net/guo1988kui/article/details/80207551)。
③ S型核函数:
类比高斯核函数能够描述两个向量之间的相似度(0~1之间)。双曲正弦函数tanh(⋅)(双极性sigmoid函数)也能作为核函数。同样地,也存在单极性sigmoid核函数。
核函数事先在低维上进行计算,而将实质上的分类效果表现在了高维上,也就如上文所说的避免了直接在高维空间中的复杂计算。
线性核:线性可分时,特征数量多时,样本数量多
多项式核:通常只用在已经大概知道一个比较小的阶数的情况,-d:多项式核函数的最高次项次数,-g:gamma参数,-r:核函数中的coef0
RBF:线性不可分时,特征维数少,样本数量正常时,-g:gamma参数,默认值是1/k
其中有两个重要的参数,即 C(惩罚系数) 和 gamma,gamma 越大,支持向量越少,gamma 越小,支持向量越多。
而支持向量的个数影响训练和预测的速度。C 越高,容易过拟合。C 越小,容易欠拟合。
SVM中的优化技术:硬边界和软边界。
得到SVM分类器的决策边界,这条线不仅分离了两个类别,并且尽可能远离了最近的训练实例。可以将SVM分类器视为在类别之间拟合可能的最宽的街道(平行的虚线所示)。因此这也叫作大间隔分类。
参见:机器学习实战5-sklearn训练SVM模型分类回归(make_moons数据集)
SVM是一种判别模型。它既可以用于分类问题,也可以用于回归问题。标准的SVM只能支持二分类问题,使用多个分类器的组合,可以解决多分类问题,有以下几种方案:
SVM将寻找具有最大几何间隔划分超平面的任务转化成一个凸优化问题,如下所示:
使用拉格朗日乘子法将原问题转化为对偶问题求解。我们最终要求得的是最优的w,b,所以我们把原问题转换为先优化出参数α,再优化最优w.b.
具体做法是:(1)将约束融入目标函数中,得到拉格朗日函数;(2)然后对模型参数w和b求偏导,并令之为零;(3)得到w后,将其带入拉格朗日函数中,消去模型参数w和b;(4)这样就得到了原问题的对偶问题,对偶问题和原问题等价;(5)得到拉格朗日乘子后,进一步可以得到模型参数w和b,也就得到了我们想要的划分超平面。
无监督学习常常被用于数据挖掘,用于在大量无标签数据中发现些什么。它的训练数据是无标签的,训练目标是能对观察值进行分类或区分等。例如无监督学习应该能在不给任何额外提示的情况下,仅依据所有“猫”的图片的特征,将“猫”的图片从大量的各种各样的图片中将区分出来。
无监督主要有三种:聚类,离散点检测和降维(PCA)。
聚类是比较经典的一种。聚类就是将观察值聚成一个一个的组,每一个组都含有一个或者几个特征。恰当地提取特征是无监督最为关键的环节。例如在对猫的识别中,来尝试提取猫的特征:皮毛、四肢、耳朵、眼睛、胡须、牙齿、舌头等等。通过对特征相同的动物的聚类,可以将猫或者猫科动物聚成一类。但是此时,我们不知道这群毛茸茸的东西是什么,只知道这团东西属于一类,兔子不在这个类(耳朵不符合),飞机也不在这个类(有翅膀)。特征有效性直接决定着算法有效性。如果我们拿体重来聚类,而忽略体态特征,恐怕就很难区分出兔子和猫了。
无监督聚类方法有:
K-means算法;PCA
层次聚类:由不同层次的分割聚类组成,层次之间的分割具有嵌套的关系;层次法(Hierarchicalmethods)先计算样本之间的距离。每次将距离最近的点合并到同一个类。然后,再计算类与类之间的距离,将距离最近的类合并为一个大类。不停的合并,直到合成了一个类。其中类与类的距离的计算方法有:最短距离法,最长距离法,中间距离法,类平均法等。
t-SNE聚类:用于可视化。t-SNE表示t分布的随机近邻嵌入。它将高维空间映射到可以可视化的2或3维空间。通过二维点或三维点对每个高维对象进行建模,使得相似的对象由附近的点建模,而不相似的对象很大概率由远离的点建模。
DBSCAN(Density-Based Spatial Clustering of Applications with Noise,基于密度):用作预测分析中 K-means的替代。它不要求输入聚类的数值才能运行。但作为交换,你必须调整其他两个参数。
存在。我们可以使用无监督学习的某些指标或人为地去评估模型性能,以此来判断是否过拟合。我的理解:以 K-means为例,在进行 K-means算法时我们要指定类别数,如果实际类别为5,但我们指定10,此时就处于过拟合状态。
1.手肘法 2、轮廓系数法
详情参见:机器学习算法(7)——K近邻(KNN)与K均值(K-means)算法
交叉验证Cross-validation,这是仅使用训练集衡量模型性能的一个方便技术,是为了有效的估测 generalization error(泛化误差) 所设计的实验方法,generalization error=bias+variance
bias和variance分别从两个方面来描述了我们学习到的模型与真实模型之间的差距。Bias是 “用所有可能的训练数据集训练出的所有模型的输出的平均值” 与 “真实模型”的输出值之间的差异;Variance则是“不同的训练数据集训练出的模型”的输出值之间的差异。
可以发现,怎么来平衡Bias和Variance则成了我们最大的任务了,也就是怎么合理的评估自己模型呢?我们由此提出了交叉验证的思想,以K-fold Cross Validation。
交叉验证:将原始数据分成K组(一般是均分),将每个子集数据分别做一次验证集,其余的K-1组子集数据作为训练集,如此训练和验证一轮称为一次交叉验证。交叉验证重复k次,每个子集都做一次验证集,这样会得到K个模型,用这K个模型,最终在验证集的分类准确率的平均数作为此K-CV下分类器的性能指标。K一般大于等于2,实际操作时一般从3开始取,只有在原始数据集合数据量小的时候才会尝试取2. 而K-CV 的实验共需要建立 k 个models,并计算 k 次 test sets 的平均辨识率。在实作上,k 要够大才能使各回合中的训练样本数够多,一般而言 k=10 (作为一个经验参数)算是相当足够了。
理论上:使用了交叉验证,模型方差“应该”降低了
从方差偏差分解的思路来看交叉验证,交叉验证的两种极端情况:
完全不使用交叉验证是一种极端情况,即K=1。在这个时候,所以数据都被用于训练,模型很容易出现过拟合,因此容易是低偏差、高方差(low bias and high variance)。
留一法是K折的另一种极端情况,即K=n。随着K值的不断升高,单一模型评估时的方差逐渐加大而偏差减小。但从总体模型角度来看,反而是偏差升高了而方差降低了。
所以当K值在1到n之间的游走,可以理解为一种方差和偏差妥协的结果。以K=10为例,在训练时我们的训练集数量仅为训练数据的90%。对比不使用交叉验证的情况,这会使得偏差上升,但对于结果的平均又会降低模型方差,最终结果是否变好取决于两者之间的变化程度。 (而这种直觉上的解释,并不总是有效。如Hastie曾通过实验证明 K折交叉验证比留一法的方差更小,这和我们上面的结论不一样。)
需要注意:k越大,不一定效果越好,而且越大的k会加大训练时间;在选择k时,需要考虑最小化数据集之间的方差。比如:对于2分类任务,如果采用2折交叉验证,即将原始数据集对半分,若此时训练集中都是A类别,验证集中都是B类别,则交叉验证效果会非常差。
注意:交叉验证使用的仅仅是训练集!!根本没测试集什么事!!
这也就解决了上面刚开始说的Variance(不同训练集产生的差异),Bias(所有data训练结果的平均值)这两大问题了!因为交叉验证思想集合了这两大痛点,能够更好的评估模型好坏!
说白了,就是你需要用交叉验证去试下你的算法是否精度够好,够稳定!你不能说你在某个数据集上表现好就可以,你做的模型是要放在整个数据集上来看的!毕竟泛化能力才是机器学习解决的核心。
准确率 = TP / (TP + FP),召回率 = TP / (TP + FN),其中TP表示将正例正确分类为正例的数量,FP表示将负例错误分类为正例的数量,FN表示将正例错误分类为负例的数量。
因此若增大阈值t,更多不确定(分类概率较小)的样本将会被分为负例,剩余确定(分类概率较大)的样本所占比例将会增大(或不变),即准确率会增大(或不变);同时可能将部分不确定(分类概率较小)的正例样品误分类为负例,即召回率会减小(或不变)。
EM算法是一种迭代法,其目标是求解似然函数或后验概率的极值,而样本中具有无法观测的隐含变量。EM算法用于求解带有隐变量的最大似然估计问题。由于有隐变量的存在,无法直接用最大似然估计求得对数似然函数极大值的公式解。此时通过jensen不等式构造对数似然函数的下界函数,这个函数不含有隐变量(就是先固定一个变量),然后优化下界函数(更新
),再用估计出的参数值构造新的下界函数,反复迭代直至收敛到局部极小值点(
不再更新为止),这就是EM算法所采用的思路。
算法在实现时首先随机初始化参数的值,接下来循环迭代,每次迭代时分为两步:
E步,基于当前的参数估计值,计算在给定x时,隐变量z的条件概率的数学期望:
迭代终止的判定规则是相邻两次函数值之差小于指定阈值。需要注意的是,EM算法只能保证收敛到局部极小值。
from:机器学习算法(1)——极大似然估计与EM算法
我们目的是将样本分成k个类,其实说白了就是求每个样例x的隐含类别y,然后利用隐含类别将x归类。由于我们事先不知道类别y,那么我们首先可以对每个样例假定一个y,但是怎么评价假定的好不好呢?我们使用样本的极大似然估计来度量,这里是就是x和y的联合分布P(x,y)了。如果找到的y能够使P(x,y)最大,那么我们找到的y就是样例x的最佳类别了。但是我们第一次指定的y不一定会让P(x,y)最大,而且P(x,y)还依赖于其他未知参数,当然在给定y的情况下,我们可以调整其他参数让P(x,y)最大。但是调整完参数后,我们发现有更好的y可以指定,那么我们重新指定y,然后再计算P(x,y)最大时的参数,反复迭代直至没有更好的y可以指定。
这个过程有几个难点,第一怎么假定y?是每个样例硬指派一个y还是不同的y有不同的概率,概率如何度量。第二如何估计P(x,y),P(x,y)还可能依赖很多其他参数,如何调整里面的参数让P(x,y)最大。E步就是估计隐含类别y的期望值,M步调整其他参数使得在给定类别y的情况下,极大似然估计P(x,y)能够达到极大值。然后在其他参数确定的情况下,重新估计y,周而复始,直至收敛。
对应于K-means来说就是,我们一开始不知道每个样例对应隐含变量也就是最佳类别
。最开始可以随便指定一个
给它,我们求出在给定c情况下,J最小时的
(未知参数
,这里就是质心的位置,E步),然而此时发现,可以有更好的
(质心与样例
距离最小的类别)指定给样例
,那么
得到重新调整(M步),上述过程就开始重复了,直到没有更好的
指定。
这样从K-means里我们可以看出它其实就是EM的体现,E步是确定隐含类别变量 c,M步更新其他参数来使J最小化。这里的隐含类别变量指定方法比较特殊,属于硬指定,从k个类别中硬选出一个给样例,而不是对每个类别赋予不同的概率。总体思想还是一个迭代优化过程,有目标函数,也有参数变量,只是多了个隐含变量,确定其他参数估计隐含变量,再确定隐含变量估计其他参数,直至目标函数最优。
对比混合高斯模型和K-means可以发现,混合高斯使用了“软”指定,为每个样例分配的类别是有一定的概率的,同时计算量也变大了,每个样例i都要计算属于每一个类别j的概率。与K-means相同的是,结果仍然是局部最优解。对其他参数取不同的初始值进行多次计算不失为一种好方法。
L1范数:向量中各个元素绝对值之和;.L1会趋向于产生少量的特征,而其他的特征都是0.因为最优的参数值很大概率出现在坐标轴上,这样就会导致某一维的权重为0 ,产生稀疏权重矩。
L2范数:向量中各个元素平方和的开二次方根; L2会选择更多的特征,这些特征都会接近于0。最优的参数值很小概率出现在坐标轴上,因此每一维的参数都不会是0。
Lp范数:向量中各个元素绝对值的p次方和的开p次方根
1、参数的稀疏,在一定程度上实现了特征的选择。一般而言,大部分特征对模型是没有贡献的。这些没有用的特征虽然可以减少训练集上的误差,但是对测试集的样本,反而会产生干扰。稀疏参数的引入,可以将那些无用的特征的权重置为0.
2、越是复杂的模型,越会造成在较小的区间中产生较大的波动,这个较大的波动也会反映在这个区间的导数比较大。只有越大的参数才可能产生较大的导数。因此参数越小,模型就越简单。
L1正则化求导问题:
机器学习算法时,最常用的是L2正则化,因为L2正则化有连续可微的性质,易求导。但L1能产生稀疏解,而且稀疏解的泛化能力会比较好,不过由于L1正则化并不是处处连续的,所以优化的时候会有一定难度。可以用坐标轴下降法,坐标轴下降法进行参数更新时,每次总是固定另外m-1个值,求另外一个的局部最优值,这样也避免了Lasso回归的损失函数不可导的问题。也可以使用proximal operator、admm等优化方法。
衡量一个模型评估方法的好坏,往往从偏差和方差两方面进行。
Bias反映的是模型在样本上的输出与真实值之间的误差,即模型本身的精准度,即算法本身的拟合能力
Variance反映的是模型每一次输出结果与模型输出期望之间的误差,即模型的稳定性。反应预测的波动情况。
Bias和Variance是针对Generalization(泛化)来说的 ,bias和variance分别从两个方面来描述了我们学习到的模型与真实模型之间的差距。
噪声是你不想要的真正数据,你可以想象为来破坏你实验的元凶和造成你可能过拟合的原因之一,至于为什么是过拟合的原因,因为模型过度追求Low Bias会导致训练过度,对测试集判断表现优秀,导致噪声点也被拟合进去了
举一个射箭问题:假设你在射箭,红星是你的目标,以下是你的射箭结果
在Low Variance的一列,数据分布是非常集中的,恩,的稳定性很好,方差很小,表现的很聚集。而第二列就是High Variance的一列,飘来飘去的,非常不稳定!
Low Bias这一行,命中红心的次数很多,说明你还是有准头的,至少偏差不算大,我要是裁判,我就不管你没射中几只箭飘到哪去了(方差大,不集中),毕竟我看的是命中了多少(准确度),而High Bias这一行,明显可以看出一支箭都没射中,表现很差,偏离目标好远,负分滚粗!
综合起来看,我们需要的模型最好是两个L,又准确又稳定,妥妥的,但是,这个在现实模型中是不会存在的。你只能权衡着来,这也被称为偏差/方差均衡。
Bias,Variance和Overfitting(过拟合),Underfitting(欠拟合)
过拟合,也就是我对训练样本能够百分百命中了,超级拟合了,但是测试时候就掉链子,拟合很差,也就是我们说的泛化性能不好的问题,所以如果太追求在训练集上的完美而采用一个很复杂的模型,会使得模型把训练集里面的噪声都当成了真实的数据分布特征,从而得到错误的数据分布估计。一句话,过拟合会出现高方差问题
欠拟合:训练样本太少,导致模型就不足以刻画数据分布了,体现为模型在训练集上的错误率也很高。一句话,欠拟合会出现高偏差问题
Bias、Variance和K-fold的关系??
下面解释一下Bias、Variance和k-fold的关系:k-fold交叉验证常用来确定不同类型的模型哪一种更好,为了减少数据划分对模型评价的影响,最终选出来的模型类型(线性、指数等)是k次建模的误差平均值最小的模型。当k较大时,经过更多次数的平均可以学习得到更符合真实数据分布的模型,Bias就小了,但是这样一来模型就更加拟合训练数据集,再去测试集上预测的时候预测误差的期望值就变大了,从而Variance就大了;反之,k较小时模型不会过度拟合训练数据,从而Bias较大,但是正因为没有过度拟合训练数据,Variance也较小。???
链接:https://www.zhihu.com/question/27068705/answer/35286205
梯度消失与梯度爆炸其实是一种情况,看接下来的文章就知道了。两种情况下梯度消失经常出现,一是在深层网络中,二是采用了不合适的激活函数,比如sigmoid。梯度爆炸一般出现在深层网络和权值初始化值太大的情况下,下面分别从这两个角度分析梯度消失和爆炸的原因。
当梯度小于1时,预测值与真实值之间的误差每传播一层会衰减一次,如果在深层模型中使用sigmoid作为激活函数,这种现象尤为明显,将导致模型收敛停滞不前。在反向传播算法计算每一层的误差项的时候,需要乘以本层激活函数的导数值,如果导数值接近于0,则多次乘积之后误差项会趋向于0,而参数的梯度值通过误差项计算,这会导致参数的梯度值接近于0,无法用梯度下降法来有效的更新参数的值。
梯度消失的解决方法?
1、解决方案是引入Gradient Clipping(梯度裁剪)。其思想是设置一个梯度剪切阈值,然后更新梯度的时候,如果梯度超过这个阈值,那么就将其强制限制在这个范围之内。这可以防止梯度爆炸。将梯度约束在一个范围内,这样不会使得梯度过大。
2、Relu函数,如果激活函数的导数为1,relu函数的导数在正数部分是恒等于1的,因此在深层网络中使用relu激活函数就不会导致梯度消失和爆炸的问题。
3、batch normalization本质上是解决反向传播过程中的梯度问题。简称BN,即批量规范化,通过规范化操作将输出信号x规范化保证网络的稳定性。具体来说就是反向传播中,经过每一层的梯度会乘以该层的权重,举个简单例子:
4、残差网络
梯度爆炸的解决方法?
1、改进激活函数,选用更不容易饱和的函数,如ReLU函数,同上,ReLU由于非负区间的梯度为常数,因此不存在梯度消失问题,使得模型的收敛速度维持在一个稳定状态。
2、Batchnorm,同上。
3、另外一种解决梯度爆炸的手段是采用权重正则化(weithts regularization)比较常见的是l1正则,和l2正则。正则化是通过对网络权重做正则限制过拟合,仔细看正则项在损失函数的形式:
其中,α 是指正则项系数,因此,如果发生梯度爆炸,权值的范数就会变的非常大,通过正则化项,可以部分限制梯度爆炸的发生。注:事实上,在深度神经网络中,往往是梯度消失出现的更多一些。
relu的主要贡献在于:
同时也存在一些缺点:
关于梯度消失和爆炸详细可参见:https://blog.csdn.net/qq_25737169/article/details/78847691
主成分分析是一种数据降维和去除相关性的方法,它通过线性变换将向量投影到低维空间。结果向量的维数小于原始向量的维数。计算时,先计算样本x(m*n的矩阵n维数据)的协方差矩阵(n*n矩阵),再对其进行特征值分解,选取最大的一部分特征值和对应的特征向量(n*1),构成投影矩阵(n*m矩阵,它的每一列都是主成分的特征向量,m是指选取的特征向量数)。进行降维时,先将输入向量减掉均值向量,然后右乘投影矩阵,即可得到投影后的向量
主成分分析一种无监督学习算法,也是一种线性方法。
线性判别分析向最大化类间差异、最小化类内差异的方向线性投影。其基本思想是通过线性投影来最小化同类样本间的差异,最大化不同类样本间的差异。简单的说,就是经过这个投影之后同一类的样本进来聚集在一起,不同类的样本尽可能离得远。具体做法是寻找一个向低维空间的投影矩阵W,样本的特征向量x经过投影之后得到的新向量:y = Wx
类内散布矩阵定义为:
它衡量的内类样本的发散程度。其中mi为每个类的均值向量,m为所有样本的均值向量。类间散布矩阵定义为:
它衡量的了各类样本之间的差异。训练时的优化目标是类间差异与类内差异的比值:
LDA是有监督的学习算法,在计算过程中利用了样本标签值,是线性模型。LDA也不能直接用于分类和回归问题,要对降维后的向量进行分类还需要借助其他算法。详细:https://blog.csdn.net/qq_30815237/article/details/88966267
kNN算法将样本分到离它最相似的样本所属的类。要确定一个样本的类别,可以计算它与所有训练样本的距离,然后找出和该样本最接近的k个样本,统计这些样本的类别进行投票,票数最多的那个类就是分类结果。
由于需要计算样本间的距离,因此需要依赖距离定义,常用的有欧氏距离,Mahalanobis距离,Bhattacharyya距离。另外,还可以通过学习得到距离函数,这就是距离度量学习。 kNN算法是一种判别模型,即支持分类问题,也支持回归问题,是一种非线性模型。它天然的支持多分类问题。kNN算法没有训练过程,是一种基于实例的算法。是有监督学习
同比例缩放所有属性,常用的两种方法是:最小-最大缩放和标准化。
最小-最大缩放(又叫作归一化)很简单:将值重新缩放使其最终范围归于0到1之间。实现方法是将值减去最小值并除以最大值和最小值的差。对此,Scikit-Learn提供了一个名为MinMaxScaler的转换器。
标准化则完全不一样:首先减去平均值(所以标准化值的均值总是零),然后除以方差,从而使得结果的分布具备单位方差,Scikit-Learn提供标准化的转换器StandadScaler。不同于最小-最大缩放的是,标准化不将值绑定到特定范围,对某些算法而言,这可能是个问题(例如,神经网络期望的输入值范围通常是0到1)。但是标准化的方法受异常值的影响更小。例如,假设某个地区的平均收入等于100(错误数据)。最小-最大缩放会将所有其他值从0~15降到0~0.15,而标准化则不会受到很大影响。
注意:跟所有转换一样,缩放器仅用来拟合训练集,而不是完整的数据集(不能拟合测试集)。
对于一个给定的实例x,Softmax回归模型首先计算出每个类别k的分数,然后对这些分数应用softmax函数,估算出每个类别的概率。注意,每个类别都有自己特定的参数向量 ,类别k的Softmax分数:
计算完实例x每个类别的分数后,就可以通过Softmax函数来计算分数:计算出每个分数的指数,然后对它们进行归一化
处理(除以所有指数的总和):
跟逻辑回归分类器一样,Softmax回归分类器将估算概率值最高的类别作为预测类别.
Softmax回归分类器一次只会预测一个类别,仅适用于互斥的类别之上,例如植物的不同种类。
它的训练目标是得到一个能对目标类别做出高概率估算的模型(也就是其他类别的概率相应要很低)。通过将成本函数(交叉熵)最小化来实现这个目标,因为当模型对目标类别做出较低概率的估算时,会受到惩罚。交叉熵经常被用于衡量一组估算出的类别概率跟目标类别的匹配程度。交叉熵成本函数:
如果第i个实例的目标类别为k,则等于1,否则为0。当只有两个类别(K=2)时,该成本函数等价于逻辑回归的成本函数
对于类别k的交叉熵梯度向量:
计算出每个类别的梯度向量,然后使用梯度下降(或任意其他优化算法)找到最小化成本函数的参数矩阵Θ。
1、传统GBDT以CART作为基分类器,xgboost中的基学习器除了可以是CART(gbtree)也可以是线性分类器(gblinear)
2、传统GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行二阶泰勒展开,同时用到了一阶和二阶导数。xgboost支持自定义代价函数,只要函数可一阶和二阶求导。
3、xgboost在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。正则项降低了模型的variance,防止过拟合,这也是xgboost优于传统GBDT的一个特性。
4、xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算,这也是xgboost异于传统gbdt的一个特性。对缺失值的处理。对于特征的值有缺失的样本,可以为缺失值或者指定的值指定分支的默认方向。
5、xgboost工具支持并行。xgboost的并行也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。xgboost的并行是在特征上的。即 boosting算法迭代必须串行,但是在处理每个特征列时可以做到并行。 决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),xgboost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。
6、在寻找最佳分割点时,考虑传统的枚举每个特征的所有可能分割点的贪心法效率太低,xgboost实现了一种近似的算法。大致的思想是根据百分位法列举几个可能成为分割点的候选者,然后从候选者中根据上面求分割点的公式计算找出最佳的分割点。
GBDT和随机森林的不同点:
1、组成随机森林的树可以是分类树,也可以是回归树;而GBDT只由回归树组成
2、组成随机森林的树可以并行生成;而GBDT只能是串行生成
3、对于最终的输出结果而言,随机森林采用多数投票等;而GBDT则是将所有结果累加起来,或者加权累加起来
4、随机森林对异常值不敏感,GBDT对异常值非常敏感
5、随机森林对训练集一视同仁,GBDT是基于权值的弱分类器的集成
1、极大似然估计
极大似然估计的核心思想是:认为当前发生的事件是概率最大的事件。因此就可以给定的数据集,使得该数据集发生的概率最大来求得模型中的参数。似然函数如下:
为了便于计算,我们对似然函数两边取对数,生成新的对数似然函数:
求对数似然函数最大化,可以通过导数为0来求解。极大似然估计只关注当前的样本,也就是只关注当前发生的事情,不考虑事情的先验情况。由于计算简单,而且不需要关注先验知识,最常见的就是逻辑回归。
2、最大后验估计
最大后验估计中引入了先验概率,而且最大后验估计要求的是,最大后验估计可以写成下面的形式:
在求最大后验概率时,可以忽略分母p(X),因为该值不影响对θ的估计。最大后验估计不只是关注当前的样本的情况,还关注已经发生过的先验知识。在朴素贝叶斯中会有最大后验概率的应用,但并没有用上最大后验估计来求参数(因为朴素贝叶斯中的θ其实就是分类的类别)。
最大后验估计和最大似然估计的区别:最大后验估计允许我们把先验知识加入到估计模型中,这在样本很少的时候是很有用的(因此朴素贝叶斯在较少的样本下就能有很好的表现),因为样本很少的时候我们的观测结果很可能出现偏差,此时先验知识会把估计的结果“拉”向先验,实际的预估结果将会在先验结果的两侧形成一个顶峰。通过调节先验分布的参数,比如beta分布的α,β,我们还可以调节把估计的结果“拉”向先验的幅度,α,β越大,这个顶峰越尖锐。这样的参数,我们叫做预估模型的“超参数”。
我的理解:最大似然估计求的是“条件概率”,而最大后验估计求的是“后验概率”,可以理解为最大似然估计是最大后验估计的其中一个步骤。
至于朴素贝叶斯估计,和极大后验估计有点相似,都是以最大化后验概率为目的。区别在于:
1)极大似然估计和极大后验估计都是只返回了
的预估值。
2)贝叶斯估计要计算整个后验概率的概率分布
我的理解:第一条说的是根据极大后验估计的公式,我们是使用极大似然估计求出一个参数θ,根据这个参数求出一个“条件概率”,然后求出一个后验概率,即极大后验概率,所以说它是“只返回了
的预估值”。
第二条,贝叶斯估计也是先求条件概率,然后再求后验概率,但是求条件概率不是使用最大似然估计的方法求得,而是根据训练样本得到所有的条件概率,然后得到所有的后验概率,在这些后验概率中,再选择最大值作为最终的贝叶斯估计的结果。
感觉极大后验估计和极大似然估计属于参数估计,先假定我们的样本服从某一个特定分布,然后求这个参数;
而朴素贝叶斯估计属于非参数估计,这种说法严格说是错误的,但在实际求解时给人的感觉就是这个样子。
有点复杂,具体参考:机器学习算法(1)——贝叶斯估计与极大似然估计与EM算法之间的联系
概率密度估计小结--参数估计与非参数估计
机器学习算法(8)——朴素贝叶斯
采用平方损失函数,拟合目标是最小化总损失函数
上式表明, 采用平方误差时,残差就是负梯度 :
采用Square loss为损失函数时,负梯度和残差相等。不过,当我们采用Absolute loss/Huber loss等其它损失函数时,负梯度只是残差的近似。此外平方损失函数(Square loss)有一个缺点:它对异常点(outliers)比较敏感。其它一些损失函数,如绝对损失函数(Absolute loss),Huber loss 函数能更好地处理异常点:当预测偏差小于 δ 时,它采用平方误差,当预测偏差大于 δ 时,采用的线性误差,如下:
GBDT算法用“负梯度”来取代“残差”。不过需要说明的是,这时新模型不再是 F+h (这个 h 是“残差”的拟合)了,而是 F+ρh (这个 h 是“负梯度”的拟合)。我们把“负梯度”称为“伪残差”(pseudo-residuals)。使用“负梯度”有时能够减小异常点的影响。
梯度提升算法可以看作是“最速下降方法”。 不过,和普通的最速下降方法不一样,这里目标函数(损失函数)的定义域是所有可行的“弱函数集合”,提升算法通过迭代的选择一个负梯度方向上的基函数来逐渐逼近局部极小值。
采用梯度下降法(Steepest Descent)迭代求取损失函数 J(F) 取极小值时的 F(x) :
每次迭代过程中(假设当前是第 m 轮迭代),假设下面数据(伪残差)的拟合结果为 。
得到:
使用“line search”(一维搜索,即求解单变量函数的极小化问题),可以求得步长 ρ 为:
from :http://aandds.com/blog/ensemble-gbdt.html
相同点:
第一,LR和SVM都是分类算法,既可回归也可分类。都是二分类
判断一个算法是分类还是回归算法的唯一标准就是样本label的类型,如果label是离散的,就是分类算法,如果label是连续的,就是回归算法。很明显,LR的训练数据的label是“0或者1”,当然是分类算法。
第二,如果不考虑核函数,LR和SVM都是线性分类算法,也就是说他们的分类决策面都是线性的。
原始的LR和SVM都是线性分类器,这也是为什么通常没人问你决策树和LR什么区别,决策树和SVM什么区别,你说一个非线性分类器和一个线性分类器有什么区别?
第三,LR和SVM都是监督学习算法。
第四,LR和SVM都是判别模型。
判别模型会生成一个表示P(Y|X)的判别函数,而生成模型先计算联合概率p(Y,X)然后通过贝叶斯公式转化为条件概率。简单来说,在计算判别模型时,不会计算联合概率,而在计算生成模型时,必须先计算联合概率。常见的判别模型有:KNN、SVM、LR,常见的生成模型有:朴素贝叶斯,隐马尔可夫模型。当然,这也是为什么很少有人问你朴素贝叶斯和LR以及朴素贝叶斯和SVM有什么区别。
不同点:
1、本质上是其loss function不同。
不同的loss function代表了不同的分类原理,也就代表了一切!!!简单来说,逻辑回归方法基于概率理论(最大化似然概率),假设样本为1的概率可以用sigmoid函数来表示,然后通过极大似然估计的方法估计出参数的值。支持向量机基于几何间隔最大化原理,认为存在最大几何间隔的分类面为最优分类面。
2、支持向量机只考虑局部的边界线附近的点,而逻辑回归考虑全局(远离的点对边界线的确定也起作用)。
3、在解决非线性问题时,支持向量机采用核函数的机制,而LR通常不采用核函数的方法。
分类模型的结果就是计算决策面,模型训练的过程就是决策面的计算过程。在计算决策面时,SVM算法里只有少数几个代表支持向量的样本参与了计算,也就是只有少数几个样本需要参与核计算(即kernal machine解的系数是稀疏的)。然而,LR算法里,每个样本点都必须参与决策面的计算过程,也就是说,假设我们在LR里也运用核函数的原理,那么每个样本点都必须参与核计算,这带来的计算复杂度是相当高的。所以,在具体应用时,LR很少运用核函数机制。
第四,线性SVM依赖数据表达的距离测度,所以需要对数据先做normalization,LR不受其影响。
一个机遇概率,一个机遇距离!
第五,SVM的损失函数就自带正则!!!(损失函数中的1/2||w||^2项),这就是为什么SVM是结构风险最小化算法的原因!!!而LR必须另外在损失函数上添加正则项!!!
from:https://www.cnblogs.com/zhizhan/p/5038747.html
1.LibLinear是线性核,LibSVM可以扩展到非线性核,Libsvm主要是用来进行非线性svm 分类器的生成(也能用线性核,但同样在线性核条件下会比LibLinear慢很多)。
2. 多分类:LibLinear是one vs all策略,LibSVM是one vs one策略,后者的模型会大很多。
对偶问题max(min(L(w,b,α)))的任意解都要小于等于原问题min(max(L(w,b,α))) 的任意解,所以在求原问题的最小解时,对偶问题中的那个和原问题某个解相等的解就是原问题的最小解。所以重点是如何使得对偶问题中有一个解能和原问题的解相等,根据数学定理可以发现,在满足KKT条件下,对偶问题的最大解就等于原问题中的最小解,并且这是唯一一中相等的可能。
对偶是最优化方法里的一种方法,它将一个最优化问题转换成另外一个问题,二者是等价的。拉格朗日对偶是其中的典型例子。对于如下带等式约束和不等式约束的优化问题:
与拉格朗日乘数法类似,构造广义拉格朗日函数:
即先固定住x,调整拉格朗日乘子变量,让函数L取极大值;然后控制变量x,让目标函数取极小值。原问题与我们要优化的原始问题是等价的。
对偶问题为:
和原问题相反,这里是先控制变量x,让函数L取极小值;然后控制拉格朗日乘子变量,让函数取极大值。拉格朗日对偶在机器学习中的典型应用是支持向量机。
KKT:
前三个条件是由解析函数的知识,对于各个变量的偏导数为0(这就解释了为什么假设三个函数连续可微,如果不连续可微的话,这里的偏导数存不存在就不能保证),后面四个条件就是原始问题的约束条件以及拉格朗日乘子需要满足的约束。 对于一般的任意问题而言,KKT条件是使一组解成为最优解的必要条件,当原问题是凸问题的时候,KKT条件也是充分条件。
决定SVM最优分类超平面的恰恰是那些占少数的支持向量,如果支持向量中碰巧存在异常点,那么我们傻傻地让SVM去拟合这样的数据,最后的超平面就不是最优的。解决过拟合的办法是为SVM引入了松弛变量ξ(slack variable),将SVM公式的约束条件改为:
C的参数过大时,表示比较重视间隔,坚持要数据完全分离,当C趋于无穷大时,相当于硬间隔SVM。
先看L1 loss 和 L2 loss 定义:
从上面的导数可以看出,L2 Loss的梯度包含 (f(x) - Y),当预测值 f(x) 与目标值 Y 相差很大时,容易产生梯度爆炸,而L1 Loss的梯度为常数,通过使用Smooth L1 Loss,在预测值与目标值相差较大时,由L2 Loss转为L1 Loss可以防止梯度爆炸。
Fast RCNN里提出了Smooth L1 Loss:
smooth L1 loss在 |x| >1的部分采用了 L1 loss,当预测值和目标值差值很大时, 原先L2梯度里的 (f(x) - Y) 被替换成了 ±1,,这样就避免了梯度爆炸, 也就是它更加健壮。 Smooth L1 Loss相比于L2 Loss对于离群点、异常值(outliers)更不敏感,或者说是更加鲁棒,可控制梯度的量级使训练时不容易跑飞。
from :https://blog.csdn.net/ytusdc/article/details/86659696
,
上面的Lconf 和Lloc损失函数写反了。
梯度下降:只是通过直接减去损失函数J(θ)
相对于权重θ
的梯度,乘以学习率η
来更新权重θ
。 方程是:
Momentum优化关注以前的梯度是多少:每一个迭代,会给momentum矢量m加本地梯度(乘以学习速率η),同时权重减去
momentum矢量 。换句话说,梯度被当作加速度来使用,而不是速度。为了模拟某种摩擦机制并防止动量m增长过大,该算法引入了一个新的超参数β,简称为动量,其必须设置在0(高摩擦)和1(无摩擦)之间。一个标准动量值为0.9。
下面三个是自适应学习率:
AdaGrad算法
重新考虑一下细长碗的问题:梯度下降开始很快就走下最陡的斜坡,之后慢慢移动到谷底。如果算法可以早点检测到,并且修正方向往全局最优偏移一些就好了。AdaGrad 算法通过沿着最陡的维度缩小梯度向量来实现这一点:
这种算法会降低学习速度。 这被称为自适应学习率。 它有助于将更新的结果更直接地指向全局最优
RMSProp:尽管 AdaGrad 的速度变慢了一点,并且从未收敛到全局最优,但是RMSProp算法通过仅累积最近迭代(而不是从训练开始以来的所有梯度)的梯度来修正这个问题。 它通过在第一步中使用指数衰减来实现:
Adam [ˈædəm],代表自适应矩估计,结合了动量优化和RMSProp的思想:类似Momentum优化,它会跟踪过去梯度的指数衰减平均值,同时也类似RMSProp,它会跟踪过去梯度平方的指数衰减平均值。
简单统计分析
对属性值进行一个描述性的统计,从而查看哪些值是不合理的。比如对年龄这个属性进行规约:年龄的区间在[0:200],如果样本中的年龄值不再该区间范围内,则表示该样本的年龄属性属于异常值。
3δ原则
当数据服从正态分布,距离平均值3δ之外的概率为 P(|x-μ|>3δ) <= 0.003 ,这属于极小概率事件,在默认情况下我们可以认定,距离超过平均值3δ的样本是不存在的。 因此,当样本距离平均值大于3δ,则认定该样本为异常值。当数据不服从正态分布,可以通过远离平均距离多少倍的标准差来判定,多少倍的取值需要根据经验和实际情况来决定。
异常值的处理方法常用有四种:
1.删除含有异常值的记录
2.将异常值视为缺失值,交给缺失值处理方法来处理
3.用平均值来修正
相同点:都是属于监督学习的一种分类器(决策函数)。
不同点:感知机追求最大程度正确划分,最小化错误,很容易造成过拟合。支持向量机追求大致正确分类的同时,一定程度上避免过拟合。
感知器是最简单的一种线性分类器。用f(x)表示分类函数,感知器可以如下来表示:
感知器的损失函数为误分类点的函数间隔之和,函数间隔可以理解为样本与分类超平面的距离。误分类点距离分类超平面越远,则损失函数值越大。只有误分类的点会影响损失函数的值
从感知器到logistic回归
感知器模型简单直观,但问题在于模型不够光滑,阶跃函数,导致不连续,在数学上处理起来不方便。替换成logistic函数。
从感知器到SVM
在感知器分类选分类超平面时,我们可以选择很多个平面作为超平面,而选择哪个超平面最好呢,我们可以选择距离正样本和负样本最远的超平面作为分类超平面,基于这种想法人们提出了SVM算法。SVM的损失函数为合页函数+L2正则,当分类错误时,函数间隔越大,则损失函数值越大。当分类正确且样本点距离超平面一定距离以上,则损失函数值为0。
其实,对于二分类问题,线性的分类器都是寻找一个最优的超平面进行划分。只不过代价函数、分类函数有所区别。感知器、logistic与SVM,三者都是线性分类器, 从感知器发展,进而产生了逻辑回归和SVM的思想。感知器由于阶跃的分类函数在原点处不可导,进而产生了用sigmod代替的逻辑回归。最后,发展出了判定最优超平面的SVM方法。
而logistic和svm是由感知器发展,区别在于三者的损失函数不同,后两者的损失函数的目的都是增加对分类影响较大的数据点的权重,SVM的处理方法是只考虑support vectors,也就是和分类最相关的少数点,去学习分类器。而逻辑回归通过非线性映射,大大减小了离分类平面较远的点的权重,相对提升了与分类最相关的数据点的权重。下图中红色的曲线代表logistic回归的损失函数,绿色的线代表svm的损失函数。
1、用梯度下降训练神经网络的参数,为什么参数有时会被训练为nan值?
输入数据本身存在nan值,或者梯度爆炸了(可以降低学习率、或者设置梯度的阈值)
2、卷积神经网络CNN中池化层有什么作用?
减小图像尺寸即数据降维,缓解过拟合,保持一定程度的旋转和平移不变性。
3、请列举几种常见的激活函数。激活函数有什么作用?
sigmoid,relu,tanh。引入非线性化
4、神经网络中Dropout的作用?具体是怎么实现的?
防止过拟合。每次训练,都对每个神经网络单元,按一定概率临时丢弃。
5、利用梯度下降法训练神经网络,发现模型loss不变,可能有哪些问题?怎么解决?
很有可能是梯度消失,它表示神经网络迭代更新时,有些权值不更新的现象。改变激活函数,改变权值的初始化等。
6、如何解决不平衡数据集的分类问题?
可以扩充数据集,对数据重新采样,改变评价指标等。
7、残差网络为什么能做到很深层?
神经网络在反向传播过程中要不断地传播梯度,而当网络层数加深时,梯度在逐层传播过程中会逐渐衰减,导致无法对前面网络层的权重进行有效的调整。残差网络中, 加入了short connections 为梯度带来了一个直接向前面层的传播通道,缓解了梯度的减小问题。
8、相比sigmoid激活函数ReLU激活函数有什么优势?
(1) 防止梯度消失 (sigmoid的导数只有在0附近的时候有比较好的激活性,在正负饱和区的梯度都接近于0)
(2) ReLU函数简单计算速度快
9、卷积神经网络中空洞卷积的作用是什么?
空洞卷积也叫扩张卷积,在保持参数个数不变的情况下增大了卷积核的感受野,同时它可以保证输出的特征映射(feature map)的大小保持不变。一个扩张率为2的3×3卷积核,感受野与5×5的卷积核相同,但参数数量仅为9个,如下图所示。
10、解释卷积神经网络中感受野的概念?
在卷积神经网络中,感受野 (receptive field)的定义是:卷积神经网络每一层输出的特征图(feature map)上的像素点在原始图像上映射的区域大小。
11、卷积神经网络中im2col是如何实现的?
使用im2col的方法将划窗卷积转为两个大的矩阵相乘,见下图:
12、多任务学习中标签缺失如何处理?
一般做法是将缺失的标签设置特殊标志,在计算梯度的时候忽略。
13、正则化
为了防止过拟合,可以为损失函数加上一个惩罚项,对复杂的模型进行惩罚,强制让模型的参数值尽可能小以使得模型更简单,加入惩罚项之后损失函数为:
正则化被广泛应用于各种机器学习算法,如岭回归,LASSO回归,logistic回归,神经网络等。除了直接加上正则化项之外,还有其他强制让模型变简单的方法,如决策树的剪枝算法,神经网络训练中的dropout技术,提前终止技术等。
14、深度学习模型参数初始化都有哪些方法?
(1)Gaussian 满足mean=0,std=1的高斯分布x∼N(mean,std2)
(3)He 初始化
15、卷积神经网络为什么会具有平移不变性?
MaxPooling能保证卷积神经网络在一定范围内平移特征能得到同样的激励,具有平移不变形。
16、神经网络参数共享(parameter sharing)是指什么?
权值共享就是说,用一个卷积核去卷积一张图,这张图每个位置是被同样数值的卷积核操作的,权重是一样的,也就是参数共享。
17、神经网络出现过拟合的原因及解决
1. 训练集的数量级和模型的复杂度不匹配。训练集的数量级要小于模型的复杂度;
2. 训练集和测试集特征分布不一致;
3. 样本里的噪音数据干扰过大,大到模型过分记住了噪音特征,反而忽略了真实的输入输出间的关系;
4. 权值学习迭代次数足够多(Overtraining),拟合了训练数据中的噪声和训练样例中没有代表性的特征。
simpler model structure:调小模型复杂度,使其适合自己训练集的数量级(缩小宽度和减小深度)
data augmentation:训练集越多,过拟合的概率越小。增广的方式是对图像旋转,缩放,剪切,添加噪声等。
3. regularization:参数太多,会导致我们的模型复杂度上升,容易过拟合。 正则化是指通过引入模型复杂性带来的惩罚度。 正则化可以保持模型简单,另外,规则项的使用还可以约束我们的模型的特性。
4、 dropout:通俗一点讲就是dropout方法在训练的时候让神经元以一定的概率不工作。
5、 early stopping:对模型进行训练的过程即是对模型的参数进行学习更新的过程,这个参数学习的过程往往会用到一些迭代方法,如梯度下降(Gradient descent)学习算法。Early stopping便是一种迭代次数截断的方法来防止过拟合的方法,即在模型对训练数据集迭代收敛之前停止迭代来防止过拟合。
Early stopping方法的具体做法是,在每一个Epoch结束时(一个Epoch集为对所有的训练数据的一轮遍历)计算validation data的accuracy,当accuracy不再提高时,就停止训练。
6、 ensemble:集成学习算法也可以有效的减轻过拟合。Bagging通过平均多个模型的结果,来降低模型的方差。Boosting不仅能够减小偏差,还能减小方差。
7、重新清洗数据:数据清洗从名字上也看的出就是把“脏”的“洗掉”,指发现并纠正数据文件中可识别的错误的最后一道程序,包括检查数据一致性,处理无效值和缺失值等。导致过拟合的一个原因也有可能是数据不纯导致的,如果出现了过拟合就需要我们重新清洗数据。
18、列举你所知道的神经网络中使用的损失函数
1、平方损失函数:C=0.5*(y−a)^2
,其中y是期望输出,a=f(wx+b)是实际输出;
求导:∂C/∂w=(a−y)f′(wx+b)x
如果激活函数使用的是sigmoid函数的话,根据激活函数的形状和特性可知,当δ(z)趋近于0或者趋近于1的时候,δ′(z)会趋近于0,当δ(z)趋近于0.5的时候,δ′(z)会最大。 比如说,取y=0,当δ(z)=1的时候,期望值和实际值的误差f(wx+b)−y达到最大,此时,δ′(z)会趋近于0,所以就会发生收敛速度慢的问题。
2、交叉熵:C=−(ylna+(1−y)ln(1−a)),交叉熵越大即信息量越大,两个分布之间的差异越大,越对实验结果感到意外,反之,交叉熵越小,两个分布越相似,越符合预期。
3、合页损失:应用于SVM中:max{0,1-x}
19、对于多分类问题,为什么神经网络一般使用交叉熵而不用欧氏距离损失?
交叉熵在一般情况下更容易收敛到一个更好的解。https://www.cnblogs.com/nxf-rabbit75/p/10568196.html
20、1x1卷积有什么用途?
通道降维,保证卷积神经网络可以接受任何通道的输入数据。
21、随机梯度下降法,在每次迭代时能保证目标函数值一定下降吗?为什么?
不能,每次迭代时目标函数不一样。
随机梯度下降算法每次只随机选择一个样本来更新模型参数,因此每次的学习是非常快速的,并且可以进行在线更新。随机梯度下降最大的缺点在于每次更新可能并不会按照正确的方向进行,由于算法的随机性质,它比批量梯度下降要不规则得多。成本函数将不再是缓缓降低直到抵达最小值,而是不断上上下下,但是从整体还是慢慢下降。最终会非常接近最小值,但是即使它到达了最小值,依旧还会持续反弹,永远不会停止。所以算法停下来的参数值肯定是足够好的,但不是最优的。
22、梯度下降法,为什么需要设置一个学习率?
使得迭代之后的值在上次值的邻域内,保证可以忽略泰勒展开中的二次及二次以上的项,不设置学习率,就是默认为“1”,显然这个步幅太大,无法有效收敛的最优点。
23、解释梯度下降法中动量项的作用
利用之前迭代时的梯度值,如果在峡谷地区(某些方向较另一些方向上陡峭得多,常见于局部极值点),SGD会在这些地方附近振荡,从而导致收敛速度慢。
加上动量项就像从山顶滚下一个球,求往下滚的时候累积了前面的动量(动量不断增加),因此速度变得越来越快,直到到达终点。同理,在更新模型参数时,对于那些当前的梯度方向与上一次梯度方向相同的参数,那么进行加强,即这些方向上更快了;对于那些当前的梯度方向与上一次梯度方向不同的参数,那么进行削减,即这些方向上减慢了。因此可以获得更快的收敛速度与减少振荡。
24、为什么现在倾向于用小尺寸的卷积核?
25、解释GoogLeNet的Inception模块的原理
对输入图像用多个不同尺寸的卷积核、池化操作进行同时处理,增加了多种核 1x1,3x3,5x5,还有直接max pooling的。此外为了避免这一现象提出的inception结构,在3x3前,5x5前,max pooling后分别加上了1x1的卷积核起到了降低feature map厚度的作用。
26、卷积核反卷积的计算
对于convolution:
output = (input + 2 * padding - ksize) / stride + 1;
对于deconvolution:
output = (input - 1) * stride + ksize - 2 * padding;
注意这里的padding指的是卷积操作使用的pad,(p),反卷积时的pad(表示)两者关系是
27、解释批量归一化的原理
在数据送入神经网络的某一层进行处理之前,对数据做归一化,批量标准化一般用在非线性映射(激活函数)之前。按照训练样本的批量进行处理,先减掉这批样本的均值,然后除以标准差,然后进行缩放和平移。缩放和平移参数通过训练得到。预测时使用训练时确定的这些值来计算。
减均值除方差:远离饱和区
BN的本质就是利用优化变一下方差大小和均值位置,使得新的分布更切合数据的真实分布,保证模型的非线性表达能力。BN的极端的情况就是这两个参数等于mini-batch的均值和方差,那么经过batch normalization之后的数据和输入完全一样,当然一般的情况是不同。
28、解释SVM核函数的原理
核函数将数据映射到更高维的空间后处理,但不用做这种显式映射,而是先对两个样本向量做内积,然后用核函数映射。这等价于先进行映射,然后再做内积。
29、什么是过拟合,过拟合产生的原因是什么?有什么方法能减轻过拟合?
过拟合指在训练集上表现的很好,但在测试集上表现很差,推广泛化能力差。产生过拟合的原因是训练样本的抽样误差,训练时拟合了这种误差,参数太多、模型复杂度高。增加训练样本,尤其是样本的代表性;正则化
30、什么样的函数可以用作激活函数?
非线性,几乎处处可导,单调,Sigmod/tanh双曲正切/relu...
31、什么是鞍点问题?
梯度为0,Hessian矩阵不定的点,不是极值点。例如函数:,显然在(0, 0)这点处不是极值点,但梯度为0。
32、在训练深度神经网络的过程中,遇到过哪些问题,怎么解决的?
不收敛,收敛太慢,泛化能力差。调整网络结构,调整样本,调整学习率,调整参数初始化策略
33、SVM如何解决多分类问题
多个二分类器组合。1对1方案,1对剩余方案,多类损失函数
34、列举你知道的聚类算法
层次聚类,k均值算法,DBSCAN算法,OPTICS算法,谱聚类
35、列举常用的最优化方法
36、关于神经网络的说法中,正确的是( C)
A.增加网络层数,总能减小训练集错误率
B.减小网络层数,总能减小测试集错误率
C.增加网络层数,可能增加测试集错误率
因为:增加神经网络层数,确实可能提高模型的泛化性能,但不能绝对地说更深的网络能带来更小的错误率,还是要根据实际应用来判断,比如会导致过拟合等问题,因此只能选C。
1、为什么随机森林能降低方差?
随机森林的预测输出值是多个决策树的均值,如果有n个独立同分布的随机变量xi,它们的方差都为,则它们的均值的方差为:
2、对于带等式和不等式约束的优化问题,KKT条件是取得极值的充分条件还是必要条件?对于SVM呢?
对于一般的问题,KKT条件仅是取得极值的必要条件。对于凸优化问题,则是充分条件,SVM是凸优化问题。
当原始问题和对偶问题满足KKT 条件时,他们的最优值相等:时,此时可以用求解对偶问题来求解原始问题(当然是对偶问题求解比直接求解原始问题简单的情况下)。
3、解释维数灾难的概念
当特征向量很少时,增加特征,可以提高算法的精度,但当特征向量的维数增加到一定数量之后,再增加特征,算法的精度反而会下降。
4、Logistic回归为什么用交叉熵而不用欧氏距离做损失函数?
如果用欧氏距离,不是凸函数,而用交叉熵则是凸函数,如果使用欧氏距离作为目标函数则无法保证目标函数是凸函数。这是使用交叉熵而不使用欧氏距离作为logistic回归的目标函数的主要原因。
5、解释hinge loss损失函数
如果样本没有违反不等式约束,则损失为0;如果违反约束,则有一个正的损失值。铰链损失(合页):主要用于支持向量机(SVM) 中,Hinge loss 的叫法来源于其损失函数的图形,为一个折线,通用的函数表达式为:
在机器学习中,Hing 可以用来解间距最大化 的问题,最有代表性的就是SVM 问题,最初的SVM 优化函数:
因此, SVM 的损失函数可以看作是 L2-norm 和 Hinge loss 之和。
from:https://blog.csdn.net/u010976453/article/details/78488279
6、解释GBDT的核心思想
用多棵决策树树来拟合一个目标函数。每一棵决策树拟合的是之前迭代得到的模型的残差。求解的时候,对目标函数使用了一阶泰勒展开,用梯度下降法来训练决策树。残差向量是它的全局最优方向,这就是Gradient。
决策树分为两大类,回归树和分类树。前者用于预测实数值,如明天的温度、用户的年龄、网页的相关程度;后者用于分类标签值,如晴天/阴天/雾/雨、用户性别、网页是否是垃圾页面。这里要强调的是,前者的结果加减是有意义的,如10岁+5岁-3岁=12岁,后者则无意义,如男+男+女=到底是男是女? GBDT的核心在于累加所有树的结果作为最终结果,就像前面对年龄的累加(-3是加负3),而分类树的结果显然是没办法累加的,所以GBDT中的树都是回归树,不是分类树。
GBDT的思想可以用一个通俗的例子解释,假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁,这时我们用6岁去拟合剩下的损失,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有一岁了。如果我们的迭代轮数还没有完,可以继续迭代下面,每一轮迭代,拟合的岁数误差都会减小。
from:https://www.cnblogs.com/peizhe123/p/5086128.html
7、解释XGBoost的核心思想
在GBDT的基础上,目标函数增加了正则化项,并且在求解时做了二阶泰勒展开。
9、什么是反卷积deconvolution?
反卷积也称为转置卷积,如果用矩阵乘法实现卷积操作,将卷积核平铺为矩阵,则转置卷积在正向计算时左乘这个矩阵的转置WT,在反向传播时左乘W,与卷积操作刚好相反,需要注意的是,反卷积不是卷积的逆运算。
另外一种反卷积做法,假设原图是3X3,首先使用上采样让图像变成7X7,可以看到图像多了很多空白的像素点。使用一个3X3的卷积核对图像进行滑动步长为1的valid卷积,得到一个5X5的图像,我们知道的是使用上采样扩大图片,使用反卷积填充图像内容,使得图像内容变得丰富
10、反卷积有哪些用途?
实现上采样,扩大图像尺寸;近似重构输入图像,卷积层可视化
11、PCA(主成分分析)优化的目标是什么?
最小化重构误差/最大化投影后的方差
12、LDA(线性判别分析)优化的目标是什么?
最大化类间差异与类内差异的比值
14、softmax回归训练时的目标函数时凸函数吗?
是,但有不止一个全局最优解,因为Softmax 回归有一个不寻常的特点:它有一个“冗余”的参数集。更正式一点来说, Softmax 模型被过度参数化了。对于任意一个用于拟合数据的假设函数,可以求出多组参数值,这些参数得到的是完全相同的假设函数 。此时我们需要对代价函数做一个改动:加入权重衰减。权重衰减可以解决 softmax 回归的参数冗余所带来的数值问题。
from:https://blog.csdn.net/qq_30815237/article/details/90208509
15、SVM为什么要求解对偶问题?为什么对偶问题与原问题等价?
原问题不容易求解,含有大量的不易处理的不等式约束。原问题满足Slater、KKT条件,强对偶成立,原问题与对偶问题等价
16、神经网络是生成模型还是判别模型?
从概率分布的角度考虑,对于一堆样本数据,每个均有特征Xi对应分类标记yi。数据要求:生成模型需要的数据量比较大,能够较好地估计概率密度;而判别模型对数据样本量的要求没有那么多。
生成模型:学习得到联合概率分布P(x,y),即特征x和标记y共同出现的概率,然后求条件概率分布。能够学习到数据生成的机制。生成模型以统计学和Bayes作为理论基础:
1、朴素贝叶斯:
通过学习先验概率分布和条件概率分布
,得到联合概率分布,然后对应分类时的后验概率为:
使用极大似然估计(使用样本中的数据分布来拟合数据的实际分布概率)得到先验概率。
2、混合高斯模型:
3、隐马尔可夫模型 (HMM)
由隐藏的马尔可夫链随机生成观测序列,是生成模型。HMM是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程。包含三要素:初始状态概率向量pie,状态转移概率矩阵A,观测概率矩阵B。
判别模型:学习得到条件概率分布P(y|x),即在特征x出现的情况下标记y出现的概率。
1、感知机 (线性分类模型)
2、k近邻法:基于已知样本,对未知样本进行预测时,找到对应的K个最近邻,通过多数表决进行预测。没有学习过程。
3、决策树:决策树在每个单元定义一个类的概率分布,形成一个条件概率分布。决策树中递归地选择最优特征,所谓最优特征即分类效果最好的特征。
4、logistic回归模型,使用条件概率分布表示:
可以使用极大似然估计法估计模型参数,对优化目标使用梯度下降法或者拟牛顿法。直接输出类后验概率p(y|x),没有对类条件概率p(x|y)或者联合概率p(x, y)建模。
5、最大熵模型:概率模型中,熵最大的模型是最好的模型,可以使用拉格朗日函数求解对偶问题解决。
6、支持向量机 (SVM)
SVM分为线性可分支持向量机 (硬间隔最大化)、线性支持向量机 (软间隔最大化)、非线性支持向量机 (核函数)三种。目的是最大化间隔,这是和感知机最大的区别。
7、boosting方法 (AdaBoost等)
通过改变训练样本的权重,训练多个分类器,将分类器进行线性组合,提升分类性能。AdaBoost采用加权多数表决的方法。
8、条件随机场 (conditional random field, CRF)
给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模型,其特点是假设输出随机变量构成马尔可夫随机场。可应用于标注问题。
9、CNN:训练过程中,每一个中间层都有其功能,但其具体的功能无法知道,直接输出类别标签,或者输出类后验概率p(y|x)
from:https://blog.csdn.net/u010358304/article/details/79748153
17、凸函数与黑塞矩阵
首先半正定矩阵定义为: ,其中X 是向量,M 是变换矩阵
我们换一个思路看这个问题,矩阵变换中,MX代表对向量 X进行变换,我们假设变换后的向量为Y=MX,于是半正定矩阵可以写成:, 他是两个向量的内积。 同时我们也有公式:
||X||, ||Y||代表向量 X,Y的长度,是他们之间的夹角。 于是正定、半正定矩阵的直觉代表一个向量经过它的变化后的向量与其本身的夹角小于等于90度。
判定方法其中最方便也是常用的一种为:
若所有特征值均不小于零,则称为半正定。
若所有特征值均大于零,则称为正定。
黑塞矩阵的正定性
Hessian矩阵的正定性在判断优化算法可行性时非常有用,简单地说,黑塞矩阵正定,则
1. 函数的二阶偏导数恒 > 0, 函数的变化率(斜率)即一阶导数始终处于递增状态
2. 函数为凸
因此,在诸如牛顿法等梯度方法中,使用黑塞矩阵的正定性可以非常便捷的判断函数是否有凸性,也就是是否可收敛到局部/全局的最优解
为什么要求是凸函数呢?因为如果是下图这样的函数,则无法获得全局最优解。
为什么要求是凸集呢?因为如果可行域不是凸集,也会导致局部最优
18、Batch Normalization 和 Group Normalization有何区别?
BN是在batch这个维度上进行归一化,在训练大型网络和将特征转移到计算机视觉任务中(包括检测、分割和视频),内存消耗限制了只能使用小批量的BN,此时BN的误差会迅速增加。
GN是计算channel方向每个group的均值和方差。GN将通道划分成组,然后在每一个组中计算用于归一化的均值和方差。GN的计算不依赖于batch size,而且它的准确率在各种batch size下是稳定的
23、目标检测中IOU是如何计算的?
检测结果与 Ground Truth 的交集比上它们的并集,即为检测的准确率 IoU。
26、在神经网络体系结构中,哪些会有权重共享??
(1)卷积神经网络
(2)递归神经网络
(3)全连接网络
答案 (1)&(2)
27、一个典型人脸识别系统的识别流程?
人脸检测--》人脸对齐--》人脸特征提取--》人脸特征比对
29、使用深度卷积网络做图像分类如果训练一个拥有1000万个类的模型会碰到什么问题?
提示:内存/显存占用;模型收敛速度等
31、深度学习中为什么不用二阶导去优化?
Hessian矩阵是n*n, 在高维情况下这个矩阵非常大,计算和存储都是问题。
32、深度机器学习中的mini-batch的大小对学习效果有何影响?
mini-batch太小会导致收敛变慢,太大(就变成批量了)容易陷入sharp minima尖峰最小值,泛化性不好
33、线性回归对于数据的假设是怎样的?
(1) 线性,y是多个自变量x之间的线性组合
(2) 同方差性,不同的因变量x的方差都是相同的
(3) 弱外生性,假设用来预测的自变量x是没有测量误差的
(4) 预测变量之中没有多重共线性
34、什么是共线性, 跟过拟合有啥关联?
是指模型的自变量之间存在相关关系,随着样本量的增加,自变量的相互作用导致模型的方差随之变大,这样的模型及时拟合出来,也是不准确的,表现为模型拟合出的自变量系数无法表达正确的经济或业务含义。建议使用在模型拟合前先对自变量进行相关分析,模型拟合过程中使用VIF检验是否有多重共线性。
共线性:多变量线性回归中,变量之间由于存在高度相关关系而使回归估计不准确。共线性会造成冗余,导致过拟合。
解决方法:排除变量的相关性/加入权重正则(L1)。
35、Bias和Variance的区别?
Bias量了学习算法的期望预测与真实结果的偏离程度,即刻画了算法本身的拟合能力。
Variance度量了同样大小的训练集的变动所导致的学习性能变化,即刻画了数据扰动所造成的影响。
36、对于支持向量机,高斯核一般比线性核有更好的精度,但实际应用中为什么一般用线性核而不用高斯核?
使用SVM判别未知数据点时,当我们计算出拉格朗日乘子,使用SVM判别一个新数据点
的分类,不需要计算出w,只需计算:
这一点至关重要,是之后使用 Kernel 进行非线性推广的基本前提。此外,所谓 Supporting Vector 也在这里显示出来——事实上,所有非Supporting Vector 所对应的系数都是等于零的,因此对于新点的内积计算实际上只要针对少量的“支持向量”而不是所有的训练数据即可。为什么非支持向量对应的
等于零呢?直观上来理解的话,就是这些“后方”的点,对超平面是没有影响的,由于分类完全有超平面决定,所以这些无关的点并不会参与分类问题的计算,因而也就不会产生任何影响了。
核函数能简化映射空间中的内积运算——刚好“碰巧”的是,在我们的 SVM 里需要计算的地方数据向量总是以内积的形式出现的。对比刚才我们上面写出来的式子,现在我们的分类函数为:
如果训练样本的量很大,训练得到的模型中支持向量的数量太多,在每次做预测时,高斯核需要计算待预测样本与每个支持向量的内积,然后做核函数变换,这会非常耗时;而线性核只需要计算WX+b。
37、高斯混合模型中,为什么各个高斯分量的权重之和要保证为1?
为了保证这个函数时一个概率密度函数,即积分值为1
42、为什么很多时候用正态分布来对随机变量建模?
现实世界中很多变量都服从或近似服从正态分布。中心极限定理指出,抽样得到的多个独立同分布的随机变量样本,当样本数趋向于正无穷时,它们的和服从正态分布
from:https://mp.weixin.qq.com/s/e8rlmjNp9solM3ZJXsioaA
from:机器学习与深度学习核心知识点总结
from:机器学习与深度学习常见面试题(下)
决策树ID3和C4.5的差别?各自优点?
Boost算法
CART(回归树用平方误差最小化准则,分类树用基尼指数最小化准则)
GBDT与随机森林算法的原理以及区别。
优化算法中常遇到的KKT条件?作用是?
最近邻算法KNN(分类与回归)
L1和L2函数?L1和L2正则项的比较,如何解决 L1 求导困难?
L1正则为何可把系数压缩成0,说明坐标下降法的具体实现细节
LR为什么用sigmoid函数。这个函数有什么优点和缺点?为什么不用其他函数?
LR和SVM的区别?libsvm和liblinear的区别?
Logistics与随机森林比较
Logistics(理论推导);Logistic回归的推导,如何得到objective function?
SVM与随机森林的差别?
SVM为何要引入拉格朗日的优化方法?
SVM原问题和对偶问题关系?
SVM在哪个地方引入的核函数, 如果用高斯核可以升到多少维。
SVM如何防止过拟合?
SVM的目标函数?常用的核函数有哪些?
SVM的过程,理论推导
bagging、adaboost、boosting区别在哪
EM 与 k-means 的关系?
k-means算法中的k如何选取?
k-means算法初始点怎么选择?
k-means的原理,优缺点以及改进。
k折交叉验证中k取值多少有什么关系?
L2惩罚项是怎么减小Overfitting的?L1,L2等范数的通式是?差别是?在什么场景下用什么范数?L1在0处不可导,怎么处理?
随机森林和GBDT差别?
RF, GBDT, xgboost的区别?
为什么要做数据归一化?
梯度下降法的原理以及各个变种(批量梯度下降,随机梯度下降法,mini 梯度下降法),以及这几个方法会不会有局部最优问题。
牛顿法原理和适用场景,有什么缺点,如何改进(拟牛顿法)
什么情况下一定会发生过拟合?
贝叶斯估计?
介绍LR、RF、GBDT ,分析它们的优缺点
会哪些机器学习算法?信息熵公式?
决策树原理;决策树处理连续值的方法;决策树如何防止过拟合;决策树过拟合哪些方法,前后剪枝。
分类模型可做回归分析吗?反过来可以吗?
分类模型和回归模型的区别?
判别模型和生成模型?差别
各个模型的Loss function,牛顿学习法、SGD如何训练。
在模型的训练迭代中,怎么评估效果?
如何防止过拟合(增加数据,减少模型复杂度->正则化)
对于同分布的弱分类器,求分类器均值化之后的分布的均值跟方差。
对于机器学习你都学了哪些?讲一个印象深的。
常见分类模型( svm,决策树,贝叶斯等)的优缺点,适用场景以及如何选型
数据归一化的方式
手写k-means的伪代码。
手写svm硬软间隔对偶的推导
手写逻辑回归(损失函数及更新方式推导)
BP算法原理
改变随机森林的训练样本数据量,是否会影响到随机森林学习到的模型的复杂度?
数据挖掘各种算法,以及各种场景下的解决方案
是否了解mutual infomation、chi-square、LR前后向、树模型等特征选择方式。
是否了解线性加权、bagging、boosting、cascade等模型融合方式
有哪些常见的分类器,简单介绍下原理
机器学习与深度学习的区别
线性回归与逻辑回归区别?
机器学习:几种树模型的原理和对比,朴素贝叶斯分类器原理以及公式,出现估计概率值为 0 怎么处理(拉普拉斯平滑),缺点;
DBSCAN聚类算法原理
主成分分析法原理、MapReduce原理、Spark等(数据岗题)
梯度下降、牛顿、拟牛顿算法的原理
梯度下降的优缺点。
深度学习有很大部分是CNN,给他用通俗的语言解释下卷积的概念,解释下CNN中的优势及原因
牛顿法、随机梯度下降算法和直接梯度下降算法的区别?
牛顿法推导
特征选择方法有哪些
由数据引申到数据不平衡怎么处理(10W正例,1W负例,牛客上有原题)
聊聊SVM,这段说了好久,从基本的线性可分到不可分,相关升维,各种核函数,每个是如何实现升。以及出现了XX问题,分析是样本的原因还是其他原因。针对不同情况,采取什么解决方案较好。
自己实现过什么机器学习算法
解决过拟合的方法有哪些?
解释一下过拟合和欠拟合,有哪些方法防止过拟合。
如何构造决策树、计算信息熵和信息增益、说明C4.5 、ID3、 CART的区别及优缺点
详细讨论了样本采样和bagging的问题
说一下Adaboost,权值更新公式。当弱分类器是LR时,每个样本的的权重是w1,w2...,写出最终的决策公式。
说了一下bagging跟boosting。
说明L1和L2正则的效果与为什么形成这种情况(L1正则稀疏,L2正则平滑,之后说明就是画图说明正则化)
选个你熟悉的机器学习方法 ,着重介绍一下产生原因,推导公式,背后统计意义什么等等
逻辑回归估计参数时的目标函数
逻辑回归的值表示概率吗?
数据挖掘的基础知识,包括SVM,逻辑回归、EM、K-means等,然后给出很多场景问你遇到这些情况你如何处理数据,怎么进行建模等
随机梯度下降,标准梯度
随机森林和GBDT的区别?LR的参数怎么求解?有没有最优解?