浅入浅出:PageRank算法 使用 TextRank 算法为文本生成关键字和摘要 基于物品的协同过滤 如何使用MapReduce实现基于物品的协同过滤(1) 如何使用MapReduce实现基于物品的协同过滤(2) 浅入浅出:K近邻算法 使用mahout下的朴素贝叶斯分类器对新闻分类 使用Affinity Propagation进行聚类 K-medoids聚类 矩阵分解在推荐系统中的应用:NMF和经典SVD实战 使用特征递归消除筛选特征 如何分配权重 比较NMF、PCA和VQ 方差和协方差 基于SVD的协同过滤 逻辑斯谛回归代码实现 隐语义模型和NMF(非负矩阵分解) 使用PCA处理MNIST数据集 使用GBDT选取特征 基于贝叶斯的文本分类系统的数据库设计 在hadoop1.2.1上安装mahout 0.9 Hadoop 2.4 实现Kmeans聚类算法 在Iris数据集上对比PCA、LDA、NMF 基于贝叶斯的文本分类实战 单层决策树 Logistic regression(逻辑斯蒂回归) 基于用户的协同过滤 词袋模型与文档-词矩阵 如何实现拼音与汉字的互相转换 梯度下降法 如何判定相似度 MovieLens数据集介绍 基于KNN的文本分类实战 Jasper文本分类系列博客阅读摘录 使用 Mean Shift进行聚类 朴素贝叶斯的三个常用模型:高斯、多项式、伯努利 使用决策树处理iris数据集 浅入浅出:从Kmeans到Kmeans++ 如何持久化scikit-learn中训练好的模型 浅入浅出:DBSCAN聚类算法(1) 浅入浅出:DBSCAN聚类算法(2) 2015阿里移动推荐算法比赛第一赛季总结 爬山算法 使用朴素贝叶斯分类器划分邮件 层次聚类 基于MapReduce的频繁项集挖掘 搜狗实体关系提取比赛

Logistic regression(逻辑斯蒂回归)


#机器学习


2014-09-18

Logistic regression,音译为逻辑斯蒂回归,也可以叫做逻辑回归。

逻辑回归模型是一种将影响概率的不同因素结合在一起的指数模型。——《数学之美》 第28章

似然函数与最大似然估计

在数理统计学中,似然函数是一种关于统计模型中的参数的函数,表示模型参数中的似然性。“似然性”与“或然性”或“概率”意思相近,都是指某种事件发生的可能性。 最大似然估计是似然函数最初也是最自然的应用。

在数学中,连续型随机变量的概率密度函数(在不至于混淆时可以简称为密度函数)是一个描述这个随机变量的输出值,在某个确定的取值点附近的可能性的函数。而随机变量的取值落在某个区域之内的概率则为概率密度函数在这个区域上的积分。

最大似然估计,也称为最大概似估计,是一种统计方法,它用来求一个样本集的相关概率密度函数的参数。

上面的内容摘自维基百科的几个词条。

维基百科词条最大似然估计给出了一个浅显的例子。如下:

一个硬币抛出正面的概率为[latex]\frac{1}{3}, \frac{1}{2}, \frac{2}{3}[/latex]这三种取值,在一次抛硬币试验中,结果是49次正面,31次反面。那么隐蔽抛出正面的可能性的概率最有可能是哪一个?

当概率为[latex]\frac{1}{3}[/latex],似然函数取值为:

[latex]
(^{80}_{49})(\frac{1}{3})^{49}(\frac{2}{3})^{31} \approx 0.000 [/latex]

当概率为[latex]\frac{1}{2}[/latex],似然函数取值为:

[latex]
(^{80}_{49})(\frac{1}{2})^{49}(\frac{1}{2})^{31} \approx 0.012 [/latex]

当概率为[latex]\frac{2}{3}[/latex],似然函数取值为:

[latex]
(^{80}_{49})(\frac{2}{3})^{49}(\frac{1}{3})^{31} \approx 0.054 [/latex]

很明显,抛正面的概率为似然函数的参数,当抛正面的概率是[latex]\frac{2}{3}[/latex]时,似然函数取值最大,所以抛正面的概率的最佳值是[latex]\frac{2}{3}[/latex]。

二项逻辑斯蒂回归模型

二项逻辑斯蒂回归, binomial logistic regression。

对于n维空间的点[latex]\vec{x}[/latex]可能属于类0或者类1,二项逻辑斯蒂回归模型如下:

[latex]
P(Y=1|\vec{x}) = \frac{e^{\vec{w}\vec{x}+b}}{1+e^{\vec{w}\vec{x}+b}}, \\
P(Y=0|\vec{x}) = \frac{1}{1+e^{\vec{w}\vec{x}+b}} [/latex]

很明显:

[latex]
P(Y=1|\vec{x}) + P(Y=0|\vec{x}) = 1 [/latex]

另外,我们看一下[latex] \frac{e^x}{1+e^x}[/latex]的图形:

