from : http://blog.csdn.net/lsldd/article/details/41551797html
在本系列文章中提到过用Python开始机器学习(3:数据拟合与广义线性回归)中提到过回归算法来进行数值预测。逻辑回归算法本质仍是回归,只是其引入了逻辑函数来帮助其分类。实践发现,逻辑回归在文本分类领域表现的也很优秀。如今让咱们来一探究竟。python
假设数据集有n个独立的特征,x1到xn为样本的n个特征。常规的回归算法的目标是拟合出一个多项式函数,使得预测值与真实值的偏差最小:算法
而咱们但愿这样的f(x)可以具备很好的逻辑判断性质,最好是可以直接表达具备特征x的样本被分到某类的几率。好比f(x)>0.5的时候可以表示x被分为正类,f(x)<0.5表示分为反类。并且咱们但愿f(x)总在[0, 1]之间。有这样的函数吗?数据结构
sigmoid函数就出现了。这个函数的定义以下:机器学习
先直观的了解一下,sigmoid函数的图像以下所示(来自http://computing.dcu.ie/~humphrys/Notes/Neural/sigmoid.html):函数
sigmoid函数具备咱们须要的一切优美特性,其定义域在全体实数,值域在[0, 1]之间,而且在0点值为0.5。性能
那么,如何将f(x)转变为sigmoid函数呢?令p(x)=1为具备特征x的样本被分到类别1的几率,则p(x)/[1-p(x)]被定义为让步比(odds ratio)。引入对数:学习
上式很容易就能把p(x)解出来获得下式:测试
如今,咱们获得了须要的sigmoid函数。接下来只须要和往常的线性回归同样,拟合出该式中n个参数c便可。网站
测试数据咱们仍然选择康奈尔大学网站的2M影评数据集。
在这个数据集上咱们已经测试过KNN分类算法、朴素贝叶斯分类算法。如今咱们看看罗辑回归分类算法在处理此类情感分类问题效果如何。
一样的,咱们直接读入保存好的movie_data.npy和movie_target.npy以节省时间。
逻辑回归的代码以下:
代码运行结果以下:
0.8
0.817857142857
0.775
0.825
0.807142857143
0.789285714286
0.839285714286
0.846428571429
0.764285714286
0.771428571429
precision recall f1-score support
neg 0.74 0.80 0.77 132
pos 0.81 0.74 0.77 148
avg / total 0.77 0.77 0.77 280
average precision: 0.803571428571
time spent: 9.651551961898804
首先注意咱们连续测试了10组测试样本,最后统计出准确率的平均值。另一种好的测试方法是K折交叉检验(K-Fold)。这样都能更加准确的评估分类器的性能,考察分类器对噪音的敏感性。
其次咱们注意看最后的图,这张图就是使用precision_recall_curve绘制出来的P/R曲线(precition/Recall)。结合P/R图,咱们能对逻辑回归有更进一步的理解。
前文咱们说过,一般咱们使用0.5来作划分两类的依据。而结合P/R分析,阈值的选取是能够更加灵活和优秀的。
在上图能够看到,若是选择的阈值太低,那么更多的测试样本都将分为1类。所以召回率可以获得提高,显然准确率牺牲相应准确率。
好比本例中,或许我会选择0.42做为划分值——由于该点的准确率和召回率都很高。
最后给一些比较好的资源:
浙大某女学霸的博客!记录的斯坦福Andrew老师主讲的LR公开课笔记:http://blog.csdn.net/abcjennifer/article/details/7716281
一个总结LR还不错的博客:http://xiamaogeng.blog.163.com/blog/static/1670023742013231197530/
Sigmoid函数详解:http://computing.dcu.ie/~humphrys/Notes/Neural/sigmoid.html