您的位置:首页 > 其它

利用机器学习进行分类(梯度算法)

2013-03-29 17:29 197 查看


到这里,公式就推导完毕了。

看个例子明白点:



希望可以将带星号和带加号区分开来

下面是主要代码:

function [th,ll] = plotdots(x,y,z)
% rows of X are training samples
% rows of Y are corresponding 0/1 values
hold on;

%% 画原始点的图
for i = 1:size(x,1)
if(z(i)==0)
plot(x(i),y(i),'*');
elseif (z(i)==1)
plot(x(i),y(i),'+');
end
end

xy = [x,y];
[th,ll] = logistic_grad_ascent(xy,z);
t = x;
X = [ones(size(xy,1),1), x];
thx = th(1:2);
thy = -th(3);
y1 = X*thx./thy;
plot(t,y1,'r-');
end


logistic_grad_ascent函数:

这个函数的for循环就是上面推导公式的应用,也就是算法的核心:

(1)hx的得到sigmoid的值,就是公式(1),

(2)theta是不断迭代siyata(不想贴图片了,囧),就是公式(8)

(3)ll(k)就是公式(5)

function [theta, ll] = logistic_grad_ascent(X,y)

% rows of X are training samples
% rows of Y are corresponding 0/1 values
% output ll: vector of log-likelihood values at each iteration
% ouptut theta: parameters
alpha = 0.01;  %步长
[m,n] = size(X);
max_iters = 50000;   %迭代次数
X = [ones(size(X,1),1), X]; % append col of ones for intercept term
theta = zeros(n+1, 1);  % initialize theta

for k = 1:max_iters
hx = sigmoid(X*theta);
theta = theta + alpha * X' * (y-hx);
ll(k) = sum( y .* log(hx) + (1 - y) .* log(1 - hx) );
end


最后得到的结果.



可以拓展成三维四维的情况,不过四维以后就不是那么好直观看了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: