码迷,mamicode.com
首页 > 其他好文 > 详细

Logistic Regression

时间:2018-01-15 12:39:27      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:http   com   图片   gre   res   连续   desc   带来   需要   

Motivation 问题描述

对于一些问题标签值只有两个(1,0),而线性回归模型的输出值是一定范围的连续值。这时的做法是人为规定一个阈值0,当预测值大于0时判为1,预测值小于0时判为0.
技术分享图片?
上图对应的线性回归假设函数hypothesis为(特征的维数是2)
\[h_\theta(x)=-3+x_1+x_2\]
对于第i 个样例,当
\[h_\theta(x^{(i)})>0\]
预测为1,反之预测为0
使用这样的hypothesis带来的问题是无法定义损失函数。这时引入sigmoid函数。
\[y = \frac 1 {1+e^{-x}}\]
技术分享图片?

Hypothesis

借助sigmoid函数,hypothesis定义为
\[h_\theta(x) = \frac 1 {1+e^{\theta x}}\]
这时当
\[\theta x > 0\]
时,预测值归为1,此时有
\[h_\theta(x)>0.5\]
反之,当
\[\theta x < 0\]
时,预测值归为0,此时有
\[h_\theta(x)<0.5\]

Cost function

这样做的好处是
1. 使假设函数hypothesis的值落在区间(0,1)内。
2. 方便构造损失函数。

假设第i 个样本的标签为1的,当假设函数预测为0.7,他表示有70%的概率预测为1.使用极大似然估计这时此样本造成的损失为
\[-1\times{log0.7}\]
而且当预测假设函数值为0.6时损失值
\[-1\times{log0.6}\]
更大,这符合直观的认知。所以对于所有样本标签为1的样本,其损失函数定义为
\[Cost(h_\theta(x^{(i)}),y^{(i)})=-y^{(i)}logh_\theta(x^{(i)})\]
技术分享图片?
对于所有样本标签为0的样本,其损失函数定义为
\[Cost(h_\theta(x^{(i)}),y^{(i)})=-(1-y^{(i)})log(1-h_\theta(x^{(i)}))\]
技术分享图片?
可以看出当预测值为0时,其造成的损失为0;当预测值越大,其造成的损失也越大。综合以上两种情况,给出损失函数cost function的定义
\[J(\theta)=\frac 1 m\sum_{i=1}^mCost(h_\theta(x^{(i)}),y^{(i)})
\]\[=-\frac 1 m[\sum_{i=1}^my^{(i)}logh_\theta(x^{(i)})+(1-y^{(i)})log(1-h_\theta(x^{(i)}))]\]
为什么不使用原来的平方差之和为损失函数?因为使用原来的损失函数可能会不收敛。
技术分享图片?

Gradient descent

碰巧的是梯度下降的公式和线性回归完全相同。代码实现的时候需要选择迭代次数和梯度下降速度参数alpha,这也是使用sigmoid函数的第三点好处。(此处省略证明)
\[\theta_j := \theta_j - \alpha\frac 1 {2m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})\cdot{x^{(i)}_j}\]
实际情况是使用Matlab中的fminunc函数,它会自动选择参数alpha

Matlab 代码实现

Cost function with regularization

H = sigmoid(X*theta);
T = y.*log(H) + (1 - y).*log(1 - H);
J = -1/m*sum(T) + lambda/(2*m)*sum(theta(2:end).^2);
ta = [0; theta(2:end)];
grad = X‘*(H - y)/m + lambda/m*ta;

Calculate parameters

[theta, cost] = fminunc(@(t)(costFunction(t, X, y)), initial_theta, options);

Predict

p = predict(theta, X);

fprintf(‘Train Accuracy: %f\n‘, mean(double(p == y)) * 100);
function p = predict(theta, X)

m = size(X, 1); % Number of training examples
p = zeros(m, 1);

for i = 1:m
    temp = sigmoid(X(I,:)*theta);
    if temp>=0.5
        p(i,1)=1;
    else
        p(i,1)=0;
    end
end

end

References

  1. Machine Learning by Andrew Ng

Logistic Regression

标签:http   com   图片   gre   res   连续   desc   带来   需要   

原文地址:https://www.cnblogs.com/s3abiscuit/p/Logistic-Regression.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!