示例#1
0
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