一些常用的机器学习算法

一些常用的机器学习算法

逻辑回归

逻辑回归是假设数据服从伯努利分布,通过极大似然估计的方法,运用梯度下降算法作为求解方法求解参数,达到对数据进行二分类或者多分类(softmax多项逻辑回归)目的,本质上还是线性回归,属于广义线性回归,只是在特征的映射中加入了一层逻辑函数g(z),即先把线性特征求和,然后使用函数g(z)作为假设函数来预测,g(z)可以将连续值映射到0和1 .g(z)就是sigmoid函数

假设函数
g ( z ) = 1 1 + e − z g(z) = \frac{1}{1+e^{-z}} g(z)=1+ez1

h θ ( x ) = g ( θ T x ) = 1 1 + e − θ T x h_{\theta}(x) = g(\theta^{T}x) = \frac{1}{1+e^{-\theta^{T}x}} hθ(x)=g(θTx)=1+eθTx1

逻辑回归的损失函数

采用对数似然作为损失函数(似然函数取对数)
J ( w , b ) = 1 m ∑ i = 1 m L ( y ˉ i , y i ) = 1 m ∑ i = 1 m ( − y l o g ( y ˉ ( i ) ) − ( 1 − y ( i ) ) l o g ( 1 − y ˉ ( i ) ) ) J(w,b)=\frac{1}{m}\sum_{i=1}^{m}L(\bar{y}^{i},y^{i}) = \frac{1}{m}\sum_{i=1}^{m}(-ylog(\bar{y}^{(i)})-(1-y^{(i)})log(1-\bar{y}^{(i)})) J(w,b)=m1i=1mL(yˉi,yi)=m1i=1m(ylog(yˉ(i))(1y(i))log(1yˉ(i)))
似然函数
∏ i = 1 N [ π ( x i ) ] y i [ 1 − π ( x i ) ] 1 − y i \prod_{i=1}^{N}[\pi(x_{i})]^{y_{i}}[1-\pi(x_{i})]^{1-y_{i}} i=1N[π(xi)]yi[1π(xi)]1yi
对数似然函数
l ( w ) = ∑ i = 1 M [ y i l o g π ( x i ) + ( 1 − y i ) l o g ( 1 − π ( x i ) ) ] l(w) = \sum_{i=1}^{M}[y_{i}log\pi(x_{i})+(1-y_{i})log(1-\pi(x_{i}))] l(w)=i=1M[yilogπ(xi)+(1yi)log(1π(xi))]

= ∑ i = 1 N [ y i l o g π ( x i ) 1 − π ( x i ) + l o g ( 1 − π ( x i ) ) ] = \sum_{i=1}^{N}[y_{i}log\frac{\pi(x_{i})}{1-\pi(x_{i})}+log(1-\pi(x_i))] =i=1N[yilog1π(xi)π(xi)+log(1π(xi))]

= ∑ i = 1 N ( w ∗ x i − l o g ( 1 + e x p ( w ∗ x i ) ) ) = \sum_{i=1}^{N}(w*x_{i}-log(1+exp(w*x_{i}))) =i=1N(wxilog(1+exp(wxi)))

求l(w)的极大值,使问题变成以对数似然为目标的最优化问题,采用梯度下降法求解

如何分类

y值是一个连续变量,划定一个阈值,y值大于这个阈值的是一类,小于这个阈值的是另一类

逻辑回归使用对数损失而不是用平方损失的原因

在使用Sigmoid函数作为正样本的概率时,同时将平方损失作为损失函数,这时所构造出来的损失函数时非凸的,不容易求解,容易得到其局部最优解,而如果使用极大似然,其目标就是对数似然函数,该损失函数时关于未知参数的高阶连续可导的凸函数,便于求全局最优解

将极大似然函数取对数后等同于对数损失,在逻辑回归这个模型下,对数损失函数的训练求解参数速度时比较快的,和sigmoid函数本身的梯度无关,这样更新的速度是可以自始至终都比较稳定,而如果使用平方损失函数,梯度更新的速度和sigmoid函数本身的梯度时很相关的,sigmoid函数在它定义域内的梯度都不大于0.25,这样训练会特别慢

**优点:**形式简单,模型的可解释性强,模型效果在工程上可以接受,训练速度较快,资源占用小,方便输出结果调整,

