def __init__(self,dataList,k,r,Kernel="Gaussian",autoselected_r=True): self.dataList = dataList self.ClusterSet = [0]*k self.k = k self.r = r self.kernel = Kernel if autoselected_r: self.r = Cluster.DataCluster(dataList).ComputeDiameter() / k**(1/len(dataList[0])) self.weight = None
def UpdateClusterSet(self): """ :param k: int, number of clusters to be constructed :return: array of type Cluster, the set of clusters constructed """ CenterSet = [] for i in self.ClusterSet: CenterSet.append(i.GetCenter()) CenterSet = np.asarray(CenterSet) for i in range(0,self.k,1): cluster_points = [] for a in self.dataList: if self.GetPointDistance(self.FindNearestNeighbor(CenterSet, a), CenterSet[i]) == 0.0: cluster_points.append(a) cluster_points = np.asarray(cluster_points) self.ClusterSet[i] = Cluster.DataCluster(cluster_points) return self.ClusterSet
def GreedyPartition(self): """ :param dataList: matrix, the data set to be partitioned :param M: int, number of centers required :return: array of arrays, the set of M centers found in this method """ CenterSet = np.zeros((self.k,len(self.dataList[0]))) CenterSet[0] = np.asarray(self.dataList[0]) for i in range(1,self.k,1): CenterSet[i] = np.asarray(self.FindNextCenter(self.dataList,CenterSet)) for i in range(0,self.k,1): cluster_points = [] for a in self.dataList: if self.GetPointDistance(self.FindNearestNeighbor(CenterSet,a), CenterSet[i])== 0.0: cluster_points.append(a) cluster_points = np.asarray(cluster_points) self.ClusterSet[i] = Cluster.DataCluster(cluster_points) return self.ClusterSet