def DB_SCAN_Bisect(): bins, n_cluster, db = DB_SCAN() while (n_cluster < 6): matrixes_index = [] matrixes = [] SSEs = [] for i in range(n_cluster): matrixes_index.append(bins.loc[bins['DBSCAN'] == i].index) matrix = bins.loc[bins['DBSCAN'] == i] matrix = matrix.drop(['Bin_label', 'DBSCAN'], axis=1) matrix = matrix.to_numpy() SSEs.append(Eval.SSE(matrix)) matrixes.append(matrix) SSEs = np.array(SSEs) max_cluster = np.where(SSEs == np.max(SSEs)) km = KMeans( n_clusters=2, # số cluster init='k-means++', # vị trí center của cluster default: 'k-means++' n_init= 10, # số lần chọn center của cluster default: '10' trong số lần chọn , sẽ chọn ra model có SSE nhỏ nhất max_iter= 300, # Tiến hành chạy k-means nhiều nhất bao nhiêu lần default: '300' tol= 1e-04, # Khi tiến hành hội tụ các điểm, sai số cho phép là bao nhiêu, default: '1e-04' random_state=0) bisect = km.fit_predict(matrixes[max_cluster[0][0]]) for i in range(len(matrixes_index[max_cluster[0][0]])): if bisect[i] == 0: a = matrixes_index[max_cluster[0][0]][i] bins.loc[a, 'DBSCAN'] = max_cluster[0][0] elif bisect[i] == 1: a = matrixes_index[max_cluster[0][0]][i] bins.loc[a, 'DBSCAN'] = n_cluster n_cluster += 1 return bins