学习总结:机器学习(六)
邏輯回歸(Logistic regression)
前面幾篇文章都是在討論回歸問題,從這一部分開始,過渡到分類問題。第一篇文章中曾經(jīng)寫過:如果輸出值為連續(xù)值,則可歸為回歸問題;如果輸出值為若干離散值,則為分類問題。
從最簡(jiǎn)單的問題開始,我們假設(shè)輸出值y只有兩個(gè)值{0,1}。這時(shí),如果用線性回歸,我們很難找到符合要求的線性函數(shù),于是,采用另一種回歸——邏輯回歸。
在線性回歸中,我們假設(shè)其“規(guī)律”為一個(gè)線性函數(shù):
而在邏輯回歸中,我們假設(shè)其“規(guī)律”為一個(gè)邏輯函數(shù):
其中,
稱為邏輯函數(shù)或sigmoid函數(shù)。
? 邏輯函數(shù)的圖形如下:
這是一條很優(yōu)美的s型曲線,z大于0,g(z)大于0.5,z小于0,g(z)小于0.5;z趨于無窮大時(shí),g(z)趨近于1,z趨于無窮小時(shí),g(z)趨近于0.
另外,邏輯函數(shù)的導(dǎo)數(shù)有如下性質(zhì):
接下來,我們開始將概率方面的東西引入邏輯回歸。P(y = 1 | x; θ)表示:當(dāng)θ確定時(shí),輸入為x時(shí),輸出y可能為1的概率。不妨假設(shè):
根據(jù)上面的假設(shè),可以以更緊湊的方式寫出輸出y的概率密度函數(shù)
如果訓(xùn)練集中每一個(gè)樣本都是獨(dú)立生成的,那就可以得到似然函數(shù)的表達(dá)式:
所謂似然函數(shù),可以這么理解:對(duì)于某一個(gè)θ,訓(xùn)練集是X時(shí),輸出為y的可能性有多大。怎樣衡量可能性呢?這里是通過計(jì)算每一個(gè)訓(xùn)練樣本的輸出可能為目標(biāo)值的概率,然后再將所有樣本的這些概率相乘。
我們的目的,自然是找到一個(gè)θ,使似然函數(shù)取得最大值。與線性回歸類似,我們可以采用梯度上升的方法來獲取θ:? (注意:梯度上升方法是用“+”,而梯度下降方法用“-”)
對(duì)于一個(gè)訓(xùn)練樣本,有:
l(θ)是似然函數(shù)的對(duì)數(shù)形式:l(θ)=logL(θ).由此,可以得到更新策略:
它與隨機(jī)梯度下降算法很相似。
思考:1.為什么要假設(shè)P(y = 1 | x; θ) = hθ(x)?
我的答案:hθ(x) = g(θTx) 是輸入為x時(shí),對(duì)輸出的一種假設(shè)。這里還有一層隱含的含義:θTx實(shí)際上是對(duì)樣本的一種線性劃分。若θTx<0,則表示將x劃分到輸出為y=0那一類,此時(shí)P(y = 1 | x; θ)自然應(yīng)該較小;若θTx>0,則表示將x劃分到輸出為y=1那一類,此時(shí)P(y = 1 | x; θ)自然應(yīng)該較大。而sigmoid函數(shù)完全符合這一映射要求。
2.講義上的問題:上面得到的更新策略與隨機(jī)梯度下降算法很相似,但它卻是與線性回歸完全不同的概念,為什么會(huì)出現(xiàn)這種情況?
我的答案:線性回歸是調(diào)整θ,使得hθ(x)符合樣本的固有規(guī)律;而邏輯回歸則相反,它是對(duì)樣本點(diǎn)進(jìn)行一個(gè)映射,使得映射后的樣本點(diǎn)分布符合sigmoid函數(shù)的規(guī)律。但它們的相同點(diǎn)是,都有一個(gè)漸進(jìn)逼近的過程,所以產(chǎn)生的更新策略會(huì)很相似。
?
matlab代碼如下:
?
%logicRegressionTrain function is used to train samples using logic
%regression.
%FEATURE is the features of the samples.
%VALUE is the output of the samples.
%THETA is parameter of the hypotheses.
function [theta] = logicRegressionTrain(feature,value)
length = size(feature,2);
num = size(feature,1);
features = [ones(num,1) feature];
theta = zeros(length + 1,1);
alpha = 0.005/(num*10);
%theta = 1 + rand(1,length + 1);
for i = 1:100000;
delta = value - h_func(features,theta);
% costvalue = delta'*delta;
% if costvalue < 1e-10;
% display 'break the if condition'
% break;
% end
theta = theta + alpha*features'*delta;
% theta(1) = theta(1) + alpha*sum(delta.*features(:,1));
% theta(2) = theta(2) + alpha*sum(delta.*features(:,2));
end
theta = theta/theta(1);
end
?
function [hypVal] = h_func(features,theta)
rate = features*theta;
hypVal = 1./(1 + exp(-rate));
end
轉(zhuǎn)載于:https://www.cnblogs.com/guobiao819/p/logistic_regression.html
總結(jié)
以上是生活随笔為你收集整理的学习总结:机器学习(六)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL with(unlock)与wit
- 下一篇: 驱动学习2