カスタムデータの血統クラスター分析

データの準備

まず、クラスタリング用のデータを生成しますが、教師から与えられたプログラムでは、5 つのカテゴリに分類できる 6 次元データセットを 1000 個生成します。次に、これらの生成されたデータ ポイントを matplotlib 上で表示し、色を黒に設定します。これは、最初はクラスター化されていなかったデータの分布です。

# 生成1000个6维的数据集,分为5个簇
X, y = make_blobs(n_samples=1000, n_features=6, centers=5, cluster_std=[
                  1.4, 0.4, 0.3, 0.3, 0.4], random_state=666)

クラスタリング

スペクトル クラスタリングで使用される関数は SpectralClustering であり、そのパラメータにはカーネル関数を表す係数であるガンマが含まれます。デフォルト値は 1.0 です。k 近傍法を使用してクラスタリングする場合、このパラメータは機能しません。もう 1 つのパラメータはアフィニティです。このパラメータのデフォルト値は rbf で、これはガウス カーネル関数を使用します。SpectralClustering(n_clusters=k, gamma=gamma) は、スペクトル クラスタリングにガウス カーネル関数を使用することを意味します。ガンマはカーネル関数の係数で、ガンマと n_clusters を調整することでさまざまなクラスタリング効果を実現できます。
次に、最適なクラスタリング インデックス best_score、最適なクラスタリング番号 best_k、および最適な best_gamma を保存する変数を作成します。これらのパラメータはスペクトル クラスタリング プロセス中に選択され、最終的に best_score の最大値に従って選択されます。最適なガンマを計算し、最後に、対応する最大クラスタリング インデックスの下にある他のパラメータの値を記録します。次に、費やした時間と最適なパラメーター値がコンソールに出力され、クラスターが matplotlib に色を使用して表示されます。
この記事では、Caliski Harabasz インデックスを使用してクラスタリングの状況を測定します。つまり、クラス内およびクラス間のパラメータを使用してクラスタリングの状況を測定します。式は s(k)= (tr(Bk) (mk))/( tr (Wk) (k-1) )、m はトレーニング セット内のサンプル数、k はカテゴリの数、Bk はカテゴリ間の共分散行列、Wk はカテゴリ内データの共分散行列、およびtr は行列のトレースです。
このメトリックを生成するには、calinski_harabasz_score 関数を使用します。パラメータは、以前に生成されたデータと、さまざまな K 値の予測サンプルのクラスタリングに渡されます。値が大きいほど、クラスタリング効果が高くなります。

# 使用Spectral clustering进行聚类: 使用高斯核对n_cluster和gamma进行调参
start = time.process_time()
best_score, best_k, best_gamma = 0, 0, 0

for i in range(1, 16):
# for gamma in (0.01, 0.1, 0.15):
    for k in (3, 4, 5, 6):
        gamma = i * 0.01
        y_pre = SpectralClustering(n_clusters=k, gamma=gamma).fit_predict(X)
        score = calinski_harabasz_score(X, y_pre)
        print('score={:.3f},k={}, gamma={:.4f}'.format(score, k, gamma))
        if score > best_score:
            best_score = score
            best_gamma = gamma
            best_k = k

結果表示

ガンマの値を 0.01 ~ 0.15 に設定し、range 関数を使用します。range(1,16) の i により、i は 1 ~ 15 の整数を取ることができ、ガンマ = i * 0.01 となるため、ガンマは次のようになります。 0.01 から 0.15 までの数値 (0.01 の整数倍)。最終結果を以下の図に示します。コンソールの出力は、best_score=16479.188、best_k=5、best_gamma=0.0600、
所要時間: 47.562s です。best_gamma は変更されましたが、best_score は変更されておらず、gamma のオプションの値が変更されているためです。が増加したため、実行時間もそれに応じて長くなります。best_k の値が変わらない限り、最終スコアの値は変わりません。

ここに画像の説明を挿入


おすすめ

転載: blog.csdn.net/qq_48068259/article/details/127888997