**缺点:**准确率不是太高,很难处理数据不平衡问题,处理非线性数据比较麻烦,逻辑回归其本身无法筛选特征。

逻辑回归常用的优化方法有哪些

  • 一阶方法
    • 梯度下降,随机梯度下降,mini随机梯度下降。随机梯度下降不但速度上比原始梯度下降要快,局部最优化问题时可以一定程度上抑制局部最优解的发生。
  • 二阶方法牛顿法拟牛顿法
    • 牛顿法 其实就是通过切线与X轴的交点不断更新切线的位置,知道达到曲线与X轴的交点得到方程解。在实际应用中我们因为常常要求解决凸优化问题,也就是要求解函数一阶导数为0的位置,而牛顿法恰好可以给这种问题提供解决方法。实际应用中牛顿法首先选择一个点作为起点,并进行一次二阶泰勒展开得到导数为0的点进行一个更新,直到达到要求,这时牛顿法也就成了二阶求解问题,比一阶方法更快。我们常常看到的x通常为一个多维向量,也就引出了Hessian矩阵的概念,就是x的二阶导数矩阵
    • 缺点:牛顿法是定长迭代,没有步长因子,所以不能保证函数值稳定下降,严重时甚至会失败。还有就是牛顿法要求函数一定时二阶可导。最重要的时计算Hessian矩阵的逆复杂度很大。
    • 拟牛顿法:不用二阶偏导而是构造出Hessian矩阵的近似正定对称矩阵的方法成为拟牛顿法。拟牛顿法的思路就是用一个特别的表达形式来模拟Hessian矩阵或者他的逆使得表达式满足拟牛顿条件。主要有DFP法(逼近Hessian的逆,BFGS(直接逼近Hessian矩阵),L-BFGS(可以减少BFGS所需的存储空间))

逻辑回归为什么要对特征进行离散化

  • 非线性,逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合;离散特征的增加和减少都很容易,易于模型的快速迭代。
  • 速度快:稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;
  • 鲁棒性:离散化后的特征对异常数据具有很强的鲁棒性
  • 方便交叉与特征组合:离散化后可以进行特征交叉,由M+N个变量变为M*N 个变量,进一步引入非线性,提升表达能力;
  • 稳定性:特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;
  • 简化模型:特征离散化以后,起到了简化逻辑回归模型的作用,降低了模型过拟合的风险。

逻辑回归模型的目标函数中增大L1正则化会时什么结果

所有的参数w都会变成0.

SVM

支持向量机是一个二分类模型,它的基本模型定义为特征空间上的间隔最大的线性分类器,因为支持向量机引入了核技巧,这使它成为实质上的非线性分类器,学习策略为最大化分类间隔,最终可转化为凸二次规划问题求解,也等价于正则化的合页损失函数的最小化问题,支持向量机的学习算法是求解凸二次规划的最优化算法

支持向量机的学习方法包含从简至繁的模型,包括由线性可分支持向量机线性支持向量机非线性支持向量机

  • 当训练数据线性可分时,通过硬间隔最大化,学习一个线性分类器,即线性可分支持向量机,也叫硬间隔支持向量机
  • 当训练数据近似可分时,通过软间隔最大化,也学习一个线性分类器,即线性支持向量机,也叫软间隔支持向量机。
  • 当训练数据线性不可分时,通过使用核函数,以及软间隔最大化,学习非线性支持向量机

硬间隔和软间隔最大的区别在于是否引入了松弛变量

损失函数一般为Hing loss
J ( θ ) = 1 2 ∣ ∣ θ ∣ ∣ 2 + C ∑ i m a x ( 0 , 1 − y i ( θ T x i + b ) ) J(\theta)=\frac{1}{2}||\theta||^{2}+C\sum_{i}max(0,1-y_{i}(\theta^{T}x_{i}+b)) J(θ)=21θ2+Cimax(0,1yi(θTxi+b))
核函数:核函数隐含着一个从低维空间到高维空间的映射,这个映射可以把低维空间中线性不可分的两类点变成线性可分的

核函数包括,线性核 高斯(RBF)核,多项式核,sigmoid核函数等等

如何选择

当样本的特征很多且维数很高时可以考虑用SVM的线性核函数

当样本量较多,特征较少时,一般手动进行特征的组合在使用SVM的线性核函数

