如何保存Accord的聚类结果?Net -重用的方法

本文关键字:结果 Net -重 方法 聚类 保存 Accord 何保存 | 更新日期: 2023-09-27 18:14:08

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

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

如何保存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;
}    

希望有帮助!

同意。Net有一个序列化类。在包Accord.IO中存在类Serializer。你可以用

KMeans means;
Accord.IO.Serializer.Save(means, filename);

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

在Accord里瞎折腾了一下。Net和做了一些研究,我想出了如何保存集群,所以我将在这里添加解决方案,以防其他人遇到同样的问题。

基本上你所要做的就是保存集群质心,然后在下次运行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);