图解机器学习第十五章在线学习——被动攻击分类
【代码】图解机器学习第十五章在线学习——被动攻击分类。
·
n = 200;
x=[randn(1,n/2)-5 randn(1,n/2)+5; 5*randn(1,n)]';
y=[ones(n/2,1);-ones(n/2,1)];
x(:,3)=1;
p=randperm(n);
x=x(p,:);
y=y(p);
t=zeros(3,1);
l=1;
for i=1:length(x)
xi=x(i,:)';
yi=y(i);
t=t+yi*max(0,1-t'*xi*yi)/(xi'*xi+l)*xi;
end
figure(1);
clf;
hold on;
axis([-10 10 -10 10]);
plot(x(y==1,1),x(y==1,2),'bo');
plot(x(y==-1,1),x(y==-1,2),'rx');
plot([-10 10],-(t(3)+[-10 10]*t(1))/t(2),'k-');
这段代码实现了一个简单的线性支持向量机(Linear Support Vector Machine)模型,用于二分类任务。
让我们逐行解释代码的功能:
n = 200; - 设置样本数量为200。
x=[randn(1,n/2)-5 randn(1,n/2)+5; 5*randn(1,n)]'; - 生成一个包含两个正态分布的二维数据集。前n/2个样本属于类别1,后n/2个样本属于类别-1。
y=[ones(n/2,1);-ones(n/2,1)]; - 创建与数据集对应的标签,将前n/2个样本标记为1,后n/2个样本标记为-1。
x(:,3)=1; - 向数据集x中添加一列全为1的偏置项,用于线性模型中的截距。
p=randperm(n); - 生成一个1到n的随机排列,用于对数据集进行随机重排。
x=x(p,:); - 根据随机排列重新排列数据集x的行。
y=y(p); - 根据随机排列重新排列标签y的顺序,保持与数据集一致。
t=zeros(3,1); - 初始化参数向量t,包括斜率和截距。
l=1; - 设置正则化参数l的值。
for i=1:length(x) - 开始迭代处理每个样本。
xi=x(i,:)'; - 获取当前样本的特征向量。
yi=y(i); - 获取当前样本的标签。
t=t+yi*max(0,1-t'*xi*yi)/(xi'*xi+l)*xi; - 根据样本的特征向量和标签更新参数向量t。这是线性支持向量机中的参数更新规则。
figure(1); - 创建一个新的图形窗口。
clf; - 清除当前图形窗口中的内容。
hold on; - 在图形窗口中保持绘图。
axis([-10 10 -10 10]); - 设置坐标轴范围。
plot(x(y==1,1),x(y==1,2),'bo'); - 绘制类别为1的样本点,用蓝色圆点表示。
plot(x(y==-1,1),x(y==-1,2),'rx'); - 绘制类别为-1的样本点,用红色叉号表示。
plot([-10 10],-(t(3)+[-10 10]*t(1))/t(2),'k-'); - 绘制分离超平面,用黑色实线表示。这个超平面由参数向量t定义,其方程为 t(1)*x + t(2)*y + t
更多推荐
已为社区贡献2条内容
所有评论(0)