public void CalculateCentroidsAndSigmoids(List <Tuple <double[], double> > data) { var hiddenLayer = hiddenRadialBasisFunctionLayer; List <double[]> centroidData = new List <double[]>(); foreach (var item in data) { centroidData.Add(item.Item1); } kMeansClustering kmeansClustering = new kMeansClustering(centroidData); var clusters = kmeansClustering.ClusterWithCentroid(hiddenLayer.Neurons); for (int i = 0; i < hiddenLayer.Neurons; i++) { foreach (var cluster in clusters[i]) { hiddenLayer.Cetroids[i] = cluster.Item3; var values = cluster.Item2; var pNearestNeighbors = FindMinimal(centroidData, cluster.Item3, hiddenLayer.P); var sigmasumme = 0.0; foreach (var item in pNearestNeighbors) { sigmasumme += CalculateEuclidDistance(item.Item2, cluster.Item3); } var sigma = 0.0; sigma = Math.Sqrt(1.0 / hiddenLayer.P * sigmasumme); hiddenLayer.Sigmoids[i] = sigma; } } }
public void kMeansTest() { List <double[]> centroidData = new List <double[]>(); foreach (var item in Enumerable.Range(0, 2)) { foreach (var innerItem in Enumerable.Range(0, 2)) { centroidData.Add(new double[] { item, innerItem }); } } kMeansClustering kmeansClustering = new kMeansClustering(centroidData); var clusters = kmeansClustering.Cluster(2); //var centroids = kmeansClustering.centroids; //var clusters = kmeansClustering.ClusterWithCentroid(4); }
public void kMeansIrisTest() { DataSetLoader dataSetLoader = new DataSetLoader(); Console.WriteLine(" Reading DataSet.. "); var irises = dataSetLoader.SelectClusteringIrises(); kMeansClustering kmeansClustering = new kMeansClustering(irises, new MaximumMetric()); var clusters = kmeansClustering.Cluster(3); var clusterCounter = 0; Dictionary <int, int> clusterDictonary = new Dictionary <int, int>(); foreach (var cluster in clusters) { Debug.WriteLine(string.Format("Cluster {0} - Count {1}", clusterCounter, cluster.Count)); clusterDictonary.Add(clusterCounter, 0); clusterCounter++; } var irisesTest = dataSetLoader.SelectClusteringIrises(); var trueCounter = 0; var counter = 0; foreach (var item in irisesTest) { var outputValue = kmeansClustering.CalculateClusterAffinity(item); Debug.WriteLine(string.Format("Value {0} - Predicted {1}", item, outputValue)); clusterDictonary[outputValue]++; counter++; trueCounter++; } clusterCounter = 0; foreach (var cluster in clusters) { var calculatedCluster = clusterDictonary[clusterCounter]; Debug.WriteLine(string.Format("Cluster {0} - Original Count {1} - Calculated Count {2}", clusterCounter, cluster.Count, calculatedCluster)); clusterCounter++; } //var centroids = kmeansClustering.centroids; //var clusters = kmeansClustering.ClusterWithCentroid(4); }