-
https://blog.csdn.net/u010976453/article/details/78488279
-
https://blog.csdn.net/woaidapaopao/article/details/77806273
-
https://blog.csdn.net/woaidapaopao/article/details/77806273
-
请简要介绍下SVM
SVM叫做支持向量机,它的目标是为确定一个分类超平面,从而将不同的数据分隔开
支持向量机分类:
支持向量机分为三种,线性可分支持向量机,线性支持向量机以及非线性支持向量机,当训练数据线性可分时,通过最大化硬间隔,学习一个线性分类器,这种称之为线性可分支持向量机(硬间隔支持向量机);(所谓硬间隔就是线性可分)当训练数据近似线性可分时,通过最大化软间隔,也学习一个线性分类器,即线性支持向量机,当训练数据线性不可分时,通过使用核技巧及软间隔最大化,学习非线性支持向量机
-
请介绍Tensorflow计算图
tensorflow是一个通过计算图的形式来表述计算的编程系统,可以把计算图看做一种有向图,tf中每一个计算都是计算图上的一个节点,而节点之间的边描述了计算之间的依赖关系
-
请问GBDT和XGBoosts的区别是什么
首先介绍一下boosting思想,每次训练单个弱分类器时,都将上一次分错的数据权重提高一点再进行当前单个弱分类器
的学习,这样往后执行,训练出来的单个弱分类器就会越在意那些容易分错的点,最终通过加权求和的方式组合成一个最终的学习器
gradent boosting 是boosting的一种,每一次构建单个学习器时,是在之前建立的模型的损失函数的梯度下降方向, GB与Adaboost的区别在于:
AdaBoost是通过提升错分数据点的权重来定位模型的不足
Gradient Boosting是通过算梯度(gradient)来定位模型的不足
主要思想是,每一次建立单个学习器时,是在之前建立的模型的损失函数的梯度下降方向,损失函数越大,说明模型越容易出错,如果我们的模型能够让损失函数持续的下降,则说明我们的模型在不停的改进,而最好的方式就是让损失函数在其梯度方向上下降
GBDT=GB+DT(decision tree),即基分类器为决策树时,这里的决策树是回归树
Xgboost 是GB算法的高效实现,其中基分类器除了可以使CART也可以是线性分类器
几大区别:
- 传统GBDT以CART作为基分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑斯帝回归或者线性回归
- 传统GBDT在优化时只用到了一阶导数,而xgboost对代价函数进行了二阶泰勒展开,用到了一阶和二阶导数
- xgboost加入了正则项,防止过拟合
- shrinkage,相当于学习率,在每完成一次迭代后,会乘上这个系数,削减每棵树的影响
- 列抽样,借鉴随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算
-
在k-means与kNN,我们用的是欧氏距离来计算最近的邻居之间的距离。为什么不用曼哈顿距离
曼哈顿距离只计算水平或者垂直距离,有维度的限制,而欧氏距离可用于任何空间的距离计算问题,因为,数据点可以存在于任何空间,如国际象棋棋盘,象和车所做的移动是由曼哈顿距离计算的,因为他们是在各自的水平和垂直方向做的运动
-
简单说说特征工程
特征工程是利用数据领域的相关知识来创建能够使机器学习算法达到最佳性能的特征的过程,从数学的角度来讲,特征工程就是人工地去设计输入变量X
-
拼写检查
浏览器中输入区欧盟,输入错误,会被拼写检查为去欧盟,实际上原理是采用了贝叶斯原理,由贝叶斯公式可知P(c|w),w表示拼写错误的情况,而c表示实际想要拼写的单词,等于P(w|c)*P(c)/P(w),也就是在若干备选中选择最大的P(c|w),而P(w)都是相同的,即找到使得P(w|c)*P(c)最大的单词,而P(c)可由文本库中各单词出现频率确定,而P(w|c)表示想要输出c而实际输出w的概率,可以用两个单词的相似度来表示,字形或者读音,越接近出错的概率越高,以此来选择概率最大的单词
-
简要说说一个完整机器学习项目的流程
- 抽象成数学问题(确定是一个分类问题、回归问题还是聚类问题,明确可以获得什么样的数据)
- 获取数据(数据要具有代表性,对数据的量级也要有一个评估,多少样本,多少特征,对内存的消耗,考虑内存是否能放得下,如果放不下考虑降维或者改进算法,如果数据量太大,考虑分布式)
- 特征预处理和特征选择(数据清洗,归一化、缺失值处理、去除共线性等,另外筛选出显著特征、反复理解业务,有时候数据特征选择的好,依靠简单的算法也能得出良好稳定的结果,需要进行特征有效性分析,如相关系数、卡方检验、平均互信息、条件熵、后验概率、逻辑回归权重等方法)
- 训练模型与调优(现在很多算法都已经封装成黑箱供人使用,正则考察的是调参的技术,需要对算法额原理深入理解,能发现问题的症结,来提出良好的调优方案)
- 模型诊断(确定调优的方向,如欠拟合 过拟合这种情况,一般过拟合是增加数据量和降低模型复杂度的思路,欠拟合是增加特征,增加模型复杂度)
- 模型融合(一般提升模型主要在前期的数据清洗和预处理部分,以及后面的模型融合下功夫,有时候会通过在已有预训练模型上进行再融合和调参节省时间,并能取得不错的效果)
- 上线运行(模型在线上运行效果直接决定模型的成败,运行的速度、资源消耗成都、稳定性等是否可以接受)
-
哪些机器学习算法不需要做归一化处理
概率模型不需要归一化,因为他们不关心变量的值,而是关心变量的分布和变量之间的条件概率,如决策树、RF。而像Adaboost、GBDT、SVM、LR、KNN、KMeans之类的最优化问题就需要归一化
-
如何解决梯度消失和梯度膨胀
梯度消失:根据链式法则,当每一层神经元对上一层的输出的偏导乘上权重结果都小于1的话,那么即使这个结果是0.99,经过多层传播之后,误差的输入层的偏导会趋于0,可以用relu激活函数来解决,因为relu=max(0,X),偏导数为1,不会造成梯度消失,而弊端是有可能会产生死神经元
梯度膨胀:每一层神经元对上一层的输出偏导乘上权重结果都大于1的话,经过多层传播之后,误差对输入层的偏导会无穷大,也可以通过激活函数来解决
-
为什么朴素贝叶斯如此朴素
因为朴素贝叶斯有个重要的假设前提,也就是假设样本的所有特征之间是相互独立的,而这个在现实世界中是不真实的,因此说其很朴素
-
在机器学习中,为何要经常对数据归一化
归一化可以:
- 归一化后加快了梯度下降求最优解的速度(两个特征量纲不同,差距较大时,等高线较尖,根据梯度下降可能走之字形,而归一化后比较圆走直线)
- 归一化有可能提高精度 (一些分类器需要计算样本之间的距离,如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,这是不合理的)
-
关于LR
-
关于SVM
-
关于GBDT
-
LR与SVM的联系与区别
- LR与SVM都可以处理分类问题,且一般都可以用于线性二分类问题
- 两个方法都可以增加不同的正则化项
区别:
- LR是参数模型,SVM是非参数模型(参数模型是假设总体服从某一个分布,该分布由一些参数确定,在此基础上构建的模型为参数模型,而非参数模型对于总体的分布不做假设,这里LR是提前假设了分布为伯努利分布即0,1分布,继而求解构建的极大似然函数)
- 从目标函数上看,LR采用logistical loss,SVM采用的是hinge loss
- SVM的处理方式是只考虑支持向量,而LR通过非线性映射,大大减少了离分类面较远的点的权重
- SVM分类预测只需要计算与少数几个支持向量的距离
- LR能做的SVM能做,但可能在准确率上有问题,SVM能做的RL有的做不了
-
LR与线性回归的区别
LR就是一种线性回归,经典线性回归模型的优化目标是最小二乘,而逻辑回归是似然函数,另外线性回归在整个实数域范围内进行预测,线性回归模型无法做到sigmoid的非线性形式,simoid可以轻松处理0/1分类问题
-
协方差与相关性的区别