From 314f4756103c28d362d10946aa820a78d216e007 Mon Sep 17 00:00:00 2001 From: sth4nth Date: Wed, 30 Jan 2019 14:17:00 +0800 Subject: [PATCH] tweak logistic regression --- chapter04/logitBin.m | 15 +++++++-------- chapter09/kmeansRnd.m | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/chapter04/logitBin.m b/chapter04/logitBin.m index 80584a9..aa3eed7 100644 --- a/chapter04/logitBin.m +++ b/chapter04/logitBin.m @@ -1,16 +1,16 @@ -function [model, llh] = logitBin(X, y, lambda, eta) +function [model, llh] = logitBin(X, y, lambda) % Logistic regression for binary classification optimized by Newton-Raphson method. % Input: % X: d x n data matrix -% z: 1 x n label (0/1) +% y: 1 x n label (0/1) % lambda: regularization parameter -% eta: step size +% alpha: step size % Output: % model: trained model structure % llh: loglikelihood % Written by Mo Chen (sth4nth@gmail.com). if nargin < 4 - eta = 1e-1; + alpha = 1e-1; end if nargin < 3 lambda = 1e-4; @@ -20,18 +20,17 @@ tol = 1e-4; epoch = 200; llh = -inf(1,epoch); -h = 2*y-1; w = rand(d,1); for t = 2:epoch a = w'*X; - llh(t) = -(sum(log1pexp(-h.*a))+0.5*lambda*dot(w,w))/n; % 4.89 - if llh(t)-llh(t-1) < tol; break; end + llh(t) = (dot(a,y)-sum(log1pexp(a))-0.5*lambda*dot(w,w))/n; % 4.90 + if abs(llh(t)-llh(t-1)) < tol; break; end z = sigmoid(a); % 4.87 g = X*(z-y)'+lambda*w; % 4.96 r = z.*(1-z); % 4.98 Xw = bsxfun(@times, X, sqrt(r)); H = Xw*Xw'+lambda*eye(d); % 4.97 - w = w-eta*(H\g); + w = w-alpha*(H\g); % 4.92 end llh = llh(2:t); model.w = w; diff --git a/chapter09/kmeansRnd.m b/chapter09/kmeansRnd.m index d48013f..b02f98f 100644 --- a/chapter09/kmeansRnd.m +++ b/chapter09/kmeansRnd.m @@ -10,7 +10,7 @@ % mu: d x k centers of clusters % Written by Mo Chen (sth4nth@gmail.com). alpha = 1; -beta = nthroot(k,d); % in volume x^d there is k points: x^d=k +beta = nthroot(k,d); % k points in volume x^d : x^d=k X = randn(d,n); w = dirichletRnd(alpha,ones(1,k)/k);