如何理解logistic函数表达式

第一节中说了,logistic 回归和线性回归的区别是:线性回归是根据样本X各个维度的Xi的线性叠加(线性叠加的权重系数wi就是模型的参数)来得到预测值的Y,然后最小化所有的样本预测值Y与真实值y'的误差来求得模型参数。我们看到这里的模型的值Y是样本X各个维度的Xi的线性叠加,是线性的。
Y=WX (假设W&0),Y的大小是随着X各个维度的叠加和的大小线性增加的,如图(x为了方便取1维):
然后再来看看我们这里的logistic 回归模型,模型公式是:,这里假设W&0,Y与X各维度叠加和(这里都是线性叠加W)的图形关系,如图(x为了方便取1维):
我们看到Y的值大小不是随X叠加和的大小线性的变化了,而是一种平滑的变化,这种变化在x的叠加和为0附近的时候变化的很快,而在很大很大或很小很小的时候,X叠加和再大或再小,Y值的变化几乎就已经很小了。当X各维度叠加和取无穷大的时候,Y趋近于1,当X各维度叠加和取无穷小的时候,Y趋近于0.
这种变量与因变量的变化形式就叫做logistic变化。(注意不是说X各个维度和为无穷大的时候,Y值就趋近1,这是在基于W&0的基础上,(如果W&0,n那么Y趋近于0)而W是根据样本训练出来,可能是大于0,也可能是小0,还可能W1&0,W2&0&所以这个w值是样本自动训练出来的,也因此不是说你只要x1,x2,x3&各个维度都很大,那么Y值就趋近于1,这是错误的。凭直觉想一下也不对,因为你连样本都还没训练,你的模型就有一个特点:X很大的时候Y就很大。这种强假设肯定是不对的。因为可能样本的特点是X很大的时候Y就很小。)
所以我们看到,在logistic回归中,X各维度叠加和(或X各维度)与Y不是线性关系,而是logistic关系。而在线性回归中,X各维度叠加和就是Y,也就是Y与X就是线性的了。
X各维度叠加和Y的关系不只是这一种,还可能是其他的比如:
为什么变量与因变量要选用logistic关系呢,因为这里(1)我们需要Y代表的是概率即Y&(0,1)。(2)我们需要X各维度叠加和在0附近变化幅度比较大,并且是非线性的变化。而在很大或很小的时候,几乎不变化,这是基于概率的一种认识与需要。感性的一个例子,想想你学习努力的程度与从60分提高到80分和80提高到100分并不是线性的。(3)这个关系的公式要在之后形成的cost function是凸函数。
所以就选择了logistic。
前面已经说了,我们使用logistic回归是用于二分类问题(y只有两个值A,B,也可以写成1和0,这都没关系),回归模型得到的结果不是预测样本X对应的y值(注意下,在logistic回归这里我们小写y表示某个样本Xi的类别,而大写Y或Y(Xi)表示logistic回归模型对某个样本Xi预测为1的概率。其实这里最好把Y用其他字母表示,以免混淆,但是已经这里写了,以后注意。),而是y=1的概率或y=0的概率。我们假设y=1的概率公式是:,那么y=0的概率就是。(注意我们也可以y=0的概率公式为前面那一个,这里是任意的。这里不同的结果只是最终的W参数不同罢了。因为我们最终的W是训练出来的,不管怎么样,模型都会表现出样本的特点来。只是我们习惯了把Y(X)当成y=1的logistic模型映射的概率)
还要注意这里我们不是对一个Xi都要分别预测出来y=1的概率和y=0的概率。而是对于一个Xi,如果它的yi=1,那么我们就用这个公式映射所对应的概率,如果对于一个Xi,如果它的yi=0,那么我们就用这个公式映射所对应的概率。都是根据yi的值映射出来一个概率。
因为我们的Y是概率,我们不能利用最小误差等,我们这里用的是极大化所有样本的对数似然函数:。
yi表示的是Xi真实所属的类别(1或0)。L(W)就是cost function。这里的目标函数值和W有关系,也就是X各维度线性叠加的那些权重有关系。
那么这些权重的物理意义是什么呢?就是X各维度与Y值关系的那个方向,听起来可能很抽象,现在看一下具体例子(X为二维,但考虑将常数项变成齐次后X就是三维了,第一维是1,因此W也是三维的,第一维是常数项,大小不影响那个方向,主要考虑后面的两个值的关系),比如:
当W=[-15 0.2 0.2],图形为:(一种45&方向的关系)
当W=[-15 -0.2 -0.2],图形为:(一种-45&方向的关系)
当W=[-15 0.2 0.01],图形为:(一种0&方向(沿x轴形成的logistic关系)的关系)
当W=[-15 0.01 0.2],图形为:(一种90&方向(沿y轴形成的logistic关系)的关系)
下面我们对L(W)求极值。
L(W)是negtive 的似然函数。只有是negtive的,才能用梯度下降法求最小值,如果不是negtive的,就要用梯度上升法求最大值了,我们一般不用那个。还要注意我们的代价函数不管是最小二乘法、误差均方、似然函数等,都要求平均,就是前面加上1/m.利用梯度下降法求得的迭代公式是:,其中wj代表的是模型参数向量W的第j个元素。
&代表的是学习速率,yi表示的是第i个样本向量的真实标签(label),也就是第i个样本向量所属的类别(0或1),Y(Xi)表示的是回归模型预测的第i个样本向量为1的概率。xij表示的第i个样本向量Xi的第j个元素。小心不要忘了&S(i=1:m)。& & &还要注意因为梯度下降法梯度是目标函数分别对模型参数向量W的第每一个元素求偏导,所以这里W的第每一个元素的值是一个一个求出来的。当然在matlab中,虽然是按向量导入计算的数据,但是本质上还是一个一个计算的w的每个值,而不是直接求的这个向量是多少。后来又看了看,前面说的这就句话不对,虽然求偏导是分别对W的每一维度求,但是这个L(w)每一次迭代的梯度向量是可以一次求出来的,也是可以在公式里直接表达出来的。不是说公式中只能一次写一个向量的一维,可以写一个向量。而matlab与公式的区别在于,比如X这个样本可以把所有的n个样本都包括,不用&S;而在公式中只能表示一个样本,然后用&S表示出所有样本(正是这个原因,在matlab中写的代码才会和公式模样不一样)。而不是之前说的公式中只能表达一个样本的一维。
我们注意到这个迭代公式和线性回归的迭代公式形式是一样的,只是在线性回归中Y(Xi)为Xi的各维度线性叠加即WXi=WXi,而这里Xi的各维度线性叠加WXi以后,还要进行一次非线性映射(即logistic映射),非线性的映射到(0,1)之间Y(Xi)。所以也可以认为logstic回归也是处理的线性问题,即也是求的各维度线性叠加的权重系数,只是求得了各维度线性叠加和以后,不是与Xi所属的类别进行比较,而是非线性映射到所属类别的概率,然后最大似然函数法求模型参数(也就是那个各维度线性叠加的权重,而后面的非线性映射logstic那里没有参数)。
下面说一个例子:训练样本的特征为80个学生的两门功课的分数,样本值yi为对应的同学是否允许被上大学。训练好以后,用训练好的模型根据某个学生的成绩预测是否被允许上大学?数据中给出被允许上大学为1,不被允许上大学为0。
程序代码(梯度下降法):
2: x = load('ex4x.dat'); %每一行是一个样本
3: y = load('ex4y.dat');
4: [m, n] = size(x);
5: sample_num =
6: x = [ones(m, 1), x]; %x增加一维。因为前面文字或前几节说了
7: % Plot the training data
8: % Use different markers for positives and negatives
10: pos = find(y == 1); neg = find(y == 0);%pos 和neg 分别是 y元素=1和0的所在的位置序号组成的向量
11: plot(x(pos, 2), x(pos,3), '+')%用+表示那些yi=1所对应的样本
12: hold on
13: plot(x(neg, 2), x(neg, 3), 'o')
14: hold on
15: xlabel('Exam 1 score')
16: ylabel('Exam 2 score')
17: itera_num=500;%迭代次数
18: g = inline('1.0 ./ (1.0 + exp(-z))'); %这个就相当于制造了一个function g(z)=1.0 ./ (1.0 + exp(-z))
19: plotstyle = {'b', 'r', 'g', 'k', 'b--', 'r--'};
20:%建立新的窗口
21: alpha = [ 0.,0.2,0.4 ];%下面就分别用这几个学习速率看看哪个更好
22: for alpha_i = 1:length(alpha) %alpha_i是1,2,...6,表示的是学习速率向量和曲线格式向量的坐标:alpha(alpha_i),plotstyle(alpha_i)
23:&&&& theta = zeros(n+1, 1);%thera表示样本Xi各个元素叠加的权重系数,这里以向量形式表示,且初始都为0,三维向量
24:&&&& J = zeros(itera_num, 1);%J是个100*1的向量,第n个元素代表第n次迭代cost function的值(下面用negtive 的对数似然函数,
25:&&&& %因为是negtive 的,所以是求得极小值)
26:&&&& for i = 1:itera_num %计算出某个学习速率alpha下迭代itera_num次数后的参数&&
27:&&&&&&&& z = x *%这个z是一个列向量,每一个元素是每一个样本Xi的线性叠加和,因为X是所有的样本,因此这里不是一个一个样本算的,
28:&&&&&&&& %而是所有样本一块算的,因此z是一个包含所有样本Xi的线性叠加和的向量。在公式中,是单个样本表示法,而在matlab中都是所有的样本一块来。
29:&&&&&&&& h = g(z);%这个h就是样本Xi所对应的yi=1时,映射的概率。如果一个样本Xi所对应的yi=0时,对应的映射概率写成1-h。
30:&&&&&&&& J(i) =(1/sample_num).*sum(-y.*log(h) - (1-y).*log(1-h));%损失函数的矢量表示法 这里Jtheta是个100*1的列向量。
31:&&&&&&&& grad = (1/sample_num).*x'*(h-y);%在程序中X是包括所有的X样本,公式中只能是每一个样本Xi,所以不能直接把公式照搬,所以要认真看看,代码中相应改变一下。
33:&&&&&&&& theta = theta - alpha(alpha_i).*
34:&&&& end
35:&&&& plot(0:itera_num-1, J(1:itera_num),char(plotstyle(alpha_i)),'LineWidth', 2)
%此处一定要通过char函数来转换因为包用()索引后得到的还是包cell,
36:&&&& %所以才要用char函数转换,也可以用{}索引,这样就不用转换了。
37:&&&& %一个学习速率对应的图像画出来以后再画出下一个学习速率对应的图像。&&&
38:&&&& hold on
39:&&&& if(1 == alpha(alpha_i)) %通过实验发现alpha为0.0013 时效果最好,则此时的迭代后的theta值为所求的值
40:&&&&&&&& theta_best =
41:&&&& end
43: legend('0.0009', '0.001','0.0011','0.0012','0.0013' ,'0.0014');%给每一个线段格式标注上
44: xlabel('Number of iterations')
45: ylabel('Cost function')
46: prob = g([1, 20, 80]*theta);
%把[1, 20, 80]*theta这个带入g(z)得到的就是在exam1=20、exam2=80的条件下,通过的概率(也就是Y=1)的概率是多少。
47: %画出分界面
48: % Only need 2 points to define a line, so choose two endpoints
49: plot_x = [min(x(:,2))-2,& max(x(:,2))+2];%两个点就可以画出来直线,这里这么取x1坐标是让直接的视野更容易包含那些样本点。
50: plot_y = (-1./theta(3)).*(theta(2).*plot_x +theta(1));%分界面怎么画呢?问题也就是在x1,x2坐标图中找到
%那些将x1,x2带入1/(1+exp(-wx))后,使其值&0.5的(x1,x2)
51: %坐标形成的区域,因为我们知道1/(1+exp(-wx))&0.5
52: %意味着该区域的(x1,x2)表示的成绩允许上大学的概率&0.5,那么其他的区域就是不被允许上大学,那么1/(1+exp(-wx))=0.5解出来的一个关
%于x1,x2的方程就是那个分界面。
53: %我们解出来以后发现,这个方程是一个直线方程:w(2)x1+w(3)x2+w(1)=0
54: %注意我们不能因为这个分界面是直线,就认为logistic回归是一个线性分类器,注意logistic回归不是一个分类器,他没有分类的功能,
%这个logistic回归是用来
55: %预测概率的,这里具有分类功能是因为我们硬性规定了一个分类标准:把&0.5的归为一类,&0.5的归于另一类。这是一个很强的假设,
%因为本来我们可能预测了一个样本
56: %所属某个类别的概率是0.6,这是一个不怎么高的概率,但是我们还是把它预测为这个类别,只因为它&0.5.所以最后可能logistic回归加上这
%个假设以后形成的分类器
57: %的分界面对样本分类效果不是很好,这不能怪logistic回归,因为logistic回归本质不是用来分类的,而是求的概率。
59: plot(x(pos, 2), x(pos,3), '+')%把分界面呈现在样本点上面,所以还要把样本点画出来。
60: hold on
61: plot(x(neg, 2), x(neg, 3), 'o')
62: hold on
63: plot(plot_x, plot_y)
64: legend('Admitted', 'Not admitted', 'Decision Boundary')
65: hold off
当学习速率取不同的值时,迭代次数与cost function形成的不同的曲线 如图所示:
当学习速率为0.0014时候,我们看到图像开始振荡,说明学习速率过大了。
当我们将logistic回归应用到分类器中时,如果我们假设p(Y(x)|x)&0.5归为一类,p(Y(x)|x)&0.5归为另一类。那么分类器分界面如图:
当我们看到这个图时,我们是不是有种感觉:这个logistic回归比线性回归复杂,为什么结果得到的那么差?
先说一句,我们不要用这个分界面来评价logistic回归模型的好坏!!! 这个一会再说,我们先说这个分界面公式是怎么产生的。
分界面怎么画呢?问题也就是在x1,x2坐标图中找到那些将x1,x2带入1/(1+exp(-wx))后,使其值&0.5的(x1,x2)坐标形成的区域,因为我们知道1/(1+exp(-wx))&0.5意味着该区域的(x1,x2)表示的成绩允许上大学的概率&0.5,那么其他的区域就是不被允许上大学,那么1/(1+exp(-wx))=0.5解出来的一个关于x1,x2的方程就是那个分界面。我们解出来以后发现,这个方程是一个直线方程:w(2)x1+w(3)x2+w(1)=0& 注意我们不能因为这个分界面是直线,就认为logistic回归是一个线性分类器,注意logistic回归不是一个分类器,他没有分类的功能,这个logistic回归是用来预测概率的,这里具有分类功能是因为我们硬性规定了一个分类标准:把&0.5的归为一类,&0.5的归于另一类。这是一个很强的假设,因为本来我们可能预测了一个样本所属某个类别的概率是0.6,这是一个不怎么高的概率,但是我们还是把它预测为这个类别,只因为它&0.5.所以最后可能logistic回归加上这个假设以后形成的分类器的分界面对样本分类效果不是很好,这不能怪logistic回归,因为logistic回归本质不是用来分类的,而是求的概率。
牛顿法的阐述可以看我写的&/happylion/p/4172632.html&
注意一下,在这个例子中,我们要求G,我们不是利用这个公式,这个太麻烦了,而是直接在刚才目标函数一次求导的基础上继续求导,二次导为:
matlab程序中的形式具体看程序。
牛顿法程序 clx = load('ex4x.dat');&
y = load('ex4y.dat');
[m, n] = size(x);
% Add intercept term to x
x = [ones(m, 1), x];
% Plot the training data
% Use different markers for positives and negatives
pos = find(y); neg = find(y == 0);%find是找到的一个向量,其结果是find函数括号值为真时的值的编号
plot(x(pos, 2), x(pos,3), '+')
plot(x(neg, 2), x(neg, 3), 'o')
xlabel('Exam 1 score')
ylabel('Exam 2 score')
% Initialize fitting parameters
theta = zeros(n+1, 1);
% Define the sigmoid function
g = inline('1.0 ./ (1.0 + exp(-z))');
% Newton's method
MAX_ITR = 7;
J = zeros(MAX_ITR, 1);
for i = 1:MAX_ITR
% Calculate the hypothesis function
h = g(z);%是可以以向量形式给g()函数输入的,不是因为所有函数都可以这么输,而是这个函数里面有个exp()函数,
%是可以的。z的每一维在exp()中分别计算,对应h里的每一维。
% Calculate gradient and hessian.
% The formulas below are equivalent to the summation formulas
% given in the lecture videos.
grad = (1/m).*x' * (h-y);%
H = (1/m).*x' * diag(h) * diag(1-h) *%因为在matlab中,是以所有样本一块作为X输入的,所以这里的h是一个
%向量,里面的元素是每个样本映射的logistic回归模型的概率,这样两个对角矩阵乘出来,还是一个对角矩阵,每个对角
%元是每个样本的hi*(1-hi)。这样做就是适应公式在matlab下的表现形式,是正确的,我验算了。
% Calculate J (for testing convergence)
J(i) =(1/m)*sum(-y.*log(h) - (1-y).*log(1-h));
theta = theta - H\%是这样的,matlab里 \ 是左除,/ 是右除。如果是数字计算,则左除和右除是等效的,例如 3/2 = 2\3。
%而对于矩阵运算,则二者不等效。矩阵除法在 matlab 里定义为矩阵求逆后相乘。例如 A的逆矩阵是 A1,则 B/A = B*A1,A\B = A1*B。
%矩阵乘法不满足交换律,因此需要有左右除法之分。矩阵求逆的命令是 inv矩阵乘法不满足交换律,因此需要有左右除法之分。
% Display theta
% Calculate the probability that a student with
% Score 20 on exam 1 and score 80 on exam 2
% will not be admitted
prob = 1 - g([1, 20, 80]*theta)
%画出分界面
% Plot Newton's method result
% Only need 2 points to define a line, so choose two endpoints
plot_x = [min(x(:,2))-2,
max(x(:,2))+2];
% Calculate the decision boundary line,plot_y的计算公式见博客下面的评论。
plot_y = (-1./theta(3)).*(theta(2).*plot_x +theta(1));
plot(plot_x, plot_y)
legend('Admitted', 'Not admitted', 'Decision Boundary')
plot(0:MAX_ITR-1, J, 'o--', 'MarkerFaceColor', 'r', 'MarkerSize', 8)
xlabel('Iteration'); ylabel('J')
% Display J
结果可看&/tornadomeet/archive//2963919.html
我们可以看到利用牛顿法是比梯度下降法收敛快。这个解释的原因很多,在这里就不解释了。
阅读(...) 评论()机器学习(1)
Logistic Regression 笔记与理解
Logistic Regression
Hypothesis 记为 H(theta)
H(theta)=g(z)
其中g(z),是一个叫做Logistic Function的函数,g(z)函数定义如下:
对应图像如下:
这是一个值域为0~1的s型函数,在理解中可以认为:
落在曲线上的任意一点A
A的横坐标对应的纵坐标值是z参数,或者说z对象属于“1”的概率。
在Logistic Regression中
g(z)的参数z为:
一个线性或非线性函数的向量化表示
这个函数对应的图像被称作决策边界
两种决策边界的例子:
为了方便,以下我们只讨论线性边界的情况
线性边界的表示为
所以Logistic Regression Hypothesis 定义如下:
如上所说,Hypothesis定义了结果取1的概率,因此对于输入x分类结果为类别1和类别0的概率分别为:
以上是Logistic Regression Hypothesis 的理解
Logistic Regression Cost Function 记为 J(theta)
Cost 的主要功能是计算H(theta)和答案Y的差距,在线性回归中这个差距可以用方差解决,但是Logistic问题只有+-两种答案,所以Logistic Regression的Cost函数应该是这样的:
整合为一个函数
我们便得到了Logistic Regression的Cost Function。
接下来就是求解Cost Function最小值的方法-梯度下降
或使用Matlab 内建miniziae函数
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2893次
排名:千里之外
原创:10篇
(1)(1)(2)(1)(5)后使用快捷导航没有帐号?
通俗解释机器学习中的Logistic Regression
查看: 20248|
评论: 0|来自:
摘要: Logistic Regression是一种分类算法。分类,也就是把一个群体(或问题,或数据)分为几个类别,例如,男/女/人妖;爱她的人/不爱她的人;今天会下雨/今天不会下雨。Logistic Regression最常用于处理“二分类”问题, ...
Logistic Regression是一种分类。分类,也就是把一个群体(或问题,或数据)分为几个类别,例如,男/女/人妖;爱她的人/不爱她的人;今天会下雨/今天不会下雨。Logistic Regression最常用于处理“二分类”问题,也就是说分类只有两个,像“爱她的人/不爱她的人”就是二分类,而“男/女/人妖”就不是二分类。当然,Logistic Regression也可以用于处理多分类问题,即所谓的“多分类逻辑回归”(Multiclass Logistic Regression),但本文并不涉及这个方面。所以,说得简单点就是,给你一条数据,用Logistic Regression可以判断出这条数据应该被分到两个类别中的哪个中去。Logistic Regression在现实世界中非常有用。例如,可以用它来判断一个用户是否会点击一个广告(会点击/不会点击),可以用Logistic Regression来判断两类人是否会相爱(会相爱/不会相爱),等等。的主旨就是通过对历史数据的计算(即“学习”),得到一些未知参数的值,从而可以推断出新数据会有什么结论。例如一个非常简单的函数: y=ax+b ,在已知几组 (x,y) 历史数据的情况下:(1, 5.5)(1.5, 7)(2, 6.5)我们怎样能够预测一个未知的自变量 x=3 会对应什么样的因变量 &y 呢?也就是说, x=3 时 &y=?&显然我们的任务就是计算出两个未知参数 &a 和 &b 的值,有了这两个值,那么任意给定一个 &x ,我们都能通过函数 &y=ax+b 计算出 &y 的值了,这就是所谓的“预测”。Logistic Regression也是类似,我们有一个函数 y=f(X) ,里面包含若干个未知参数θ0,θ1,θ2,…,θn 。由于现实世界是复杂的,因变量 &y 通常会跟很多因素(自变量 x )有关系,即 &x0,x1,x2,…,xn ,所以这里自变量是一个向量,这里用大写的 X 来表示。同理,那一堆未知的参数也是一个向量,用一个字母 θ 来表示。现在给我们一堆 (x,y) 的历史数据,我们要想办法计算出所有未知参数的值,然后就可以拿来预测新的 &x 值所对应的 &y 值了。但是这个函数是什么呢?如下:其中, θ 是参数向量, X 是自变量(向量)。那么,这个略显奇怪的函数是怎么来的呢?首先我们看这部分:这是参数向量与自变量(向量)的点积,这个式子想要表达的含义是:计算某个事件发生的可能性,可以把跟这个事件相关的所有特征加权求和。例如,要求今天下雨的可能性,可以把今天所有和下雨相关的概率加权求和,例如梅雨季节权重为9(每天都很可能下雨),有台风经过权重为6,等等,每一个因素都影响着“下雨的可能性”,即:但是这个加权求和的结果是在 (−∞,+∞) 范围内的,为了能表示预测的概率,我们希望把输出值限制在(0,1) 之间,而不是 &(−∞,+∞) 。所以,这时,逻辑函数就出场了。所谓的逻辑函数,就是这样的一个函数:这个函数是由 Pierre François Verhulst(皮埃尔·弗朗索瓦·韦吕勒)在年的时候给它起的名字。而我们上面的函数(1),就是这个形式。逻辑函数的图像是这个样子的:它的函数值刚好就是在(0,1)之间。所以,我们通过逻辑函数,就可以计算出一个事件的概率了((0,1)之间)。但是不要忘了,我们前面说要处理二分类问题,得到一个(0,1)之间的任意值并不能归到两个分类中的一个里去,所以还要把这个概率值“归类”。其实这里很简单,我们可以在 &f(X)&0.5 &的时候,把它归到类别1中, f(X)≤0.5 &的时候,把它归到类别2中就可以了(概率值的“分水岭”可以根据实际情况调整)。用数学公式来表达这段话的含义就是:在各种机器学习的文章中,你都会看到,它们给了逻辑函数一个常用的名字:Sigmoid函数。sigmoid,意为“S形的”,这正符合其函数图像特点,所以大家记住就行了。现在,我们已经有了函数,下一步任务就是求出函数表达式中的未知参数向量 θ 了。这个过程是机器学习中最为核心的计算步骤。以前面讲过的函数 y=ax+b &为例:你会发现,当已知几组 (x,y) &数据的情况下:(1, 5.5)(1.5, 7)(2, 6.5)你无论如何也不可能找到一对 a 和 &b 的值,使得以上3组数据能精确地满足方程 & y=ax+b ,正如下面的图像所示:这条直线如果要精确地通过其中的两个点,那么就不能通过第三个点。所以,最终求出来的 &a 和 &b 的值,并不是方程的解析解,而是“最优解”。因此,问题在于,我们如何画一条直线,使得其是“最优”的?“最优”的评判标准是什么?为了理解“最优”,我们需要先了解一些概念。损失函数/Loss Function/代价函数/Cost Function很多文章说,这几个名词的含义是一样的。但是也有文章说,Loss Function和Cost Function不是一回事,例如这篇文章。但通常认为,这二者是一回事。我觉得嘛,大家就按通常的概念来接受就好了。按WiKi的定义:In mathematical optimization, statistics, decision theory and machine learning, a loss function or cost function is a function that maps an event or values of one or more variables onto a real number intuitively representing some "cost" associated with the event. An optimization problem seeks to minimize a loss function.以及:The loss function quantifies the amount by which the prediction deviates from the actual values.我们可以知道,损失函数用于衡量预测值与实际值的偏离程度,如果预测是完全精确的,则损失函数值为0;如果损失函数值不为0,则其表示的是预测的错误有多糟糕。使得损失函数值最小的那些待求参数值,就是“最优”的参数值。所以现在问题来了,损失函数的表达式又是什么?在探讨损失函数的表达式之前,我们先来看一下损失函数有哪些种类。损失函数有很多种,例如下面几个:(1)0-1损失函数:可用于分类问题,即该函数用于衡量分类错误的数量,但由于此损失函数是非凸(non-convex)的,因此在做最优化计算时,难以求解,所以,正因为如此,0-1损失函数不是那么“实用”(如果这句话有误,请指正)。(2)平方损失函数(Square Loss):常用于线性回归(Linear Regression)。(3)对数损失(Log Loss)函数:常用于其模型输出每一类概率的分类器(classifier),例如逻辑回归。(4)Hinge损失函数:常用于SVM(Support Vector Machine,支持向量机,一种机器学习算法)。中文名叫“合页损失函数”,因为hinge有“合页”之意。这个翻译虽然直白,但是你会发现,99%的文章都不会用它的中文名来称呼它,而是用“Hinge损失”之类的说法。这些都是人们的经验总结,当然,说每一种损失函数常用于什么机器学习算法,也都是有数学依据的。但是在这里,我们讲的是Logistic Regression,所以只看对数损失函数。对数损失函数通常用于衡量分类器(classifier)的精度,这里的“分类器”也就是指机器学习的模型,它对每一个类别输出一个概率值。从前面的文章中,我们已经知道了,逻辑回归就是这样一种分类器,所以才用对数损失函数来衡量其精度。有时候,对数损失函数(Log Loss)也被叫作交叉熵损失函数(Cross-entropy Loss)。交叉熵这个名字比较拗口,在信息理论中,熵用于衡量某种事件的“不可预测性”,而交叉熵=事件的真实分布+不可预测性,所以交叉熵可以用于度量两个概率分布(真实分布&预测分布)之间的差异性,即:交叉熵损失函数(对数损失函数)可以衡量一个模型对真实值带来的额外噪音,通过最小化交叉熵损失函数(对数损失函数),我们就可以最大化分类器(模型)的精度。上面这一大段话试图用简单的描述让你相信,为什么要用Log Loss来衡量Logistic Regression的误差,但是没有给出证明。有人可能会说,为什么不能用其他的方法来衡量,例如用平方损失函数(Square Loss)。事实上,这是有数学依据的——它会导致损失函数是一个关于参数向量 θ 的非凸函数,而用对数损失函数就没有这种问题。凸函数的性质为我们后面求解参数向量 θ 提供了极大便利,非凸函数有很多局部最优解,不利于求解 θ 的计算过程。到这里为止,我们还是没有提到损失函数的数学表达式,但是如果要计算损失函数的值,我们是回避不了的,必须要知道。所以,这里用 L 来表示损失函数(取Loss之意),则对数损失函数的表达式为:其中, yi 是第i个真实值( yi∈{0,1} ), y^i 是第i个预测值。这个对数损失函数的表达式中并没有出现我们要求解的参数 &θ ,所以我们把代到(2)式中去:再来仔细看一下这个式子:N 为数据集的条数(有多少组 (X,y) ,N就是多少),已知; yi 是真实值,已知; Xi 是输入的向量,也已知。所以整个式子里只有 θ 是未知的,可以记为 L(θ) ,称之为目标函数:因此,我们只要找到一个参数向量 θ ,能使得此式的值最小,那么这个参数向量 θ 就是“最优”的参数向量。求得了这个最优的 θ 之后,把它代入式(1),则对任一个未知的 X ,我们都可以计算出 f(X) 值,然后再根据一个阈值把它调整到 0 或 1,就得到了这个 X 所属的分类,这样,我们就完成了一次“预测”的过程。求解方法所以现在问题来了,这个“最优”的参数向量 θ 怎么求解?在大的方向上,你可以选择不使用搜索方向的算法(例如信赖域算法),也可以选择众多使用搜索方向的算法(例如梯度下降法)。在是否计算目标函数的导数这个方面,你可以使用不用求目标函数导数的算法(例如Powell共轭方向集方法),也可以使用要求目标函数导数的算法(例如梯度下降法)。由于某些目标函数形式特别复杂,计算其导数特别麻烦,所以在这种时候,不用计算导数的算法可能大有帮助。求解的过程就是一个最优化的过程,本文无法用一两句话描述清楚,请大家移步链接进行阅读。事实上,在现在各种机器学习library百花齐放的今天,我们基本上不需要自己编写这些算法的具体实现,只需要调用它们即可。例如,通过Spark的Machine Learning Library (MLlib),我们可以直接使用Stochastic gradient descent (SGD),Limited-memory BFGS (L-BFGS)等实现。但是对这背后的原理有所了解,对工作学习是有帮助的。欢迎加入本站公开兴趣群高性能计算群兴趣范围包括:并行计算,GPU计算,CUDA,MPI,OpenMP等各种流行计算框架,超级计算机,超级计算在气象,军事,航空,汽车设计,科学探索,生物,医药等各个领域里的应用QQ群:
刚表态过的朋友 ()
上一篇:下一篇:

我要回帖

更多关于 logistic 损失函数 的文章

 

随机推荐