プログラムの実行を非常に遅くしている多くのデータを分析しようとしています。.txt ファイルからセル配列にデータセットを読み込んでいます。2 つの属性の形式であるデータを分類するために、セル配列を使用しています。文字であるクラスが必要です。
最も近い平均分類器を使用して再代入誤差を見つけたい。データセットの各行 (数万) をループするメインの外部ループがあります。各行は、反復ごとに 1 つずつ順番に削除されます。2 つの属性の平均は、行が削除された各反復で再計算されます。主なハング ポイントは、データセットの各行について計算したい次のセクションのようです。
- その行のデータ (2 つの属性値) と各クラスの平均との間のユークリッド距離。
- 次に、属性の平均値が最も近いクラスを記録したいと思います。これが割り当てられたクラスになります。
- 最後に、この割り当てられたクラスが正しいクラスかどうかを確認したいと思います。
現在、このループは次のようになっています。
errorCount = 0;
for l = 1:20000
closest = 100;
class = 0;
attribute1 = d{2}(l);
attribute2 = d{3}(l);
for m = 1:numel(classes)
dist = sqrt((attribute1-meansattr1(m))*(attribute1-meansattr1(m)) + (attribute2-meansattr2(m))*(attribute2-meansattr2(m)));
if dist < closest
closest = dist;
class = m;
end
end
if strcmp(d{1}(l),classes(class))
%correct
else
errorCount = errorCount + 1;
end
end
d
はセル配列で、d{2}
はアトリビュート 1 の値を保持する列です。d{1}(1)
その列の最初の行でこれらの値にアクセスします。
classes
はデータセットからの一意のクラスであるため、クラスごとにユークリッド距離を計算します。
meansattr1
とmeansattr2
は、各属性の平均値を含む配列です。これらは、行が削除されると、外側のループの反復ごとに更新されます。
私が持っているコードを理解するのに役立つことを願っています。これらの計算を最適化し、高速化するための助けをいただければ幸いです。