我正在努力了解如何在matlab中为我的数据实现最小二乘线性分类器。我的数据有N行,每行有10列宽。每行代表一个具有10个要素的数据点。只有两个类,我的测试数据的前N/2行是第1类,其余的是第2类。
在线上有关最小二乘法的所有解释都是有道理的,但我无法使其适应我的数据,我只需要一些有关我的数据和最小二乘法的概念性解释。
最佳答案
使用最小二乘法进行线性分类
使用最小二乘法创建线性分类器的想法是定义一个线性函数
f(x) = wx
并调整w
,以便对于一个类别的数据点而言f(x)
接近1
,而对于另一类别的数据点而言-1
则接近w
。通过最小化每个数据点的f(x)
与1
或-1
之间的平方距离(取决于其类),可以对ojit_code进行调整。二维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');
注意数据矩阵中的额外列
我在数据矩阵中增加了一个一列
为了允许分离器移动,从而使它有点
更通用。如果不这样做,则强制分隔符通过
通过起源,这往往会导致更糟的情况
分类结果。
关于matlab - Matlab中的最小二乘线性分类器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22491359/