x = -6:0.1:6;
e = exp(1);
y = e.^x./(1+e.^x);
plot(x,y);
hold on;
plot(0, 0.5, 'ro');

对于给定的[latex]\vec{x}[/latex],求得[latex]P(Y=0|\vec{x})[/latex]和[latex]P(Y=1|\vec{x})[/latex],比较这两个概率的值,[latex]\vec{x}[/latex]会被划分到概率较大的那一类中。

当[latex]\vec{w}\vec{x}+b=0[/latex]时,[latex]P(Y=1|\vec{x})[/latex]和[latex]P(Y=0|\vec{x})[/latex]的值都是0.5,这也意味着此时的[latex]\vec{x}[/latex]很难划分为类0或者类1。

在n维空间中,向量[latex]\vec{x}[/latex]由n个标量组成,分别是[latex]x_{1}, x_{2}, ..., x_{n}[/latex],向量[latex]\vec{w}[/latex]也是由n个标量组成,可以看成与[latex]\vec{x}[/latex]一一对应的权重。另外,b可以改写成[latex]w_{0}x_{0}[/latex],其中[latex]w_{0}=b[/latex],[latex]x_{0}=1[/latex]。如此,原先的n维度就成了n+1维度,上面的条件概率分布可以改写成:

[latex]
P(Y=1|\vec{x}) = \frac{e^{\vec{w}\vec{x}}}{1+e^{\vec{w}\vec{x}}}, \\
P(Y=0|\vec{x}) = \frac{1}{1+e^{\vec{w}\vec{x}}} [/latex]

由于:
[latex]
ln \frac{P(Y=1|\vec{x})}{P(Y=0|\vec{x})} = \vec{w}\vec{x} [/latex]

如果已知[latex]\vec{w}[/latex],上式的计算结果若大于0,则认为向量[latex]\vec{x}[/latex]属于类1,否则属于类0.

现在的问题是,根据已有的数据,如何求[latex]\vec{w}[/latex]?答案是最大似然估计。

设[latex]P(Y=1|\vec{x})=\pi(\vec{x})[/latex],则[latex]P(Y=0|\vec{x})=1-\pi(\vec{x})[/latex],似然函数是:

[latex]
\prod_{i=1}^{N}[\pi(\vec{x}_{i})]^{y_{i}} [1-\pi(\vec{x}_{i})] ^{1-y_{i}} [/latex]

要求使得似然函数达到最大值的[latex]\vec{w}[/latex],可以处理等价的对数似然函数是:

[latex]
L(\vec{w}) = ln(\prod_{i=1}^{N}[\pi(x_{i})]^{y_{i}} [1-\pi(x_{i})] ^{1-y_{i}}) \\
= ... \
= \sum_{i=1}^{N}[y_{i}(\vec{w}\cdot x_{i}) - ln(1+e^{\vec{w}\cdot x_{i}})]
[/latex]

当[latex]L(\vec{w})[/latex]达到最大值时候的[latex]\vec{w}[/latex]的值便是参数[latex]\vec{w}[/latex]的估计值,一般记做[latex]\widehat{w}[/latex]。

要求这个估计值,一般选择梯度上升/下降法、拟牛顿法等优化方法。梯度下降法,在梯度下降法有介绍。

多项逻辑斯蒂回归

多项逻辑斯蒂回归,multi-nominal logistic regression。

二项逻辑斯蒂回归适合于二类问题,针对多类问题,可以使用多项逻辑斯蒂回归模型。这个模型只是对二项逻辑斯蒂回归模型进行了拓展,具体可以参考Multinomial logistic regression、李航的《统计学习方法》第6章等内容。

练练手

matlab提供了逻辑斯蒂回归的工具,分别是mnrfit和mnrval。下面是一个示例:

x1 = [1,2]; y1 = 1;
x2 = [2,1]; y2 = 1;
x3 = [1,0]; y3 = 1;
x4 = [4,5]; y4 = 2;
x5 = [5,6]; y5 = 2;
x6 = [5,4]; y6 = 2;

X = [x1; x2; x3; x4; x5; x6];
Y = [y1; y2; y3; y4; y5; y6];

weight = mnrfit(X, Y);

scores = mnrval(weight, [6,1]);

矩阵X代表训练集,一行是一个样本;向量Y代表样本的标号,与X中的样本一一对应。

mnrfit()用来对数据进行逻辑斯蒂回归训练,weight就是上文提到的[latex]\vec{w}[/latex],其结果是:

>> weight

weight =

   34.8490
   -6.1497
   -5.4667

mnrval()函数用来预测新样本的标号,对于样本[6,1],scores的值为:

>> scores

scores =

    0.0005    0.9995

这意味着[6,1]属于类别2的概率是0.9995,这个样本应该划分到类别2中。

我们手动算一下属于类别2的概率:

>> 34.8490 -6.1497*6 -5.4667

ans =

   -7.5159

>> 1/(1+exp(ans))

ans =

    0.9995

更多资料

《统计学习方法》 李航
似然函数
Multinomial logistic regression
Logistic Regression 之基础知识准备



( 本文完 )