public void ClusteringTest() { List <ClusteredData> datanew = new List <ClusteredData>(); EuclidianDistance distance = new EuclidianDistance(); K_Means k_means = new K_Means(2, 0.1, distance); ClusterAnalysis clusterAnalysis = new ClusterAnalysis(k_means); datanew.Add(new ClusteredData(0, 0)); datanew.Add(new ClusteredData(0, 20)); datanew.Add(new ClusteredData(20, 0)); datanew.Add(new ClusteredData(20, 20)); var list = clusterAnalysis.Clustering(datanew); Assert.AreEqual(2, list.Count); var flag = from value in k_means.FinishesCentroids.Values where (value.X == 0 && value.Y == 0) || (value.X == 0 && value.Y == 20) || (value.X == 20 && value.Y == 20) || (value.X == 20 && value.Y == 0) || (value.X == 10 && value.Y == 20) || (value.X == 0 && value.Y == 10) || (value.X == 20 && value.Y == 10) || (value.X == 0 && value.Y == 10) select value; Assert.AreEqual(0.1, k_means.CoefficientTaboo); Assert.AreEqual(2, k_means.CountOfClusters); Assert.IsNotNull(flag); }
static void Main(string[] args) { K_Means kmeans = new K_Means(2); kmeans.addDoc("平價牛排 淡水好店 吃吃喝喝 情侶約會 中價位 生日聚會 平價 節日聚會 家庭聚會 朋友聚會 吃到飽 異國料理 美式料理"); kmeans.addDoc("平價 板橋美食 食記 小吃 單點式 麻辣鴨血 重慶路 涼麵 麻辣 鴨血 情侶約會 吃吃喝喝 涼皮 小吃店"); kmeans.addDoc("客家美食 朋友聚會 客家菜 家庭聚會 苗栗 平價 預約 中價位 鶴山飯館 春酒 老店 單點式 免服務費 可包場 有包廂"); kmeans.addDoc("下午茶 平價 免服務費 朋友聚會 景觀咖啡 巷弄隱密 家庭聚會 情侶約會 中價位 可帶寵物 無菜單 複合式 咖啡簡餐"); kmeans.addDoc("台中泰式餐廳 中價位 泰式料理 月亮蝦餅 要預訂 單點式 魔幻廚房 家庭聚會 吃吃喝喝 朋友聚會 免服務費 節日聚會 大份量 泰式台菜 生日聚會"); kmeans.addDoc("朋友聚會 中價位 吃吃喝喝 家庭聚會 單點式 印度料理 烤餅 平價 精緻料理 咖哩 可刷卡 生日聚會 異國料理 海尼根Light精選店家"); kmeans.addDoc("婚宴 平價 家庭聚會 吃吃喝喝 單點式 可包場 有包廂 老店 主題特色餐廳 景觀餐廳"); kmeans.addDoc("吃到飽 下午茶 有服務費 中價位 朋友聚會 巷弄隱密 情侶約會 家庭聚會 節日聚會 生日聚會 Buffet 複合式 複合式料理 2008新開店"); kmeans.addDoc("情侶約會 法國料理 高價位 精緻料理 可刷卡 無菜單 節日聚會 家庭聚會 老店 吃吃喝喝 馬卡龍 朋友聚會 中價位 異國料理 法式料理"); kmeans.addDoc("家庭聚會 烏龍麵 吃吃喝喝 單點式 贊岐烏龍麵 情侶約會 平價 朋友聚會 精緻料理 台南美食 贊岐廚房 日本料理 日式定食 台南餐廳 中價位"); kmeans.train(); //kmeans.getResult(); kmeans.showResult(); Console.ReadKey(); }
public RBF(int K, int numOfEpocks, double learningRate, double maxError, List <List <double> > trainingSamples, List <List <double> > trainingLabels, List <List <double> > testSamples, List <List <double> > testLabels) { this.numOfEpocks = numOfEpocks; this.trainingSamples = trainingSamples; this.trainingLabels = trainingLabels; this.testSamples = testSamples; this.testLabels = testLabels; this.maxError = maxError; this.learningRate = learningRate; Centroids = new List <List <double> >(); //[NumOfCluster][NumOfFeatures (means)] Random rnd = new Random(Guid.NewGuid().GetHashCode()); int counter = K; // Num of Clusters while (counter-- > 0) { int index = rnd.Next(trainingSamples.Count); Centroids.Add(trainingSamples[index]); } KMean = new K_Means(ref Centroids, trainingSamples); Variance = KMean.GetVariance; //// //// List <int> numOfNeuronsPerLayer = new List <int>(); backpropagation = new Backpropagation(); numOfNeuronsPerLayer.Add(K); numOfNeuronsPerLayer.Add(3); this.neuralNetwork = new FeedforwardNeuralNetwrok(2); this.neuralNetwork.setNetwork(numOfNeuronsPerLayer); this.neuralNetwork.LMSsetLayer(1, new IdentityFunction()); }
static void Main(string[] args) { List <ClusteredData> datanew = new List <ClusteredData>(); EuclidianDistance distance = new EuclidianDistance(); K_Means k_means = new K_Means(2, 0.1, distance); ClusterAnalysis clusterAnalysis = new ClusterAnalysis(k_means); datanew.Add(new ClusteredData(0, 0)); datanew.Add(new ClusteredData(0, 20)); datanew.Add(new ClusteredData(20, 0)); datanew.Add(new ClusteredData(20, 20)); var list = clusterAnalysis.Clustering(datanew); /* * List<ClusteredData> datanew = new List<ClusteredData>(); * List<K_Means> k_meansList = new List<K_Means>(); * List<List<Cluster>> clustersList = new List<List<Cluster>>(); * System.Diagnostics.Stopwatch myStopwatch = new System.Diagnostics.Stopwatch(); * EuclidianDistance distance = new EuclidianDistance(); * * datanew.Add(new ClusteredData(0,0)); * datanew.Add(new ClusteredData(0, 20)); * datanew.Add(new ClusteredData(20, 0)); * datanew.Add(new ClusteredData(20, 20)); * * var ewrt = datanew.Select(Er => Er.X); * var ety = ewrt.Average(); * * * * var e = datanew.Average(er => er.X); * * * myStopwatch.Start(); //запуск * for (var i = 0; i < 1000; i++) * { * K_Means k_means = new K_Means(2, 0.1, distance); * clustersList.Add(k_means.Clustering(datanew)); * k_meansList.Add(k_means); * Thread.Sleep(10); * * var flag = k_means.FinishesCentroids.ContainsValue(new Centroid(0, 0)); * var flag1 = k_means.FinishesCentroids.ContainsValue(new Centroid(0, 20)); * var flag2 = k_means.FinishesCentroids.ContainsValue(new Centroid(20, 20)); * var flag3 = k_means.FinishesCentroids.ContainsValue(new Centroid(20, 0)); * } * myStopwatch.Stop(); * * var fulltime = myStopwatch.ElapsedMilliseconds; * double Onetime = myStopwatch.ElapsedMilliseconds/1000.0; * * int a = 0; * int b = 0; * int c = 0; * int d = 0; * * foreach (var list in clustersList) * { * a += list.Count(q => q.Data.Count == 3); * b += list.Count(q => q.Data.Count == 2); * c += list.Count(q => q.Data.Count == 1); * d += list.Count(q => q.Data.Count == 0); * } * b = b / 2; * var ads = new Cluster(1, new Centroid(1, 10)); * //ads.IntraClusterDistance(); * * //// Поиск объектов класса Cluster в списке optimumClusters с максимальным внутрикластерным расcтоянием * //var nonOptimumClusters = from list in clustersList // определяем каждый объект из clusters как cluster * // where * // select cluster.IntraClusterDistance();// выбираем объект * */ }