我正在尝试保存Accord.Net K-Means的聚类结果,这样我每次运行程序时都不必重新计算。
我还想为每个群集分配永久的人类可读标签。如果我每次必须计算集群,这是不可能的。
答案 0 :(得分:2)
在Accord.NET中,可以使用标准的.NET二进制序列化保存每个对象。这意味着您可以使用以下方式保存K-Means:
"modules/**/*.{jpg,jpeg,png}"
并使用以下方法加载:
KMeans kmeans = ...
using (FileStream fs = new FileStream(path, FileMode.Create))
{
new BinaryFormatter().Serialize(fs, kmeans);
}
希望它有所帮助!
答案 1 :(得分:2)
Accord.Net有一个序列化类。在包Accord.IO
中,存在类Serializer
。您可以像
KMeans means;
Accord.IO.Serializer.Save(means, filename);
或
means = Accord.IO.Serializer.Load<KMeans>(filename);
答案 2 :(得分:1)
好的在Accord.Net上乱搞并做了一些研究后,我想出了如何保存群集,所以我要在这里添加解决方案以防其他人遇到同样的问题。
基本上你要做的就是保存Cluster Centroids,然后在运行Compute之前使用它们来下次初始化KMeans:
// Saving the Centroids
int[] clusterIds = kmeans.Compute(observations);
double[][] centroids = kmeans.Clusters.Centroids;
...
// Initializing with Centroids
kmeans = new KMeans(numOfClusters);
kmeans.Clusters.Centroids = centroids;
int[] clusterIds = kmeans.Compute(observations);