一:模型引入
對於分類問題,最終**值是離散的,線性回歸不能很好地對這類問題進行建模。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核心 以達...