我正在尝试分析大量数据,这些数据使我的程序运行缓慢。我正在将数据集从 .txt 文件读取到元胞数组。我正在使用一个单元格数组来对我的数据进行分类,它是两个属性的形式,我需要字符类。
我想使用最近的平均分类器找到重新替换错误。我有一个主要的外循环,它遍历我的数据集的每一行(数万行)。依次删除每一行,每次迭代一个。每次迭代都会重新计算两个属性的平均值,并删除线。主要的挂点似乎是我要为数据集中的每一行计算的下一部分:
- 那条线上的数据(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
是包含我的每个属性的平均值的数组。当删除一行时,这些在外部循环的每次迭代中都会更新。
希望这可以帮助您理解我拥有的代码。非常感谢在优化和加速这些计算方面的任何帮助。