2015-09-23 39 views

回答

2

在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; 
}  

希望它能幫助!

+0

此外,該框架致力於彌補以前班跨版本。如果升級到更新版本後,您會發現序列化對象停止工作,則可以填寫錯誤報告! – Cesar

+0

嘿,這正是我想要做的,謝謝! – dubezOniner

+0

其實我試圖序列化一個RandomForest和一個編碼對象,它們都不是可序列化的。已經提交了一個錯誤報告。 – Molecool

1

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

Accord.Net有一個序列化類。在包Accord.IO中存在類Serializer。您可以使用它像

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

means = Accord.IO.Serializer.Load<KMeans>(filename); 
相關問題