向量的尽力分类算法

Bla*_*air 4 matlab classification machine-learning

给出四个代表"类"的二进制向量:

[1,0,0,0,0,0,0,0,0,0]
[0,0,0,0,0,0,0,0,0,1]
[0,1,1,1,1,1,1,1,1,0]
[0,1,0,0,0,0,0,0,0,0]
Run Code Online (Sandbox Code Playgroud)

有哪些方法可用于将浮点值向量分类为这些"类"之一?

在大多数情况下,基本舍入工作:

round([0.8,0,0,0,0.3,0,0.1,0,0,0]) = [1 0 0 0 0 0 0 0 0 0] 
Run Code Online (Sandbox Code Playgroud)

但是我怎么能处理一些干扰呢?

round([0.8,0,0,0,0.6,0,0.1,0,0,0]) != [1 0 0 0 0 1 0 0 0 0]
Run Code Online (Sandbox Code Playgroud)

第二种情况应该是1000000000的更好匹配,但相反,我完全失去了解决方案,因为没有明确的匹配.

我想用MATLAB来完成这项任务.

Jac*_*cob 5

找到每个"类"的测试向量的SSD(平方差的总和),并使用SSD最少的那个.

这里有一些代码:我0在你提供的测试向量的末尾添加了一个,因为它只有9位,而类有10位.

CLASSES = [1,0,0,0,0,0,0,0,0,0
           0,0,0,0,0,0,0,0,0,1
           0,1,1,1,1,1,1,1,1,0
           0,1,0,0,0,0,0,0,0,0];

TEST = [0.8,0,0,0,0.6,0,0.1,0,0,0];

% Find the difference between the TEST vector and each row in CLASSES
difference = bsxfun(@minus,CLASSES,TEST);
% Class differences
class_diff = sum(difference.^2,2);
% Store the row index of the vector with the minimum difference from TEST
[val CLASS_ID] = min(class_diff);
% Display
disp(CLASSES(CLASS_ID,:))
Run Code Online (Sandbox Code Playgroud)

出于说明目的,difference看起来像这样:

 0.2    0   0   0   -0.6    0   -0.1    0   0   0
-0.8    0   0   0   -0.6    0   -0.1    0   0   1
-0.8    1   1   1    0.4    1    0.9    1   1   0
-0.8    1   0   0   -0.6    0   -0.1    0   0   0
Run Code Online (Sandbox Code Playgroud)

每个类与TEST的距离如下所示class_diff:

 0.41
 2.01
 7.61
 2.01
Run Code Online (Sandbox Code Playgroud)

显然,第一个是最佳匹配,因为它具有最小的差异.