Logistic Regression

Posted s3abiscuit

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Logistic Regression相关的知识,希望对你有一定的参考价值。

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的主要内容,如果未能解决你的问题,请参考以下文章

机器学习实验四基于Logistic Regression二分类算法实现手部姿态识别

Tensorflow逻辑斯特回归(Logistic Regression)的简单实现

R构建Logistic回归实战(Logistic Regression)

python逻辑回归(logistic regression LR) 底层代码实现 BGD梯度下降算法 softmax多分类

Logistic Regression逻辑斯蒂回归

Lecture6 逻辑斯蒂回归(Logistic Regression)