public static List <KMeansModel> ReadAllModels() { List <KMeansModel> models = new List <KMeansModel>(); if (!Directory.Exists(ModelsDirectoryPath)) { return(models); } List <string> paths = Directory.GetFiles(ModelsDirectoryPath).ToList(); paths.Sort(); Console.WriteLine(); Console.WriteLine("Read models order:"); paths.ForEach(Console.WriteLine); foreach (string path in paths) { try { KMeansModel model = ReadKMeansModel(path); models.Add(model); } catch (JsonReaderException) { Console.WriteLine($"An error occured while reading json at path {path}"); } } return(models); }
/** * <summary> Training algorithm for K-Means classifier. K-Means finds the mean of each class for training.</summary> * * <param name="trainSet"> Training data given to the algorithm.</param> * <param name="parameters">distanceMetric: distance metric used to calculate the distance between two instances.</param> */ public override void Train(InstanceList.InstanceList trainSet, Parameter.Parameter parameters) { var priorDistribution = trainSet.ClassDistribution(); var classMeans = new InstanceList.InstanceList(); var classLists = trainSet.DivideIntoClasses(); for (var i = 0; i < classLists.Size(); i++) { classMeans.Add(classLists.Get(i).Average()); } model = new KMeansModel(priorDistribution, classMeans, ((KMeansParameter)parameters).GetDistanceMetric()); }
public static void SaveKMeansModel(KMeansModel model, DateTime dateTime, int order) { if (!Directory.Exists(ModelsDirectoryPath)) { Directory.CreateDirectory(ModelsDirectoryPath); } int clustersCount = model.Centroids.Count; string date = GetFormattedDate(dateTime); string fileName = $"(model_k_means)(ord_{order})(k_{clustersCount})(date_{date}).json"; string filePath = $"{ModelsDirectoryPath}/{fileName}"; SaveObject(filePath, model); }