[バイオインフォマティクス] スペクトルクラスタリングアルゴリズムを用いたクラスター解析

目次

1. 実験の紹介

2. 実験環境

1. 仮想環境を構成する

2. ライブラリバージョンの紹介

3.IDE

3. 実験内容

0. 必要なツールをインポートする

1. テストデータの生成

2. 初期データ分布グラフを描画する

3. さまざまなパラメータの組み合わせをループし、クラスタリング効果を計算します。

4. 最適なパラメータの組み合わせを出力

5. 最適なクラスタリング結果グラフを描画する

6. コードの統合


1. 実験の紹介

この実験では、スペクトルクラスタリング アルゴリズム        を使用してクラスター分析を実装します。

2. 実験環境

    この一連の実験では PyTorch 深層学習フレームワークを使用し、関連する操作は次のとおりです (深層学習シリーズの記事の環境に基づく)。

1. 仮想環境を構成する

ディープラーニング連載記事の環境

conda create -n DL python=3.7 
conda activate DL
pip install torch==1.8.1+cu102 torchvision==0.9.1+cu102 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
conda install matplotlib
conda install scikit-learn

新規追加

conda install pandas
conda install seaborn
conda install networkx
conda install statsmodels
pip install pyHSICLasso

注:私の実験環境では上記の順番で各種ライブラリをインストールしていますので、まとめてインストールしてみたい方は試してみてください(問題が起こるかどうかは神のみぞ知る)

2. ライブラリバージョンの紹介

ソフトウェアパッケージ 今回の実験版は 現在の最新バージョン
マットプロットライブラリ 3.5.3 3.8.0
しこり 1.21.6 1.26.0
パイソン 3.7.16
scikit-learn 0.22.1 1.3.0
松明 1.8.1+cu102 2.0.1
トーショーディオ 0.8.1 2.0.2
トーチビジョン 0.9.1+cu102 0.15.2

新しい

ネットワークx 2.6.3 3.1
パンダ 1.2.3 2.1.1
pyHSICLase 1.4.2 1.4.2
シーボーン 0.12.2 0.13.0
状態モデル 0.13.5 0.14.0

3.IDE

        Pycharmの使用を推奨します(中でもpyHSICLassoライブラリはVScodeでエラーが発生しており、解決策はまだ見つかっていません...)

win11 インストール Anaconda (2022.10) + pycharm (2022.3/2023.1.4) + 仮想環境の構成_QomolangmaH のブログ - CSDN ブログ https://blog.csdn.net/m0_63834988/article/details/128693741https://blog.csdn. net/m0_63834988 /記事/詳細/128693741

3. 実験内容

0. 必要なツールをインポートする

import numpy as np
from sklearn.cluster import SpectralClustering
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
from numpy import random
from sklearn import metrics

1. テストデータの生成

random.seed(1)
x, y = make_blobs(n_samples=400, centers=4, cluster_std=1.5)

        この方法を使用してmake_blobs、合計 4 つのクラスター中心と各クラスター中心の標準偏差 1.5 を持つ 400 個のサンプルを含むデータ セットが生成されました。

2. 初期データ分布グラフを描画する

plt.scatter(x[:, 0], x[:, 1], c=y, label=len(np.unique(y)))
plt.title("Initial Data Distribution")
plt.show()

        生成されたデータセットは散布図としてプロットされ、異なるクラスター内のサンプルが異なる色でマークされます。

3. さまざまなパラメータの組み合わせをループし、クラスタリング効果を計算します。

