机器学习常见算法个人总结(面试用)
朴素贝叶斯
参考[1]
事件A和B同时发生的概率为在A发生的情况下发生B或者在B发生的情况下发生A [Math Processing Error]
所以有: [Math Processing Error] 对于给出的待分类项,求解在此项出现的条件下各个目标类别出现的概率,哪个最大,就认为此待分类项属于哪个类别
工作原理机器学习更多实战案例详解 假设现在有样本[Math Processing Error]这个待分类项(并认为[Math Processing Error]里面的特征独立) 再假设现在有分类目标[Math Processing Error] 那么[Math Processing Error]就是最终的分类类别 而[Math Processing Error] 因为[Math Processing Error]对于每个分类目标来说都一样,所以就是求[Math Processing Error] [Math Processing Error] 而具体的[Math Processing Error]和[Math Processing Error]都是能从训练样本中统计出来 [Math Processing Error]表示该类别下该特征出现的概率 [Math Processing Error]表示全部类别中这个这个类别出现的概率 好的,就是这么工作的^_^
工作流程
准备阶段 确定特征属性,并对每个特征属性进行适当划分,然后由人工对一部分待分类项进行分类,形成训练样本。 训练阶段 计算每个类别在训练样本中的出现频率及每个特征属性划分对每个类别的条件概率估计 应用阶段 使用分类器进行分类,输入是分类器和待分类样本,输出是样本属于的分类类别 属性特征 特征为离散值时直接统计即可(表示统计概率) 特征为连续值的时候假定特征符合高斯分布:[Math Processing Error] 那么[Math Processing Error] Laplace校准(拉普拉斯校验) 当某个类别下某个特征划分没有出现时,会有[Math Processing Error],就是导致分类器质量降低,所以此时引入Laplace校验,就是对没类别下所有划分的计数加1。
遇到特征之间不独立问题 参考改进的贝叶斯网络,使用DAG来进行概率图的描述
优缺点 朴素贝叶斯的优点:机器学习更多实战案例详解
对小规模的数据表现很好,适合多分类任务,适合增量式训练。
缺点: 对输入数据的表达形式很敏感(离散、连续,值极大极小之类的)。 逻辑回归和线性回归 参考[2,3,4]
LR回归是一个线性的二分类模型,主要是计算在某个样本特征下事件发生的概率,比如根据用户的浏览购买情况作为特征来计算它是否会购买这个商品,抑或是它是否会点击这个商品。然后LR的最终值是根据一个线性和函数再通过一个sigmoid函数来求得,这个线性和函数权重与特征值的累加以及加上偏置求出来的,所以在训练LR时也就是在训练线性和函数的各个权重值w。
[Math Processing Error] 关于这个权重值w一般使用最大似然法来估计,假设现在有样本[Math Processing Error],其中[Math Processing Error]表示样本的特征,[Math Processing Error]表示样本的分类真实值,[Math Processing Error]的概率是[Math Processing Error],则[Math Processing Error]的概率是[Math Processing Error],那么观测概率为: [Math Processing Error]
则最大似然函数为: [Math Processing Error] 对这个似然函数取对数之后就会得到的表达式 [Math Processing Error]
估计这个[Math Processing Error]的极大值就可以得到[Math Processing Error]的估计值。
实际操作中一般会加个负号 改为求最小
所以求解问题就变成了这个最大似然函数的最优化问题,这里通常会采样随机梯度下降法和拟牛顿迭代法来进行优化
梯度下降法
LR的损失函数为: [Math Processing Error]
这样就变成了求[Math Processing Error] 其更新w的过程为
[Math Processing Error]
其中[Math Processing Error],直到[Math Processing Error]不能再小时停止
梯度下降法的最大问题就是会陷入局部最优,并且每次在对当前样本计算cost的时候都需要去遍历全部样本才能得到cost值,这样计算速度就会慢很多(虽然在计算的时候可以转为矩阵乘法去更新整个w值)机器学习更多实战案例详解
所以现在好多框架(mahout)中一般使用随机梯度下降法,它在计算cost的时候只计算当前的代价,最终cost是在全部样本迭代一遍之求和得出,还有他在更新当前的参数w的时候并不是依次遍历样本,而是从所有的样本中随机选择一条进行计算,它方法收敛速度快(一般是使用最大迭代次数),并且还可以避免局部最优,并且还很容易并行(使用参数服务器的方式进行并行) [Math Processing Error] 这里SGD可以改进的地方就是使用动态的步长 [Math Processing Error] 其他优化方法 拟牛顿法(记得是需要使用Hessian矩阵和cholesky分解) BFGS L-BFGS
优缺点:无需选择学习率α,更快,但是更复杂
关于LR的过拟合问题: 如果我们有很多的特性,在训练集上拟合得很好,但是在预测集上却达不到