我正在嘗試保存Accord.Net K-Means的聚類結果,以便每次運行我的程序時都不必重新計算。如何保存Accord.Net K-Means的聚類結果以便重複使用?
我也想爲每個羣集分配永久的人類可讀標籤。這是不可能的,如果我必須每次計算羣集。
我正在嘗試保存Accord.Net K-Means的聚類結果,以便每次運行我的程序時都不必重新計算。如何保存Accord.Net K-Means的聚類結果以便重複使用?
我也想爲每個羣集分配永久的人類可讀標籤。這是不可能的,如果我必須每次計算羣集。
在Accord.NET,每個對象都可以使用標準的.NET二進制序列化進行保存。這意味着你可以使用保存K-方式:
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搞亂並做了一些研究後,我想出瞭如何保存集羣,所以我要在這裏添加解決方案以防其他人遇到相同的問題。
基本上所有你需要做的就是保存聚類中心,然後用它們在運行計算之前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有一個序列化類。在包Accord.IO
中存在類Serializer
。您可以使用它像
KMeans means;
Accord.IO.Serializer.Save(means, filename);
或
means = Accord.IO.Serializer.Load<KMeans>(filename);
此外,該框架致力於彌補以前班跨版本。如果升級到更新版本後,您會發現序列化對象停止工作,則可以填寫錯誤報告! – Cesar
嘿,這正是我想要做的,謝謝! – dubezOniner
其實我試圖序列化一個RandomForest和一個編碼對象,它們都不是可序列化的。已經提交了一個錯誤報告。 – Molecool