图解机器学习第三部分第七章——最小二乘分类

n = 200;
a = linspace(0,4*pi,n/2); % 0 ~ 12.56 中均匀分布 100 个值
u = [a.*cos(a) (a+pi).*cos(a)]' +1*rand(n,1);
v = [a.*sin(a) (a+pi).*sin(a)]' +1*rand(n,1);
x=[u v];
y=[ones(1,n/2) -ones(1,n/2)]';

x2=sum(x.^2,2); % 每一行相加
hh=2*1^2; % 高斯核函数 带宽为 1。
l=0.01; % 正则化率为 0.01
k = exp(-(repmat(x2,1,n)+repmat(x2',n,1)-2*x*x')/hh); %高斯核模型
t=(k^2+l*eye(n))\(k*y); % 加入L2正则化约束条件

m=100;
X=linspace(-15,15,m)'; % 从-15 ~ 15 中找到 100 个均匀分布的点。
X2=X.^2;
U = exp(-(repmat(u.^2,1,m)+repmat(X2',n,1)-2*u*X')/hh);
V = exp(-(repmat(v.^2,1,m)+repmat(X2',n,1)-2*v*X')/hh);

figure(1);
clf;
hold on;
axis([-15 15 -15 15]);
contourf(X,X,sign(V'*(U.*repmat(t,1,m))));
plot(x(y==1,1),x(y==1,2),'bo');
plot(x(y==-1,1),x(y==-1,2),'rx');
colormap([1 0.7 1; 0.7 1 1]);



这段代码实现了一个支持向量机(Support Vector Machine,SVM)分类器,以下是对代码的解释:

n = 200 定义了样本点的数量。

a = linspace(0,4*pi,n/2) 生成一个从 04π 的范围内的等间隔的 100 个值的向量 a。

u 和 v 是通过对 a 进行一系列数学计算生成的。其中 u 是由两部分组成的向量,第一部分是 a.*cos(a),第二部分是 (a+pi).*cos(a)。同样,v 也是由两部分组成,分别是 a.*sin(a)(a+pi).*sin(a)。每个部分还添加了一些随机噪声。

x 是将 u 和 v 按列连接而成的矩阵,用于表示样本的特征向量。

y 是标签向量,其中前一半为 1,后一半为 -1,用于表示样本的类别。

x2 = sum(x.^2, 2) 对 x 的每一行进行平方并求和,得到一个向量。

hh = 2*1^2 定义了高斯核函数的带宽。

l = 0.01 是正则化率的值,用于控制模型的正则化程度。

k = exp(-(repmat(x2,1,n)+repmat(x2',n,1)-2*x*x')/hh) 是高斯核模型,通过计算样本之间的欧氏距离并应用高斯核函数。

t = (k^2+l*eye(n)) \ (k*y) 是对支持向量机模型进行训练的部分。其中,k^2 表示核矩阵的平方,l*eye(n) 表示正则化项的矩阵。使用线性方程求解方法(\)来计算参数向量 t。

m = 100 定义了测试点的数量。

X = linspace(-15,15,m)' 在范围 -1515 上生成了 100 个均匀分布的点的向量 X。

X2 = X.^2 对 X 的每个元素进行平方。

U 和 V 是根据训练数据点和测试数据点之间的距离计算的核矩阵。

可视化部分,通过 contourf 函数绘制分类边界,使用蓝色圆点和红色叉标记了训练数据点,并设置了颜色映射。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值