Logistic Regression (依据斯坦福大学网上机器学习公开课)

logistic regression 逻辑回归,相比较于前面的线性回归(主要目的用于预测),逻辑回归其输出离散的值,其实就是0-1之间的数(这个数是输出y=1的概率值,当z>=0时,g(z)>=0.5,因为输出y只有0或者1,所以大于0.5是不是更加接近于1,当然我们就判断该z样本属于Y=1这个类),其用途是用于在给定不同样本点下求解出最优曲线进行划分样本.
Logistic Regression (依据斯坦福大学网上机器学习公开课)
Logistic Regression (依据斯坦福大学网上机器学习公开课)

同样的我们会先定义cost function 这里采用cross-entropy cost function,其具体形式如下:
Logistic Regression (依据斯坦福大学网上机器学习公开课)
至于为什么不用之前的而选择这个,我觉得是考虑了计算复杂度的因素,并且我们知道cost function需要满足几个基本要求:非负性,最好是convex function(也就是只有一个最小值点),符合实际情况。

同样的对J(theta)求导如下(具体计算比较简单,就不写了,可以记住g’(z)=g(z)(1-g(z))方便计算):
Logistic Regression (依据斯坦福大学网上机器学习公开课)
此时此刻就可以继续之前的操作,在一次迭代中利用梯度修改theta的值
网络视频里给了matlab的函数fminunc来简化编程,最后可以通过theta*x=0画出boundary line(边界线)

当然这里的特征值不一定是一次的,可以是x1,x2,x1*x2,x2^2等形式,此时得出的边界线就是曲线,当然如果有三个边界线画出的就是三维的曲线了。
上面的情况通常是对应下面的例子:
Logistic Regression (依据斯坦福大学网上机器学习公开课)
也就是两个变量下,y=1或者是0的情况分类无法用线性区分,这时就要考虑构造新的变量进行区分:譬如x1*x2等高次幂的形式,因此如果过于幂过于多可能会带来过度拟合的问题,也就是看上去拟合曲线对于给定的数据点的分类效果特别好,但是对于测试值得效果却不好。为了防止过度拟合,采用正则化方法:
Regularized logistic regression
Logistic Regression (依据斯坦福大学网上机器学习公开课)
也就是在cost function后面加了一个和theta有关的值(注意不含有theta0,也就是截距),当lambda给的比较小的时候,此时theta可能就比较大,因此高阶的theta影响就比较大,也就是容易过度拟合。当lambda比较大的时候,高阶项相当于被抑制,因此防止过度拟合。

然后按照这个式子求解梯度:
Logistic Regression (依据斯坦福大学网上机器学习公开课)

(编程的时候始终注意,cost function 和 梯度都不含有截距项,因为其毕竟幂指数只有一次,你还抑制就不像话了)
当然在画boundary line的时候就不能用plot了,毕竟这个曲线可能并不是函数,而是采用contour等高线的方式,只要画出等高线=0,就是对应的boundary line。

one-vs-all logistic regression(多分类逻辑回归问题)

多分类的基本思想是取一个类别作为一类并记为y=1,另外所有的作为一类y=0,通过训练得到一个模型,依次对所有的类别进行同样操作,然后测试的时候把数据带入到各个模型中,输出结果最大的就是我要分类的。
其余的计算同上面,这里编程的时候只要保存一下得到的每一个分类模型的theta值就好。

总结一下:以上就是我们利用数据进行分类的例子,首先训练样本数据对theta参数进行学习,然后按照得到的boundary line对预测值进行分类。