斯坦福機器學習3之Logistic建模

2021-07-09 04:52:58 字數 3896 閱讀 9427

一:模型引入

對於分類問題,最終**值是離散的,線性回歸不能很好地對這類問題進行建模。logistic模型是對於y∈分類問題的可靠模型,其可靠性在glm理論中得到驗證和說明。

二:模型說明

1)該模型不是直接對變數x對應的類別號進行**,而是對其屬於類別1的概率進行**。顯然,如果這個概率大於0.5,我們則可以認為x屬於類別1,否則屬於類別0。

2)模型引數的求解方法是,從概率的角度出發,尋找引數θ使得概率p(y ⃗|x;θ)最大,其中[x( y) ⃗]是訓練樣本,即使得訓練樣本的**類別剛好是其實際類別的概率最大,即所謂的極大似然性。最後基於梯度上公升法求解極大似然性

三:演算法步驟

遍歷樣本,在每個樣本處重複下述步驟直到演算法收斂:

1:沿梯度上公升方向更新引數theta

2:計算此引數下的評價函式jtheta

3: 判斷此樣本處演算法是否收斂。若是,停止迭代;否則,遍歷下乙個樣本

四:matlab實現**

1、演算法實現核心函式

% function: 使用隨機梯度上公升法基於極大似然性求解logistic回歸模型 

% create time:2015/12/27

% parameter:

% tx--訓練樣本輸入

% ty--訓練樣本輸出

% x --輸入變數

% t --步長

% steps:

%遍歷樣本,在每個樣本處重複下述步驟直到演算法收斂

% 1:沿梯度上公升方向更新引數theta

% 2:計算此引數下的評價函式jtheta

% 3: 判斷此樣本處演算法是否收斂。若是,停止迭代;否則,遍歷下乙個樣本

function

[ y mytheta ] = logisticr

( tx,ty,x,t )

%untitled 此處顯示有關此函式的摘要

% 此處顯示詳細說明

%% 一:準備工作

m = size(tx,1);

n = size(tx,2);

tx_0 = ones(m,1);

tx = [tx_0 tx];

theta = zeros(n+1,1);

jtheta = 0;

%% 二:logistic 回歸建模

fori = 1:1:m %遍歷樣本

% 1:沿梯度上公升方向更新此樣本處引數theta

oldtheta = theta;

forj = 1:1:n+1

theta(j)=theta(j)+t*(ty(i)-logisticr_h(tx(i,:),oldtheta)*tx(i,j));

end% 2:計算此樣本在該引數下的評價函式jtheta

oldjtheta = jtheta;

jtheta = logisticr_j(tx,ty,theta);

% 3: 判斷此樣本處演算法是否收斂。若是,停止迭代;否則,遍歷下乙個樣本

ifabs((jtheta - oldjtheta)/oldjtheta)<0.001

ibreak;

endend%% 三:logistic **

if nargout == 1

y =logisticr_h(theta,[1 x]);

endif nargout == 2

y =logisticr_h(theta,[1 x]);

mytheta =theta;

endend

2、演算法實現相關函式

function

y = logisticr_h

(x,theta)

% 此處x與theta均是n+1向量,所以**時注意對輸入變數新增值為1的首個特徵

y = (1+exp(-1*dot(x,theta)))^-1;

end

function

j = logisticr_j

(tx,ty,theta)

j=0;

fori = 1:1:size(tx,1)

j = j +(logisticr_h(tx(i,:),theta)-ty(i))^2/2;

endend

3、演算法測試函式

% function: 測試使用隨機梯度上公升法基於極大似然性求解logistic回歸模型[ y logisticr_theta ] = logisticr( tx,ty,x,t )

% create time:2015/12/27

% % parameter:

clc;

clear all;

close all;

% 1 構造樣本矩陣和引數矩陣框架

m = 50;

n = 1;

x = zeros(m,n);

y = zeros(m,1);

theta = [0.3

0.5];%實際模型引數

% 2 完成樣本矩陣和引數矩陣構建

fori=1:1:m

x1 = randi([-20

20],1,1);%r = randi([imin,imax],m,n)

%x1 = 10*randn(1);

x(i,:) = x1;

y(i)=logisticr_h([1 x1],theta)+0.01*randn(1,1);

end% 3 基於訓練樣本構建時選擇的具體模型求取x的實際值

x = 3;

real_x = logisticr_h([1 x ],theta)

% 4 建模並**x

t = 0.1;

[predict_x,h_theta]=logisticr(x,y,t,x);

% 4 作圖反映建模結果

% 4_1 描述訓練樣本

c = sortrows([x,y]);%排序以方便後續繪圖

figure; hold on;

plot(c(:,1),c(:,2),'rx','linewidth',5);

% 4_2 使用線性回歸模型**各個樣本

pm = size(c,1);%**變數的個數

pc = zeros(pm,1);%儲存各個變數的**值

for ip = 1:1:pm

pc(ip) = lanormalequations(x,y,c(ip,1));

endplot(c(:,1),pc,'g','linewidth',5);

% 4_3 使用logistic回歸模型**各個樣本,並對模型波形引數進行**

pix = zeros(pm,1);

for ix = 1:1:pm;%第二層對樣本中的每乙個輸入變數進行**

x = c(ix,1);

pix(ix)=logisticr(x,y,x,t);

endplot(c(:,1),pix,'b','linewidth',5 );

legend('訓練樣本','線性模型','logistic模型');

五:實驗現象實驗結果如下圖,logistic回歸建模時注意梯度上公升的步長t的選取。

ps:構造訓練樣本時,也可以這樣對y進行取值

if x1>10

y(i)=1;

else

y(i)=0;

end

斯坦福機器學習筆記五

有時候發現訓練出來的模型誤差很大,會有很多解決辦法。例如 增加更多的訓練樣本,減少特徵數目,增加特徵數目,增加多項式特徵,減小或增大正則化引數 的值 但是這些嘗試往往會浪費很多時間,所有這裡提出了一種機器學習診斷法。1 資料的分配 將資料分為三部分,訓練集 60 交叉驗證集 20 和測試集 20 利...

斯坦福機器學習筆記十

這裡以電影推薦的栗子來說明什麼是推薦系統。nu 代表使用者的數量 nm 代表電影的數量 r i,j 如果使用者給電影評過分,則r i,j 1 y ij 代表使用者i給電影j的評分 mj 代表使用者j評過分的電影總數 j 代表使用者j的引數向量 x i 代表電影i的特徵向量 如圖所示,推薦系統能夠幫我...

斯坦福機器學習筆記十二

由於大規模資料集求最優解,計算量非常大,對於這樣的問題,如果能夠將資料集分配給多台計算機,讓每台計算機處理資料集的乙個子集,然後將計算結果彙總再求和,這樣的方法叫做對映簡化。如果任何學習演算法能夠表達為,對訓練集的函式求和,那麼就能將這個任務分配給多台 計算機 或者同一臺計算機的不同cpu核心 以達...