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来完成这项任务.
找到每个"类"的测试向量的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)
显然,第一个是最佳匹配,因为它具有最小的差异.