当样本维度不高且数量较少时,且不知道改用什么核函数时一般有限使用高斯核函数,因为高斯核函数为一种局部性较强的核函数,无论对于大样本还是小样本都有较好的性能,且相对于多项式核函数有较少的参数

RandomForest 随机森林

随机森林是一个包含多个决策树的分类器,属于bagging类的集成学习算法,通过采用bootstrap(自主随机采样),使用多个决策树作为基准分类器构建的森林,因为属于bagging类的集成算法,所以这些基准决策树模型之间没有关联,相互独立。随机森林是由多棵决策树构成得,对于每棵树,他们使用的训练集是采用又放回的方式从总的训练集中采样出来的,而在训练每棵树的结点时,使用的特征是从所有特征中按照一定比例随机的无放回的方式抽取的

特点

  • 当分类资料具有很多种时,可以产生高准确度的分类器
  • 当分类数据为不平衡数据时,随机森林可以平衡误差
  • 随机森林在大数据集上表现很好
  • 可以评估在分类问题上的各个特征的重要程度。

构造方法:随机森林的建立基本上是由随机采样完全分裂两部分组成的。

随机采样

随机森林对输入数据进行行和列的采样,但两种采样的方法有所不同,行采样采用的方式是有放回的采样,即在采样得到的样本集合中,可能会有重复的样本,假设输入样本为N个,那么采样的样本也为N个,

完全分裂

在形成决策树的过程中,决策树的每个结点都要按照完全分裂的方式进行分裂,直到结点不能再分裂,采用这种方式建立出的决策树的某一个叶子结点要么是无法继续分裂的,要么里面的所有样本都是指向同一个分类器。

优点

  • 能够处理高维度的数据,并且不用做特征选择,因为特征子集是随机选择的。
  • 再训练完成后,可以得出特征重要性
  • 再创建随机森林的时候,采用了随机采样,对泛化误差采用的是无偏估计,模型泛化能力强
  • 随机森林由oob(袋外数据),不需要单独换分交叉验证集
  • 训练时每个树都是相对独立的,训练速度快,可以并行化
  • 对缺失值不敏感
  • 相对于Boosting系列的算法,RF实现比较简单

缺点

  • 随机森林再某些噪音较大的数据集上会容易过拟合
  • 对于由不同取值属性的数据,取值划分较多的属性会对随机森林产生更大的影响,影响模型的拟合效果。

决策树

决策树是一种自上而下,对样本数据进行树形分类得过程,由结点和有向边组成,结点分为内部节点和叶结点,其中每个內部结点表示一个特征和属性,叶结点表示类别,从顶部根结点开始,所有样本聚在一起。经过根结点得划分,样本被分到不同得子结点中,再根据子结点得特征进一步划分,直至所有得样本都被归到一个类别中(即叶结点)中。

其学习构建本质上就是从训练集中归纳出一组分类规则,使他与训练数据矛盾较小得同时具有较强得泛化性能,从另一个角度看,学习也是基于训练数据集估计条件概率模型,决策树得损失函数通常是正则化得极大似然函数,学习得策略是以损失函数为目标函数得最小化。

这个最小化问题是一个NP(多项式复杂程度的非确定性问题)完全问题,通常采用启发式算法,来近似求解这一最优化问题,得到的决策树是次最优的,

  • 特征选择
  • 模型生成
  • 决策树剪枝

从总体来看,这三个步骤就是一个递归选择最优特征,并根据该特征对训练数据进行分割,使得对各个子数据集有一个最好的分类过程,这个过程就是划分特征空间,构建决策树的过程。

都有哪些决策树

  • ID3 通过使用信息增益来对样本进行划分
    • ID3决策树优先选择信息增益大的属性进行划分,信息增益反映的是给定条件以后不确定性较少的程度,特征取值越多,就意味着确定性越高,也就是条件熵越小,信息增益越大,但是这样的分裂结点有一个很大的缺点,就是当一个属性可取值的数目比较多时,此时它的信息增益会特别高,ID3会认为这个属性很适合划分,但实际情况下较多属性的取值会使模型泛化能力较差。
  • C4.5 通过使用信息增益比来对样本进行划分
    • C4.5为了解决这样的问题,也就是为了对ID3进行优化,引入了信息增益比这个概念,通过引入信息增益比,一定程度上对取值较多的特征进行惩罚,避免ID3出现过拟合的现象,提升决策树的泛化能力,
  • CART 通过基尼系数来对样本进行划分

