機器學習之邏輯回歸

2021-07-04 15:20:07 字數 3088 閱讀 3776

什麼叫邏輯回歸? 簡單來講便是目標值只有,而線性回歸的目標值卻是乙個區域

0,1 可以代表得病沒得病,正確錯誤,etc...

那麼怎麼才能把給定的輸入值正確的分類到呢,下面就介紹乙個特別的函式:sigmoid函式, g(z) = 1/(1+ exp(-z)) 

啥都不說先上圖。

上圖便是sigmoid函式圖了,之所以引用這個函式便是他在z取極小的區間[-5 5]  y便從0過度到1,極其迅速。而當z取0時,y剛好為0.5

所以當輸入值z>0時 y>0.5  那麼便把它歸到1 這類,而當輸入值z<0 便把它歸到0這類。所以現在可以把重點放在z上了。

大家都知,在通過輸入值x **y的時候 x 可以有很多個feature  比如有 n個feature, m 個example, 那麼x便是m*n的矩陣,y 是m*1的矩陣。

處理x還是按純性回歸那樣 theta*x  這便是上文說的z了。現在這樣便構建好函式。那麼接下來就用這個函式來計算theta。只要計算好

theta便可以**資料啦。

我們先來介紹cost function.  說起cost function在做線性回歸的時候已經有所了解,其實就是算的誤差,這與最小二乘法道理也些類似。容我以後補充。但是做邏輯回歸並

不能用線性回歸的cost funciton 只是因為那並不會全域性最優,只能做到區域性最優。看不懂? 我也不懂,反正就是這樣。現在 正式引入邏輯回歸的cost function

大家知道y 只取0 ,1 所以很容易得知上式是乙個兩個種情況的合成

只有當cost function 最小時,達到全域性最優,這時的theta值最合理。那麼怎麼求cost funciton 最小值的 這個便要用到梯度下降了,說穿了就是求偏導。

就這樣一次次的迴圈便達到min j(theta)。 二話不說先**;

34.6237   78.0247         0

30.2867   43.8950         0

35.8474   72.9022         0

60.1826   86.3086    1.0000

79.0327   75.3444    1.0000

45.0833   56.3164         0

61.1067   96.5114    1.0000

75.0247   46.5540    1.0000

76.0988   87.4206    1.0000

84.4328   43.5334    1.0000

這個樣例。 x1 x2 可以看能成績,值都分部在0到100之間,所以不到做歸一化處理。y可以看能通過(y == 1)與未通過(y ==0)。

他們存在data1.txt中。首先我們先匯入到matlab

data = load('data1.txt');

x = data(:, [1, 2]); y = data(:, 3);

因為有100個示例,兩個feature 所以 x 是100*2的矩陣,y是100*1的矩陣

接著我們先生成圖看看這些示例。

% find indices of positive and negative examples

pos = find(y==1); neg = find(y == 0);

% plot examples

plot(x(pos, 1), x(pos, 2), 'k+','linewidth', 2, ...

'markersize', 7);

plot(x(neg, 1), x(neg, 2), 'ko', 'marke***cecolor', 'y', ...

'markersize', 7);

hold on;

% labels and legend

xlabel('exam 1 score')

ylabel('exam 2 score')

% specified in plot order

legend('admitted', 'not admitted')

hold off;

圖大概是這樣的。 

接下來便要計算cost function 與theta

function g = sigmoid(z)

g = zeros(size(z));

g = 1 ./ (1+exp(-z));

end
[m, n] = size(x);

x = [ones(m, 1) x];

initial_theta = zeros(n + 1, 1);

function [j, grad] = costfunction(theta, x, y)
m = length(y); 

j = 0;

grad = zeros(size(theta));

j = -1/m * (y' * log(sigmoid(x * theta)) + (1-y)' * log(1-sigmoid(x * theta))) ;

grad = 1/m * x' * (sigmoid(x * theta) - y);

end
options = optimset('gradobj', 'on', 'maxiter', 400);

% run fminunc to obtain the optimal theta

% this function will return theta and the cost

[theta, cost] = ...

fminunc(@(t)(costfunction(t, x, y)), initial_theta, options);

機器學習之 邏輯回歸

邏輯回歸又稱logistic回歸,邏輯斯諦回歸,是一種廣義的線性回歸分析模型。sigmoid函式也是神經網路中常用的函式,用於把x從負無窮到正無窮壓縮到y從0到1之間。畫出來就是一條s型曲線,如下圖中的藍色曲線 它以0點為中心對稱,公式如下 當x值接近負無窮時,分母很大,s x 接近0,當x接近正無...

機器學習之邏輯回歸

邏輯回歸 logistic regression 最初是為了解決二分類問題。對於線性模型要想進行如二分類任務,最簡單的辦法就是通過階躍函式 unit step function 即將線性模型的輸出值套上乙個函式進行分割,大於z的判定為0,小於z的判定為1。如下圖左所示 但這有個問題是,分段函式不連續...

機器學習之邏輯回歸

知識點 邏輯回歸 只能解決二分類問題 損失函式 1 均方誤差 不存在多個區域性最低點 只有乙個最小值 2 對數似然損失 存在多個區域性最小值 改善方法 1 多次隨機初始化,多次比較最小值結果 2 調整學習率 邏輯回歸缺點 不好處理多分類問題 生成模型 有先驗概率 邏輯回歸,隱馬爾科夫模型 判別模型 ...