我很难理解如何在matlab中为我的数据实现最小二乘线性分类器。我的数据有N行,每行10列宽。每行代表一个具有10个特征的数据点。只有两个类,我的测试数据的前N / 2行是Class 1,其余的是Class 2.
网上关于最小二乘的所有解释都有意义,但我无法使它们适应我的数据,我只需要一些与我的数据和最小二乘法有关的概念性解释。
答案 0 :(得分:6)
使用最小二乘法创建线性分类器的想法是定义线性函数
f(x) = wTx
并调整w
以使f(x)
对于一个类的数据点接近1
,对于另一个类接近-1
。 w
的调整是通过最小化每个数据点f(x)
与1
或-1
之间的平方距离来完成的,具体取决于其类别。
% 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');
我在数据矩阵中添加了一列1 为了允许分离器的移动,从而使其稍微移动 更多才多艺。如果您不这样做,则强制分隔符通过 通过起源,往往会导致更糟糕的情况 分类结果。