| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 入门机器学习——逻辑回归为什么是分类器 -> 正文阅读 |
|
[数据结构与算法]入门机器学习——逻辑回归为什么是分类器 |
引言在上一篇《入门机器学习——从线性回归开始理解机器学习》中,我们大概讲述了机器学习的一般流程和通用的框架,并以线性回归为例子一步一步实现了让模型自动“回归”的能力。事实上,逻辑回归和线性回归非常相似,逻辑回归本质上就是把线性回归的值域通过 l o g i s t i c ? f u n c t i o n logistic-function logistic?function放缩到了 [ 0 , 1 ] [0,1] [0,1]之间。每个样本将得到一个概率值,整体样本将得到样本类别的概率分布,根据这个概率分布我们就可以得到一个样本是某个类别的概率。理想情况下,一个样本属于其正确类别的概率为1,属于其他类别的概率为0。如果我们通过机器学习可以使得模型无限接近这个概率分布,那么就可以对分类任务进行拟合学习了。 所以,划一个重点:分类任务是通过拟合一条直线(或一个超平面),进而拟合一个概率分布。这也是为什么逻辑回归是用来做分类任务的原因。你也可以理解为,我们要向一个概率分布回归。 接下来,笔者还是以理论+实践的方式,一起梳理一下逻辑回归。希望读者阅读完后,能明白为什么逻辑回归是一个分类器。 数据生成假设我们的特征有两个维度 ( x 1 , x 2 ) (x_1,x_2) (x1?,x2?),由这两个特征构建起两个类,一类标记为0,一类标记为1。为了简单起见,我们以 ( x 1 , x 2 ) (x_1,x_2) (x1?,x2?)维上的两个点为圆心,在一定半径内随机生成一些样本点,最终我们将生成两簇不重叠的样本集。
样本在二维平面上的分布如下:
判别函数上篇文章中我们用了比较通俗易懂的公式,描述什么是线性模型: 在回归问题中,我们可以直接通过
f
(
x
;
w
)
f(\boldsymbol{x};\boldsymbol{w})
f(x;w)来预测目标值
y
y
y。但是在分类问题中,我们需要预测的目标值往往是离散的标签,比如二分类识别猫狗问题,我们用
?
1
-1
?1表示猫,用
1
1
1表示狗。因此,我们需要在线性模型的基础之上,引入一个判别函数
g
(
f
(
x
;
w
)
)
g(f(x;w))
g(f(x;w)),对值域进行收缩。我们可以用符号函数来作为二分类问题的判别函数: Logsitic函数逻辑回归(Logistic Regression),之所以称为“逻辑”,就是因为用了Logistic函数作为线性模型的判别函数。我们先来看看,Logistic函数的数学定义,方便起见,我们下面用
δ
\delta
δ代替
L
o
g
s
i
t
i
c
Logsitic
Logsitic。:
L
o
g
s
i
t
i
c
Logsitic
Logsitic函数将线性模型的值域放缩到了
[
0
,
1
]
[0,1]
[0,1]之间,大于
0.5
0.5
0.5的属于正类,小于
0.5
0.5
0.5的属于负类。相比
s
g
n
sgn
sgn函数,
L
o
g
s
i
t
i
c
Logsitic
Logsitic函数的导数性质就比较好,连续可导且导函数也比较简单,计算量小。所以,现在我们的模型就是线性模型再经过一个Logsitic函数:
深度学习的基石事实上,Logsitic回归模型已经初具深度学习中神经元的雏形,只是在深度学习中,
l
o
g
i
s
t
i
c
logistic
logistic函数被称为“激活函数”。我们常听的
s
i
g
m
o
i
d
sigmoid
sigmoid函数就是
l
o
g
i
s
t
i
c
logistic
logistic函数,除了
s
i
g
m
o
i
d
sigmoid
sigmoid,出名的激活函数还有
t
a
n
h
tanh
tanh,
r
e
l
u
relu
relu等。 交叉熵损失函数上一篇文章中,我们提及Loss函数是一种评价模型好坏的指标函数,我们称之为“损失函数”。在回归问题中,我们常用的Loss函数是MSE(均方误差),因为我们想要拟合一条最能描述样本趋势的直线,那么我们希望所有样本点到这条直线距离的平均误差越小越好。同样道理,在分类问题中,我们也需要一个损失函数来描述模型预测的概率分布和真实概率分布之间的误差。这个函数就是交叉熵损失函数,下面是二分类交叉熵损失函数公式: https://www.zhihu.com/question/22178202 熵描述了事物的混乱程度,熵越小表示越有序,而信息熵描述了信息的不确定性,信息熵越小表示信息越准确。如果根据一个信息得到某个结果的概率为100%,那么根据信息熵公式,熵为0,信息非常准确。那么,如果根据一个信息得到某个结果的概率为0,信息熵为多少呢?这个时候需要对信息熵求趋于
0
+
0^+
0+的极限。 求导过程根据链式求导法则,因为多了一个判别函数,因此需要先对
δ
\delta
δ求偏导,在对
w
\boldsymbol{w}
w求偏导,求导的过程稍微复杂,但是最终的形式却很简洁。
这里需要特别注意的地方是维度的问题。
w
w
w的维度为
(
1
,
3
)
(1,3)
(1,3),而输入
x
x
x的维度为
(
3
,
100
)
(3,100)
(3,100),
y
^
\hat{y}
y^?和
y
y
y的维度为
(
1
,
100
)
(1,100)
(1,100)。我们在模型
f
(
x
)
f(x)
f(x)中求
w
@
x
w @ x
w@x时,输出自然是
(
1
,
100
)
(1,100)
(1,100)。但是在计算梯度时,我们希望的输出形状是
(
1
,
3
)
(1,3)
(1,3), 模型训练与验证知道了模型,Loss函数,就可以使用梯度下降法对模型参数进行梯度更新求优了。对机器学习通用框架步骤不了解的读者可以看看我的第一篇文章。
最终,模型训练完成后,我们可以得到一个期望的超平面,这个超平面将两簇数据样本集一分为二,在超平面下方的是蓝色样本集,在超平面上方的是红色样本集。
总结通过第一篇的线性回归和这一篇的逻辑回归,我们可以得到一些启发思考。
这不就是人类学习的过程吗?人类的可塑性(智商,天赋等)就好比模型,有天赋的人没有正确的引导和目标(家庭,社会,个人内在驱动)也终将一事无成,而一步一步的勤奋就是学习最根本的方法,或许别人的方法略好,走的更快,但是都必须一步一步的优化,没有那个优化方法可以一步登天。所以,我得继续加油,你们也加油!!! |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 22:51:55- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |