4

「クラス」を表す 4 つのバイナリ ベクトルがあるとします。

[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]

浮動小数点値のベクトルをこれらの「クラス」の 1 つに分類するために使用できる方法は何ですか?

ほとんどの場合、基本的な丸めは機能します。

round([0.8,0,0,0,0.3,0,0.1,0,0,0]) = [1 0 0 0 0 0 0 0 0 0] 

しかし、どうすれば干渉を処理できますか?

round([0.8,0,0,0,0.6,0,0.1,0,0,0]) != [1 0 0 0 0 1 0 0 0 0]

この 2 番目のケースは 1000000000 に適しているはずですが、明確な一致がないため、ソリューションを完全に失ってしまいました。

このタスクに MATLAB を使用したいと考えています。

4

3 に答える 3

5

各「クラス」でテスト ベクトルのSSD (差の二乗和)を見つけ、 SSD が最も少ないものを使用します。

コードは次のとおり0です。提供されたテスト ベクトルの末尾に a を追加しました。これは、クラスが 10 桁であるのに対し、9 桁しかないためです。

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,:))

説明のために、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

また、各クラスの TEST からの距離は次のようになりclass_diffます。

 0.41
 2.01
 7.61
 2.01

そして明らかに、最初のものは違いが最も少ないため、最良の一致です。

于 2009-10-16T04:59:00.623 に答える
2

これはジェイコブが行ったのと同じことですが、距離の尺度が4 つ異なるだけです。


%%
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];

%%
% sqrt( sum((x-y).^2) )
euclidean = sqrt( sum(bsxfun(@minus,CLASSES,TEST).^2, 2) );

% sum( |x-y| )
cityblock = sum(abs(bsxfun(@minus,CLASSES,TEST)), 2);

% 1 - dot(x,y)/(sqrt(dot(x,x))*sqrt(dot(y,y)))
cosine = 1 - ( CLASSES*TEST' ./ (norm(TEST)*sqrt(sum(CLASSES.^2,2))) );

% max( |x-y| )
chebychev = max( abs(bsxfun(@minus,CLASSES,TEST)), [], 2 );

dist = [euclidean cityblock cosine chebychev];

%%
[minDist classIdx] = min(dist);

好きなものを選んでください:)

于 2009-10-16T06:16:29.663 に答える
1

単純なユークリッド距離アルゴリズムで十分です。ポイントまでの距離が最小のクラスが候補になります。

http://en.wikipedia.org/wiki/Euclidean_distance

于 2009-10-16T04:57:34.480 に答える