先说一下你提问中的每个参数的意义:
表示sigmoid函数的计算值,也就是一个概率,也就是机器学习中的预测的概率。
表示一个函数的的命名,这里可以是任意的,下文用g表示。
就是数据集中特征xb(后文用x表示)的参数是一个多维向量,也就是逻辑回归中需要进行迭代更新的参数。这里为了与xb做点乘,所以θ做了转置,由列向量变为行向量。(感谢TheGreatPrawn指正。)
表示数据集中的特征,是一个多维向量。
表示分类的结果,也就是概率大于或小于某一个阈值的时候,分成两类。
下面用自己的理解和语言具体解释:
看到你说的例子是逻辑回归,是在学习完线性回归后进阶的一个算法,线性回归是用一条直线来拟合数据集的特征值(矩阵X)和标签(矩阵Y),从而达到利用新的特征值(新矩阵X)来预测新的标签(未知值Y)。
要了解你的问题之前,你需要明白梯度下降的原理。如果不明白可以先学习一下梯度下降,这里就不介绍了。用最简单的一句话概括梯度下降就是:“以偏导为方向,找到最低点。”
就像下图所表示的:
大家回到正题上来:
你所贴的图名字叫做sigmiod公式,也就是概率密度的累加公式,为什么要引入sigmiod函数?
逻辑回归的决策边界:可以是非线性的
有下列的数据集,利用线性回归算法进行拟合是无法完成工作的,逻辑回归的决策边界是非线性的,所以大家可以利用逻辑回归算法进行二分类或拟合。(你所提的问题是二分类任务,y的取值不是0就是1。)
下图就是一个非线性的二分类:
那么sigmoid函数式什么样的?
sigmoid公式:
正态分布的密度累积函数
上图表示概率的正态分布,下图(sigmoid函数)表示上图概率的累加。
两张图的坐标轴不对应,但表示的意思是一样的。
自变量为任意实数,应变量的值域为[0,1]
g(z)的取值范围是0~1,相当于一件事发生的概率
此函数是概率论中的概率密度累积函数
输入范围是(-oo,+oo),输出范围[0,1]
将线性回归预测出的一个值,放到sigmoid函数当中来,转换为概率问题
一个概率值如果可能性是70%,那么不可能性就是1-70%
你的例子中是以50%为分界线的,其实可以是任意值。
一旦求出概率,就可以得到分类结果
把z换成
θ就是大家要求的值,x就是样本的特征。
这里的θ和x都是矩阵。公式就成了你最开始说的
这里的θ,x也就是你的xb都是矩阵
关于θ:在线性回归中,大家是要算出 θ,最后用来完成预测任务,而在逻辑回归中,大家的θ是随机取值的,然后根据梯度指定方向进行一步一步的更新迭代后得到的一个最优的θ。
解释:将任意输入映射到了[0,1]区间,大家在线性回归当中可以得到一个预测值(),但是线性回归是特例,这里的θ是随机取值的
再将该值映射到sigmoid函数当中,就完成了预测值到概率的转换问题,也就是分类任务
ps:这个函数对应的是实际值,线性回归所要做的事是,在误差最小概率最大的地方求出θ,是概率的问题,而不是实际值的问题,这里是讨论的并不是线性回归,线性回归只是回归的一种特例;
这里是随机θ之后,为了得到的最小值,化成的概率问题,只是单纯地变为概率问题,再由θ和新的x得到预测值,这里说的预测值就是这个
引入概率函数相当于线性回归中的将实际值转换为高斯分布概率函数的问题
分类任务:,
类似于你提问中的
既然是二分类任务,那么结果就是非此即彼的,所以y不是0就是1
这两个公式进行整合,才能利于大家后边的计算
整合后:
上面的式子,y=0或y=1都是没整合之前的样子。
似然函数:,要让所有的样本(数量为m)满足θ准确最大概率,就是误差最小的概率,也就是线性回归中所说的损失函数最小的概率,所以要进行累乘。
但是在计算机内部,乘运算要比加运算复杂的多,如果大家先将该运算转化成加法运算,那么计算机计算起来就会高效的多。
大家这里要求的是整个函数的最大值,因为整个函数是大于0的,那么乘法的最大值也就对应于加法的最大值。
对似然函数取对数,就可以把乘法转换为加法
对数似然:,同线性回归一样,用对数将累乘转换为求和。这里是从1累加到m,m表示样本个数。
但是梯度下降的方法,大家习惯用求最小值的方法解决问题。
这里引入一个
将求它的最小值,也就是对数似然函数的最大值。
这里就转换成求最小值的问题了。
这里所说的求值,并不是直接计算出来的,而是让计算机一步一步的去试出来的。
还记得最前面说的梯度下降要做的事情么?
“以偏导为方向,找到最低点。”
求偏导数:
化简得:
这里少了一个m,因为m是常数,对于最终的结果起不到作用,可以忽略也可以不忽略。
为什么是偏导?
这里的θ是一个矩阵,并不是一维的,如果是N维的,那么就要对每一维求偏导。
i表示第几个样本,j表示样本的第几个特征,一个样本有N个特征。
这样做的目的是,找到一组θ值,使得J(θ)最小,做法就如上述所说:J(θ)对θ的每一个维度求偏导,得出θ的方向,然后一步一步的去试θ,第一次的θ是θ1,第二次是θ2,大家用△θ=θ2-θ1,
当△θ很小的时候(多小由自己规定),大家就认为,找到了最优的θ。
方向的问题解决了,一步一步要怎么解决?也就是如何进行迭代?
大家叫做参数更新
参数更新:
这里引入了一个α,表示一步一步的步长,试想一下如果步长很大,大家就可以直接跨越最低点从而找不到最优的θ,所以这里的α是越小越好。
这里的“:=”是赋值的意思
这就完成了迭代的工作,每走一步,θj就会更新一次。
例如在python中写一个for循环,循环体就是θj = θj-α后面那一串,
则θj在循环结束后,就会得到最优值。
求出了θ的最优值,那么可以做分类和拟合的工作了:
分类:
根据原有数据集中的x对y进行分类。记得概率小于或大于某一个阈值就可以将y分类么?
拟合(预测):
根据新的数据集x,
利用
推算出新的y,也就是预测工作了。
总结:
逻辑回归相当于随机取θ,然后算出预测值,将预测值带入到sigmoid函数中,转换为概率问题,求出损失函数最小的概率,如何求出最小的概率?
并不是让导数等于0,而是先求出θ偏导的方向,一次取一个θ,再带入到参数更新中,因为α是步长,后面那一串是方向,有了步长和方向,就可以得到新的θ,最后求新老θ的差值
如果导数越接近于0的时候,那么差值就越小,θ就会越收敛,这样就会求出θ。
机器学习中的算法很多,不要被繁杂的数学公式搞蒙了,包括后边你要学习的随机森林,贝叶斯,聚类,支持向量机,PCA降维,卷积神经网络等等都有大量的数学公式和推导,其实只要理解他要做一件什么事就行,数学的推算只是为了做这一件事而创造的工具而已。如果数学概念或者公式无法理解,可以多搜一下,有很多人用大白话讲数学,当然有时间看一下国外的数学教程更好,他们用初中的数学推算教高等数学,非常易于理解。喜欢就去学,不要被什么供大于求什么饱和之类的言论误导,毕竟艺多不压身嘛。