让我们直接从代码开始,下面开始分布讲解
【注】想要mnist请回复博主
% z=+1,-1;
% result=-0.3;负类 -1 分对了 +1 分错了 y*result>0
% =0.4;正类 +1 分对了 -1 分错了
% z*(w'*x)=z*w'*x=w'*z*x=w'*y
%w1*x1+w2*x2+w3=0;
%w'*x+b=0;
%w'x=0;
% (x1,x2,1)
% (w1,w2,w3)
data=randn(2,40);
data(:,21:40)=data(:,21:40)+5;
scatter(data(1,1:20),data(2,1:20),'*');
hold on;
scatter(data(1,21:40),data(2,21:40),'+');
hold on;
w=randn(3,1);
data(3,:)=ones(1,40);
z=ones(1,40);
z(21:40)=-1;
for i=1:40
data(:,i)=data(:,i).*z(i);
end
for i=1:40
result1(:,i)=w'*data(:,i);
end
for s=1:1000
for i=1:40
result1(:,i)=w'*data(:,i);
end
dydx=zeros(3,1);
for i=1:40
if(result1(:,i)<=0)
dydx=dydx+data(:,i);
end
end
dydx=-1.*dydx;
amda=1;
w=w-amda.*dydx;
end
%x2=-(w1*x1+w3)/w2;
%w1=randn(1,1);
%w2=randn(1,1);
%w3=randn(1,1);
%w(1)*x(1)+w(2)*x(2)+b=0
%w'x+b=0;
w=randn(2,1);
b=randn(1,1);
%w=randn(784,1);
b=randn(10,1);
w=randn(784,10);
for i=1:60000
results(:,i)=w'.*trdata(:,i)+b;
end
[maxv,indexv]=max(results);
%w1*x1+w2*x2+...+w784*x784+w785=0;
%data(1,1)*w1+data(2,1)*w2+w3
for i=1:40
result(i)=w'*data(:,i)+b;
end
%x2=-(w1*x1+w3)/w2;
x1=[-4,8];
x2=-1.*(w(1).*x1+w(3))./w(2);
plot(x1,x2);
%data(2,1)
for i=21:40
scatter(data(1,i),data(2,i),'+');
hold on;
end
首先我们先画出一幅散点图,这样我们好进行下面的分类
有了散点图之后,我们再自己画线
w1 w2 w3是三个线性系数,这里不再赘述
这里,我们换成向量的形式,784=28*28
上述的向量都是是列向量
接下来我们考虑,如果要分类类型多的时候,盲区存在,改怎么处理
解决方法就是,max胜出原则,代入后,更大的胜出
考虑784是个超平面,不好画出、描绘出来
升维
然后,没有b了
大于零分对了 小于零分错了
w和最小错分数是阶梯函数,这样不好优化,我们就松弛他
松弛后,更加平滑
由此我们考虑梯度下降法