点一下关注吧!!!非常感谢!!持续更新!!!
目前已经更新到了:
- Hadoop(已更完)
- HDFS(已更完)
- MapReduce(已更完)
- Hive(已更完)
- Flume(已更完)
- Sqoop(已更完)
- Zookeeper(已更完)
- HBase(已更完)
- Redis (已更完)
- Kafka(已更完)
- Spark(已更完)
- Flink(已更完)
- ClickHouse(已更完)
- Kudu(已更完)
- Druid(已更完)
- Kylin(已更完)
- Elasticsearch(已更完)
- DataX(已更完)
- Tez(已更完)
- 数据挖掘(正在更新…)
章节内容
上节我们完成了如下的内容:
- 岭回归原理
- Lasso 算法原理
概述
分类技术是机器学习和数据挖掘应用中的重要组成部分,在数据学科中,约70%的问题属于分类问题。解决分类的算法也有很多,如:KNN,使距离计算来实现分类;决策树,通过构建直观易懂的树来实现分类。
这里我们要展开的是Logistic回归,它是一种很常见的用来解决二元分类问题的回归方法,它主要是通过寻找最优参数来正确的分类原始数据。
基本原理
逻辑回归(Logistic Regression 简称LR),其实是一个很有误导性的概念,虽然它的名字中带有回归二字,但是它最擅长的方法是分类问题。LR分类器适用于各项广义上的分类任务,例如:评论信息的正负情感分析(二分类)、用户点击率(二分类)、用户违约信息预测(二分类)、垃圾有检预测(二分类)、疾病预测(二分类)、用户等级分类(多分类)等场景。
在最小二乘法求最优解以及条件不满足的情况系原始算法的修正方法,但是实际上,线性回归只是机器学习类算法中最简单的用调整预测标签数值的回归算法,满足线性规律的真实场景并不是很多,因此标准线性回归应用面有限。
为了解决该问题,线性回归实际应用中引入了诸多变化形式,而这些变化形式可统一规整为如下形式:
其中g()为可微函数,而这类模型也被称为广义线性模型(generalized linear model),其中函数被称为联系函数(link function),现如今被广为人知的逻辑回归就是诸多广义回归算法的其中一种。
在逻辑回归中,我们使用对数几率函数(Logistic Function)作为 g的-1次(),对数几率函数表示形式如下:
能够看出,对数几率函数是一个Sigmod函数,Sigmod函数是形似S的函数,对率函数是Sigmod函数的重要代表,在感知机理论中也发挥着重大作用。
利用对数函数,我们可将Z转换为一个(0,1)区间内的值,除此之外,g(Z)还有一个很好的导数性质:
带入对率函数,得到逻辑回归表达式:
进一步可得:
由于y和1-y的和为1,因此可将y和1-y视为一堆正反列的可能性,即y视作样本x为正例的可能性,则1-y为x为反例的可能性,二者比例:
被称为几率(odds),反映了样本x为正例的相对可能性,对几率取对数则得到“对数几率”(logodds 亦称 logit):
因此看出,上式实际上是在用线性回归模型的预测结果取逼近真实标记的对数几率。因此,其对应的模型被称为“对数几率回归”(Logistic Regression)。需要注意的是,虽然其名字包含回归二字,但本质上是一种分类学习方法。
这种方法有很多优点,例如它是直接对分类可能性进行建模,因此它不仅预测出类别,而且得到的近似概率预测,这对许多需要利用概率辅助决策的任务很有用。同时,对率函数是任意阶可导的凸函数,有很多的数学性质,现有的很多数值优化算法都可以直接用于求取最优解。接下来我们将采用梯度下降的方法对其进行求解,首先我们将对梯度下降理论进行简单介绍。
梯度下降
Gradient Descent
在求解机器算法的模型参数,即无约束优化问题时,梯度下降是最常用的方法之一。
梯度
在微积分里面,对多元函数的参数求偏导数,把求得的各个参数的偏导以向量的形式写出来,就是梯度。那么梯度向量求出来有什么意义,它的意义就是从几何意义上,就是函数变化增加最快的地方,沿着梯度向量的方向,更加容易找到函数的最大值,反过来说,沿着梯度向量的反方向,梯度减少最快,也就是更容易找到函数的最小值。
梯度下降 梯度上升
在机器学习算法中,在最小化损失函数时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数,和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升来迭代了。梯度下降和梯度上升是可以相互转换的,比如我们需要求解的损失函数最小值,这时我们需要用梯度下降来迭代求解,但是实际上,我们可以反过来求解损失函数的最大值,这时梯度上升法就用上了。
算法详解
首先来看梯度下降的一个直观的解释,比如我们在一座大山上的某处位置,由于我们不知道怎么下山,于是绝对走一步算一步,也就是每走到一个位置的时候,求解当前位置的梯度,沿着梯度的负面方向,也就是最陡峭的位置向下走一步,然后继续求解当前位置梯度,向这一步所在位置沿着最陡峭最易下山的位置走一步。
这样一步一步走下去,一直走到觉得已经到了山脚。当然这样走下去,有可能我们不能走到山脚,而是到了某一个局部的山峰低处。
从上面的解释可以看出,梯度下降不一定能够找到全局最优解,有可能是一个局部最优解,当然,如果损失函数是凸函数,梯度下降法得到的一定是一个全局最优的。
相关概念
在详细了解梯度下降的算法之前,我们先看看相关的一些概念:
- 步长(Leanring rate):步长决定了梯度下降迭代的过程中,每一步沿梯度负方向前进的长度。用上面下山的例子,步长就是在当前这一步所在位置沿着最陡峭最易下山的位置走的那一步的长度。
- 假设函数(hypothesis function):在监督学习,为了拟合输入样本,而使用的假设函数记为y^,比如对于单个特征的m个样本,可以采用拟合函数为 y = w0 + w1z。
- 损失函数(loss function):为了评估模型拟合的好坏,通常用损失函数来度量拟合的程度。损失函数极小化,意味着拟合程度最好,对应的模型参数即为最优参数,在线性回归中,损失函数通常为样本输出和假设函数的差去平方。对于m个样本,采用线性回归,损失函数为:
梯度下降的算法用矩阵表示,更加简洁,且由于使用了矩阵,实现逻辑更加一目了然,这一节要求有一定的矩阵分析的基础知识,尤其是矩阵求导的知识。 - 先决条件:需要确认优化模型的假设函数和损失函数,对于线性回归,假设函数 y^ = w0 + w1x1 + … + wnxn,矩阵表达式为:
其中,假设函数为 mx1的向量,w是(n+1)x1的向量,里面有n个模型参数,X为m x (n + 1)维的矩阵。m代表样本的个数,n+1代表样本的特征数。
损失函数的表达式为:
其中Y是样本的输出向量,维度 m x 1
- 算法相关的参数初始化:w向量可以初始化为默认值,或者调优后的值,算法终止距离c,步长a初始化为1,在调优时再进行优化。
梯度算法下降算法调优
在使用梯度算法时,需要进行调优,哪些地方需要调优呢?
- 算法的补偿选择:在前面的算法描述中,提取到步长为1,但是实际上取值取决于数据样本,可以多取一些值,从大到小,分别运行算法,看看迭代效果,如果损失函数在变小,说明取值有效,否则要增大步长。
- 算法参数的初始值选择:初始值不同,获得的最小值也有可能不同,因此梯度下降求得只是局部最小值,当然如果损失函数是凸函数则一定是最优解。由于局部最优解的风险,需要多次用不同的初始值运行算法,观测损失函数的最小值,选择损失函数最小化的初始值。
- 标准化:由于样本不同特征的取值范围不一样,可能导致迭代很慢,为了减少特征取值的影响,可以对特征数据标准化,也就是对于每个特征Z,求出它的期望和标准差std(x),然后转化为:
这样特征的新期望是0,新方差是1,且无量纲,收敛速度可以大大加快。