YALMIP学习(三)线性规划

在这个例子中,我们得到了两组数据,称为蓝色和绿色。我们的目标是使用线性分类器分离这些集合。

blues = randn(2,25);
greens = randn(2,25)+2;

显示两个数据聚类。

plot(greens(1,:),greens(2,:),'g*')
hold on
plot(blues(1,:),blues(2,:),'b*')

线性分类器意味着我们要找到一个向量a一个一个和标量b这样一个(a^T)*x+b≥0 对于所有绿点,以及一个(a^T)*x+b≤0对于所有蓝点(分离的超平面)。通过查看数据,应该很清楚这是不可能的。然后,人们想做的是找到一个超平面,它错误地分类了尽可能少的点。这通常是一个非常困难的组合问题,因此我们将使用近似值。

作为错误分类的代理,我们引入正数uv并将分类更改为一个(a^T)*x+b≥1−u和一个

(a^T)*x+b≤−(1−v).如果两者兼而有之uv都小了,就要得到很好的分离。

我们定义感兴趣的决策变量

a = sdpvar(2,1);
b = sdpvar(1);

我们将使用一个uv每个点都是变量,因此我们创建了两个合适长度的向量。下面很明显,为什么我们将它们定义为行向量。

u = sdpvar(1,25);
v = sdpvar(1,25);

通过利用 MATLAB 和 YALMIP 添加标量和向量的能力,可以轻松定义分类约束

Constraints = [a'*greens+b >= 1-u, a'*blues+b <= -(1-v), u >= 0, v >= 0]

我们想要uv从某种意义上说,要小,因为这表明一个好的分类。一个简单的选择是最小化所有元素的总和uv.然而,这个问题在这种形式下是有条件的,所以我们添加了约束,即所有元素的绝对值一个一个小于1

Objective = sum(u)+sum(v)
Constraints = [Constraints, -1 <= a <= 1];

绝对值是凸的和 LP 可表示的,所以我们也可以使用内置的命令 abs,但在这里我们尽可能基本地构建 LP。

终于,我们准备解决问题了

optimize(Constraints,Objective)

最优值ab是使用获得的。为了更好地说明结果,我们使用YALMIPs功能绘制约束集以延迟显示分离超平面。

x = sdpvar(2,1);
P1 = [-5<=x<=5, value(a)'*x+value(b)>=0];
P2 = [-5<=x<=5, value(a)'*x+value(b)<=0];
clf
plot(P1);hold on
plot(P2);
plot(greens(1,:),greens(2,:),'g*')
plot(blues(1,:),blues(2,:),'b*')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值