逻辑回归是假设数据服从伯努利分布,通过极大似然估计的方法,运用梯度下降算法作为求解方法求解参数,达到对数据进行二分类或者多分类(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+e−z1
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=1∑mL(yˉi,yi)=m1i=1∑m(−ylog(yˉ(i))−(1−y(i))log(1−yˉ(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=1∏N[π(xi)]yi[1−π(xi)]1−yi
对数似然函数
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=1∑M[yilogπ(xi)+(1−yi)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=1∑N[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=1∑N(w∗xi−log(1+exp(w∗xi)))
求l(w)的极大值,使问题变成以对数似然为目标的最优化问题,采用梯度下降法求解
如何分类
y值是一个连续变量,划定一个阈值,y值大于这个阈值的是一类,小于这个阈值的是另一类
在使用Sigmoid函数作为正样本的概率时,同时将平方损失作为损失函数,这时所构造出来的损失函数时非凸的,不容易求解,容易得到其局部最优解,而如果使用极大似然,其目标就是对数似然函数,该损失函数时关于未知参数的高阶连续可导的凸函数,便于求全局最优解
将极大似然函数取对数后等同于对数损失,在逻辑回归这个模型下,对数损失函数的训练求解参数速度时比较快的,和sigmoid函数本身的梯度无关,这样更新的速度是可以自始至终都比较稳定,而如果使用平方损失函数,梯度更新的速度和sigmoid函数本身的梯度时很相关的,sigmoid函数在它定义域内的梯度都不大于0.25,这样训练会特别慢
**优点:**形式简单,模型的可解释性强,模型效果在工程上可以接受,训练速度较快,资源占用小,方便输出结果调整,
**缺点:**准确率不是太高,很难处理数据不平衡问题,处理非线性数据比较麻烦,逻辑回归其本身无法筛选特征。
所有的参数w都会变成0.
支持向量机是一个二分类模型,它的基本模型定义为特征空间上的间隔最大的线性分类器,因为支持向量机引入了核技巧,这使它成为实质上的非线性分类器,学习策略为最大化分类间隔,最终可转化为凸二次规划问题求解,也等价于正则化的合页损失函数的最小化问题,支持向量机的学习算法是求解凸二次规划的最优化算法。
支持向量机的学习方法包含从简至繁的模型,包括由线性可分支持向量机,线性支持向量机,非线性支持向量机
硬间隔和软间隔最大的区别在于是否引入了松弛变量
损失函数一般为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+Ci∑max(0,1−yi(θTxi+b))
核函数:核函数隐含着一个从低维空间到高维空间的映射,这个映射可以把低维空间中线性不可分的两类点变成线性可分的
核函数包括,线性核 高斯(RBF)核,多项式核,sigmoid核函数等等
当样本的特征很多且维数很高时可以考虑用SVM的线性核函数
当样本量较多,特征较少时,一般手动进行特征的组合在使用SVM的线性核函数;
当样本维度不高且数量较少时,且不知道改用什么核函数时一般有限使用高斯核函数,因为高斯核函数为一种局部性较强的核函数,无论对于大样本还是小样本都有较好的性能,且相对于多项式核函数有较少的参数
随机森林是一个包含多个决策树的分类器,属于bagging类的集成学习算法,通过采用bootstrap(自主随机采样),使用多个决策树作为基准分类器构建的森林,因为属于bagging类的集成算法,所以这些基准决策树模型之间没有关联,相互独立。随机森林是由多棵决策树构成得,对于每棵树,他们使用的训练集是采用又放回的方式从总的训练集中采样出来的,而在训练每棵树的结点时,使用的特征是从所有特征中按照一定比例随机的无放回的方式抽取的
特点
构造方法:随机森林的建立基本上是由随机采样和完全分裂两部分组成的。
随机采样
随机森林对输入数据进行行和列的采样,但两种采样的方法有所不同,行采样采用的方式是有放回的采样,即在采样得到的样本集合中,可能会有重复的样本,假设输入样本为N个,那么采样的样本也为N个,
完全分裂
在形成决策树的过程中,决策树的每个结点都要按照完全分裂的方式进行分裂,直到结点不能再分裂,采用这种方式建立出的决策树的某一个叶子结点要么是无法继续分裂的,要么里面的所有样本都是指向同一个分类器。
优点
缺点
决策树是一种自上而下,对样本数据进行树形分类得过程,由结点和有向边组成,结点分为内部节点和叶结点,其中每个內部结点表示一个特征和属性,叶结点表示类别,从顶部根结点开始,所有样本聚在一起。经过根结点得划分,样本被分到不同得子结点中,再根据子结点得特征进一步划分,直至所有得样本都被归到一个类别中(即叶结点)中。
其学习构建本质上就是从训练集中归纳出一组分类规则,使他与训练数据矛盾较小得同时具有较强得泛化性能,从另一个角度看,学习也是基于训练数据集估计条件概率模型,决策树得损失函数通常是正则化得极大似然函数,学习得策略是以损失函数为目标函数得最小化。
这个最小化问题是一个NP(多项式复杂程度的非确定性问题)完全问题,通常采用启发式算法,来近似求解这一最优化问题,得到的决策树是次最优的,
从总体来看,这三个步骤就是一个递归选择最优特征,并根据该特征对训练数据进行分割,使得对各个子数据集有一个最好的分类过程,这个过程就是划分特征空间,构建决策树的过程。
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=1∑Tαtft(x)
其中x是输入向量,F(x)是强分类器,ft(x)是弱分类器,at是弱分类器的权重,T为弱分类器的数量,弱分类器的输出值为+1或者-1,分别对应正样本和负样本,分类时的判定规则为sgn(F(x))
KNN算法将样本分到离他最相似的样本所属的类,算法本质上使用了模板匹配的思想。要确定一个样本的类别,可以计算它与所有训练样本的距离,然后找出和该样本最接近的k个样本,统计这些样本的类别进行投票,票数最多的那个类就是分类结果。
由于需要计算样本间的距离,因此需要依赖距离定义,常用的由欧式距离,马氏距离和巴氏距离。另外,还可以通过学习得到距离函数,这就是距离度量学习。
KNN算法是一种判别模型,即支持分类问题,也支持回归问题,是一种非线性模型,它天然的支持多分类问题。KNN算法没有训练过程,是一种基于实例的算法。
K均值算法是一种聚类算法,把样本分配到离他最近的类中心所属的类,类中心由属于这个类的所有样本确定。K均值算法是一种无监督的聚类算法,算法将每个样本分配到离他最近的那个类中心所代表的类,而类中心的确定又依赖于样本的分配方案。在实现时,先随机初始化每个类的类中心,然后计算样本与每个类的中心的距离,将其分配到最近的那个类,然后根据这种分配方案重新计算每个类的中心。这也是一种分界点优化的策略。
与KNN算法一样,这里也依赖于样本之间的距离,因此需要定义距离的计算方式,最常用的是欧式距离,也可以采用其他距离定义,算法在实现时要考虑下面几个问题: