matlab中的最小二乘线性分类器

Posted

技术标签:

【中文标题】matlab中的最小二乘线性分类器【英文标题】:Least squares linear classifier in matlab 【发布时间】:2014-04-24 20:12:19 【问题描述】:

我很难理解如何在 matlab 中为我的数据实现最小二乘线性分类器。我的数据有 N 行,每行 10 列宽。每行代表一个具有 10 个特征的数据点。只有两个类,我的测试数据的前 N/2 行是 1 类,其余的是 2 类。

所有关于最小二乘法的在线解释都是有道理的,但我无法将它们适应我的数据,我只需要一些与我的数据和最小二乘法相关的概念解释。

【问题讨论】:

或许你可以把这看作一个非线性优化问题,其中x是数据点,beta是线性系数,f(beta * x)是分类结果。当然,f() 是将 beta * x 映射到 0/1 或 -1/1 的非线性函数。错误将是 Y - f(beta, x),其中 Y 是真实标签。那么就可以使用 MATLAB 函数 lsqnonlin() 来解决这个问题。 【参考方案1】:

使用最小二乘法进行线性分类

使用最小二乘法创建线性分类器的思想是定义一个线性函数

f(x) = w<sup>T</sup>x
并调整w,使f(x) 接近1 为您的一类数据点和接近-1 另一类。 w 的调整是通过最小化每个数据点 f(x)1-1 之间的平方距离来完成的,具体取决于其类别。

二维 Matlab 示例

% Create a two-cluster data set with 100 points in each cluster
N = 100;
X1 = 0.3*bsxfun(@plus, randn(N, 2), [6 6]);
X2 = 0.6*bsxfun(@plus, randn(N, 2), [-2 -1]);

% Create a 200 by 3 data matrix similar to the one you have
% (see note below why 200 by 3 and not 200 by 2)
X = [[X1; X2] ones(2*N, 1)];

% Create 200 by 1 vector containing 1 for each point in the first cluster
% and -1 for each point in the second cluster
b = [ones(N, 1); -ones(N, 1)]

% Solve least squares problem
z = lsqlin(X, b);

% Plot data points and linear separator found above
y = -z(3)/z(2) - (z(1)/z(2))*x;
hold on;
plot(X(:, 1), X(:, 2), 'bx'); xlim([-3 3]); ylim([-3 3]);
plot(x, y, 'r');

注意数据矩阵中的额外列

我在数据矩阵中添加了额外的一列 为了允许分隔符的移动,从而使它有点 更通用。如果你不这样做,你强制分隔符通过 通过起源,这往往会导致更糟 分类结果。

【讨论】:

这是一个很好的解释!谢谢。 您能否解释一种方法来评估线性最小二乘分类器,并获得系数?我正在尝试解决二进制分类问题,当在测试数据上运行时,我得到的标签是真实值。如何将它们分类到我的二进制类?大多数结果标签都是正面的。谢谢。 @ggauravr 你用w^T x的符号对一个测试点x进行分类,即如果w^T x &gt; 0该点在第一类,否则如果w^T x &lt; 0在第二类. 谢谢,想通了。你的回答很有帮助。 @3lectrologos,额外的列对找到的线性分隔符有何影响?当我将额外的列值设置为 0 而不是 1 时,我得到了更好的解决方案。当额外列值的一半是 -1 而另一个是 0 时更是如此。

以上是关于matlab中的最小二乘线性分类器的主要内容,如果未能解决你的问题,请参考以下文章

cs231n笔记:线性分类器

cs231n笔记 线性分类器

深度学习—线性分类器理解

线性分类器与非线性分类器的区别是什么?有哪些优劣特性?

计算机视觉与深度学习线性分类器

机器学习基础笔记:最简单的线性分类器