如何保存 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);
我正在尝试保存 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);