gamma_best = 0
k_cluster_best = 0
CH = 0
for index, gamma in enumerate((1, 1.5, 2, 2.5, 5)):
    for index, k in enumerate((2, 3, 4, 5, 6)):
        y_pred = SpectralClustering(n_clusters=k, gamma=gamma).fit_predict(x)
        print("Calinski-Harabasz Score with gamma=", gamma, "n_clusters=", k, "score:",
              metrics.calinski_harabasz_score(x, y_pred))
        curr_CH = metrics.calinski_harabasz_score(x, y_pred)
        if (curr_CH > CH):
            gamma_best = gamma
            k_cluster_best = k
            CH = curr_CH
  • ネストされたループを使用して、さまざまなパラメーターの組み合わせを試します
    •  ここで、 はgammaスペクトル クラスタリングのガウス カーネル パラメータを表します
    • kクラスターの数を表します。
  •  パラメータのセットごとに、を使用してクラスタリングを実行し、クラスタリング結果のSpectralClusteringCalinski-Harabasz スコア ( ) を計算します。metrics.calinski_harabasz_scoreスコアが高いほど、クラスタリング効果が高くなります。コードは、最高スコアを持つパラメーターの組み合わせを記録します。

4. 最適なパラメータの組み合わせを出力

print("best gamma:", gamma_best, "best cluster", k_cluster_best)

gamma 最高のスコア (つまり、最良の合計 )        を持つパラメーターの組み合わせを出力します k

5. 最適なクラスタリング結果グラフを描画する

f = plt.figure()
sc = SpectralClustering(n_clusters=k_cluster_best, gamma=gamma_best).fit_predict(x)
plt.scatter(x[:, 0], x[:, 1], c=sc)
plt.title("n_clusters: " + str(k_cluster_best))
plt.show()

  

6. コードの統合

import numpy as np
from sklearn.cluster import SpectralClustering
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
from numpy import random
from sklearn import metrics


SpectralClustering(affinity='rbf', coef0=1, degree=3, gamma=1.0,
                   kernel_params=None, n_clusters=4, n_init=10,
                   n_neighbors=10)

# scikit中的make_blobs方法常被用来生成聚类算法的测试数据,make_blobs会根据用户指定的特征数量、中心点数量、范围等来生成几类数据,这些数据可用于测试聚类算法的效果
random.seed(1)
# n_samples:样本数 n_features:int,可选(默认值= 2)centers:要生成的中心数或固定的中心位置 cluster_std: 聚类的标准偏差
x, y = make_blobs(n_samples=400, centers=4, cluster_std=1.5)
plt.scatter(x[:, 0], x[:, 1], c=y, label=len(np.unique(y)))
plt.title("Initial Data Distribution")
plt.show()

gamma_best = 0
k_cluster_best = 0
CH = 0
for index, gamma in enumerate((1, 1.5, 2, 2.5, 5)):
    for index, k in enumerate((2, 3, 4, 5, 6)):
        y_pred = SpectralClustering(n_clusters=k, gamma=gamma).fit_predict(x)
        # 卡林斯基哈拉巴斯得分(Calinski Harabasz score),本质是簇间距离与簇内距离的比值,整体计算过程与方差计算方式类似,也称为方差比标准,
        # 通过计算类内各点与类中心的距离平方和来度量类内的紧密度(类内距离),各个类中心点与数据集中心点距离平方和来度量数据集的分离度(类间距离),
        # 较高的 Calinski Harabasz 分数意味着更好的聚类
        print("Calinski-Harabasz Score with gamma=", gamma, "n_clusters=", k, "score:",
              metrics.calinski_harabasz_score(x, y_pred))
        curr_CH = metrics.calinski_harabasz_score(x, y_pred)
        if (curr_CH > CH):
            gamma_best = gamma
            k_cluster_best = k
            CH = curr_CH

print("best gamma:", gamma_best, "best cluster", k_cluster_best)

f = plt.figure()
sc = SpectralClustering(n_clusters=k_cluster_best, gamma=gamma_best).fit_predict(x)
plt.scatter(x[:, 0], x[:, 1], c=sc)
plt.title("n_clusters: " + str(k_cluster_best))
plt.show()
请详细介绍上述代码

おすすめ

転載: blog.csdn.net/m0_63834988/article/details/133466740
おすすめ