一. 分类和假设陈述
要尝试分类,一种方法是使用线性回归,并将所有大于0.5的预测值映射为1,将小于0.5的所有预测值映射为0.但是,此方法效果不佳,因为分类实际上不是线性函数。 分类问题就像回归问题一样,除了我们现在想要预测的值只有少数离散值。
线性回归用来解决分类问题,通常不是一个好主意。
我们解决分类问题,忽略y是离散值,并使用我们的旧线性回归算法来尝试预测给定的x。但是,构建这种方法性能很差的示例很容易。直观地说,当知道时, 取大于1或小于0的值也是没有意义的。为了解决这个问题,让我们改变我们的假设 的形式以满足 。这是通过将 插入 Logistic 函数来完成的:
上式称为 Sigmoid Function 或者 Logistic Function
令 ,,则:
这里显示的函数将任何实数映射到(0,1)区间,使得它可用于将任意值函数转换为更适合分类的函数。
ℎ ? (?)的作用是,对于给定的输入变量,根据选择的参数计算输出变量=1 的可能性,即
决策界限
决策边界不是训练集的属性,而是假设本身及其参数的属性。用数据拟合,决定参数 ? ,从而确定了决策边界。
1.代价函数
线性回归的代价函数为:
我们重新定义逻辑回归的代价函数为:
如果将代入到上面的式子中, 的函数图像会是一个非凸函数,会有很多个局部极值点。
于是我们重新寻找一个新的代价函数:
需要说明的一点是,在我们的训练集中,甚至不在训练集中的样本,y 的值总是等于 0 或者 1 。
ℎ ? (?)与 cost(ℎ ? (?),?)之间的关系如下图所示
2. 简化代价函数和梯度下降
于是进一步我们把代价函数写成一个式子:
所以代价函数最终表示为:
向量化形式:
为了把式子写成上面这样子是来自于统计学的极大似然估计法得来的,它是统计学里为不同的模型快速寻找参数的方法。它的性质之一是它是凸函数。
利用梯度下降的方法,得到代价函数的最小值:(求导的详细链接:https://blog.csdn.net/qq_36782366/article/details/89023085)
矢量化,即:
这里需要注意的是,
线性回归中,,
而 Logistic 回归中, 。
因此,即使更新参数的规则看起来基本相同,但由于假设的定义发生了变化,所以逻辑函数的梯度下降,跟线性回归的梯度下降实际上是两个完全不同的东西。
最后,特征缩放的方法同样适用于 Logistic 回归,让其梯度下降收敛更快。
高级优化
除去梯度下降法,还有其他的优化方法,
conjugate gradient 共轭梯度法,
BFGS,
L_BFGS,
上述3种算法在高等数值计算中。它们相比梯度下降,有以下一些优点:
- 不需要手动选择学习率 。可以理解为它们有一个智能的内循环(线搜索算法),它会自动尝试不同的学习速率 ,并自动选择一个最好的学习速率 。甚至还可以为每次迭代选择不同的学习速率,那么就不需要自己选择了。
- 收敛速度远远快于梯度下降。
缺点就是相比梯度下降而言,更加复杂。
多元分类:一对多
现在,当我们有两个以上的类别时,我们将处理数据的分类。我们将扩展我们的定义,使得y = {0,1 ... n},而不是y = {0,1}。
由于y = {0,1 ... n},我们将问题分成n + 1(+1,因为索引从0开始)二元分类问题;
在每一个中,我们都预测'y'是我们其中一个类的成员的概率。
最终在 n + 1 个分类器中分别输入 x ,然后取这 n + 1 个分类器概率的最大值,即是对应 的概率值。
我们接下来以上图作为例子:原图中有三类,我们现在将其做成三个分类器,第一个分类器为三角形为一类,叉和正方形为一类,然后我们计算结果时三角形类的概率,即=P(y=1|x;)。同理计算出其他两个分类器的假设函数。
最后,给定输入x,带入三个分类器中求,找出其中值最大那个,x就属于哪一类。