ID3和C4.5的区别

  • ID3只能处理离散型变量,而C4.5和CART都可以处理连续变量
    • C4.5处理连续型变量时,通过对数据排序后找到类别不同的分割线作为切分点,根据切分点把连续属性转换为布尔型,从而将连续型变量转换为多个取值区间的离散型变量,而对于CART,由于其构建时每次都会对特征进行二值划分,,因此可以很好的适用于连续变量
    • ID3和C4.5只能适用于分类任务,而CART可以适用于回归任务(回归树使用最小平方误差准则)
    • ID3对样本缺失值特别敏感,而C4.5和CART可以对缺失值进行不同方式的处理
    • ID3和C4.5可以在每个结点上产生出多交叉分支,且每个特征在层级之间不会复用,而CART每个结点只会产生两个分支,因此最后会形成一个二叉树,且每个特征可以被重复利用。
    • ID3和C4.5通过剪枝来权衡树的准确性和泛化能力,而CART直接利用全部数据

决策树如何剪枝 (预剪枝和后剪枝的区别)

  • 预剪枝:再每一次实际对结点进行进一步划分之前,先采用验证集的数据来验证如果划分是否能提高划分的准确性。如果不能,就把结点标记为叶结点并退出进一步划分;如果可以就继续递归生成节点
  • 后剪枝:后剪枝则是先从训练集生成一颗完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应得子树替换为叶结点能带来泛化性能得提升,则将该子树替换为叶结点。

AdaBoost

AdaBoost算法也是一种集成学习算法,用于二分类问题,时Boosting算法的一种实现。他用多个弱分类器的线性组合来预测,训练时重点关注错分的样本,准确率高的弱分类器权重大。AdaBoost算法的全称是自适应,它用弱分类器的线性组合来构造强分类器。弱分类器的性能不用太好,仅比随机猜测强,依靠它们可以构造出一个非常准确的强分类器。强分类器的计算公式为:
F ( x ) = ∑ t = 1 T α t f t ( x ) F(x) = \sum_{t=1}^{T}\alpha_{t}f_{t}(x) F(x)=t=1Tαtft(x)
其中x是输入向量,F(x)是强分类器,ft(x)是弱分类器,at是弱分类器的权重,T为弱分类器的数量,弱分类器的输出值为+1或者-1,分别对应正样本和负样本,分类时的判定规则为sgn(F(x))

KNN 最近邻

KNN算法将样本分到离他最相似的样本所属的类,算法本质上使用了模板匹配的思想。要确定一个样本的类别,可以计算它与所有训练样本的距离,然后找出和该样本最接近的k个样本,统计这些样本的类别进行投票,票数最多的那个类就是分类结果。

由于需要计算样本间的距离,因此需要依赖距离定义,常用的由欧式距离,马氏距离和巴氏距离。另外,还可以通过学习得到距离函数,这就是距离度量学习。

KNN算法是一种判别模型,即支持分类问题,也支持回归问题,是一种非线性模型,它天然的支持多分类问题。KNN算法没有训练过程,是一种基于实例的算法。

K means聚类算法

K均值算法是一种聚类算法,把样本分配到离他最近的类中心所属的类,类中心由属于这个类的所有样本确定。K均值算法是一种无监督的聚类算法,算法将每个样本分配到离他最近的那个类中心所代表的类,而类中心的确定又依赖于样本的分配方案。在实现时,先随机初始化每个类的类中心,然后计算样本与每个类的中心的距离,将其分配到最近的那个类,然后根据这种分配方案重新计算每个类的中心。这也是一种分界点优化的策略。

与KNN算法一样,这里也依赖于样本之间的距离,因此需要定义距离的计算方式,最常用的是欧式距离,也可以采用其他距离定义,算法在实现时要考虑下面几个问题:

  • 类中心向量的初始化:一般采用随机初始化。最简单的时Forgy算法,它从样本集中随机选择K个样本作为初始类中心。第二种方案时随机划分,它将所有样本随机分配给K个类中的一个,然后按这种分配方案计算各个类的类中心向量。
  • 参数K的设定;可以根据先验知识人工指定一个值,或者由算法自己确定
  • 迭代终止的判定规则。一般做法是计算本次迭代后的类中心和上一次迭代时的类中心之间的距离,如果小于指定阈值,则算法终止。

你可能感兴趣的:(百面机器学习)