private Set <int> ComputeCentroid(Cluster cluster) { if (cluster.Children.Count == 0) { ClusterInfo clusterInfo = new ClusterInfo(); clusterInfo.Centroid = ModelUtils.ComputeCentroid(cluster.Items, mDataset, CentroidType.Sum); mModel.Add(cluster, clusterInfo); return(cluster.Items); } else { Set <int> items = new Set <int>(); foreach (Cluster child in cluster.Children) { items.AddRange(ComputeCentroid(child)); } if (mRemoveDuplicates) { items = Set <int> .Difference(cluster.Items, items); } ClusterInfo clusterInfo = new ClusterInfo(); clusterInfo.Centroid = ModelUtils.ComputeCentroid(items, mDataset, CentroidType.Sum); mModel.Add(cluster, clusterInfo); return(items); } }
public void ComputeFeatures() { foreach (Text text in mTexts) { text.ComputeFeatures(); foreach (KeyValuePair <string, double> feature in text.mFeatures) { AddFeatureVal(feature.Key, feature.Value); } } foreach (string fvName in mTexts[0].mFeatureVectors.Keys) { ArrayList <SparseVector <double> > tmp = new ArrayList <SparseVector <double> >(); foreach (Text text in mTexts) { tmp.Add(text.mFeatureVectors[fvName]); } mFeatureVectors.Add(fvName, ModelUtils.ComputeCentroid(tmp, CentroidType.NrmL2)); } }