如何保存 Accord.Net K-Means 的聚类结果以供重复使用?

How do I save the clustering results of Accord.Net K-Means for reuse?

我正在尝试保存 Accord.Net K-Means 的聚类结果,这样我就不必每次 运行 我的程序都重新计算。

我还想为每个集群分配永久的人类可读标签。如果我每次都必须计算集群,这是不可能的。

好的,在 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);

在 Accord.NET 中,每个对象都可以使用标准的 .NET 二进制序列化来保存。这意味着您可以使用以下方式保存 K-Means:

KMeans kmeans = ...

using (FileStream fs = new FileStream(path, FileMode.Create))
{
    new BinaryFormatter().Serialize(fs, kmeans);
}    

并使用以下方式加载它:

KMeans kmeans = null;

using (FileStream fs = new FileStream(path, FileMode.Open))
{
    kmeans = new BinaryFormatter().Deserialize(fs) as KMeans;
}    

希望对您有所帮助!

Accord.Net 有序列化 class。在包 Accord.IO 中存在 class Serializer。你可以像

一样使用它
KMeans means;
Accord.IO.Serializer.Save(means, filename);

means = Accord.IO.Serializer.Load<KMeans>(filename);