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

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





看个例子明白点:


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


下面是主要代码:

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



最后得到的结果.



可以拓展成三维四维的情况,不过四维以后就不是那么好直观看了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值