この記事では、さまざまな教師なしクラスタリングアルゴリズムのPython実装について簡単に説明します。

この記事では、さまざまな教師なしクラスタリングアルゴリズムのPython実装について簡単に説明します。

教師なし学習は、データ内のパターンを見つけるために使用される機械学習技術の一種です。教師なし学習アルゴリズムで使用される入力データはすべてラベルなしです。つまり、データは入力変数 (独立変数 X) のみを提供し、対応する出力変数 (従属変数) は提供しません。教師なし学習では、アルゴリズム自体がデータ内の興味深い構造を発見します。

人工知能研究の第一人者であるヤン・ルカン氏は次のように説明しています。「教師なし学習は、行うことすべてが正しいかどうかを明示的に指示されなくても、自ら学習することができます。」これが真の人工知能を実現するための鍵です!

教師あり学習と教師なし学習

教師あり学習では、システムは以前に与えられた例から学習しようとします。 (教師なし学習では、システムは与えられた例から直接パターンを見つけようとします。) したがって、データセットにラベルが付いている場合は、これは教師あり学習の問題であり、データにラベルが付いていない場合は、これは教師なし学習の問題です。

上の図は、回帰手法を使用してさまざまな特徴間の最適な曲線を見つける教師あり学習の例です。一方、教師なし学習では、入力データは特徴に基づいて分割され、データが属するクラスターに基づいて予測が行われます。

重要な用語

  • 機能: 予測を行うときに使用する入力変数。
  • 予測値: 入力例を与えられたモデルの出力。
  • 例: データセット内の行。例は、1 つ以上の機能と、場合によってはラベルで構成されます。
  • ラベル: 特徴に対応する実際の結果 (予測に対応)。

教師なし学習のためのデータの準備

この記事では、Iris データセットを使用して基本的な予測作業を完了します。このデータセットには 150 件のレコードが含まれており、各レコードは花弁の長さ、花弁の幅、萼片の長さ、萼片の幅、花のカテゴリの 5 つの特徴で構成されています。花の種類には、アイリス・セトサ、アイリス・バージニカ、アイリス・ベルシカラーなどがあります。この論文では、教師なしアルゴリズムにアヤメの花の 4 つの特徴を与え、それがどのカテゴリに属する​​かを予測します。

この記事では、Python 環境の sklearn ライブラリを使用して Iris データセットを読み込み、matplotlib を使用してデータを視覚化します。データセットを探索するためのコード スニペットは次のとおりです。

  1. # モジュールのインポート
  2. sklearnからデータセットをインポートする
  3. matplotlib.pyplot を plt としてインポートします。
  4.  
  5. # データセットを読み込んでいます
  6. iris_df =データセット.load_iris ()
  7.  
  8. # データセットで利用可能なメソッド
  9. 印刷(dir(iris_df))
  10.  
  11. # 特徴
  12. iris_df.feature_names を印刷します。
  13.  
  14. # ターゲット
  15. iris_df.target を印刷します
  16.  
  17. # ターゲット名
  18. iris_df.target_names を印刷します。
  19. ラベル= {0: '赤'、1: '青'、2: '緑'}
  20.  
  21. # データセットのスライス
  22. x_axis = iris_df .data[:, 0] # 萼片の長さ
  23. y_axis = iris_df .data[:, 2] # 萼片の幅
  24.  
  25. # プロット
  26. plt.scatter(x_axis, y_axis, c = iris_df .target)
  27. plt.show()
  1. ['DESCR', 'データ', '機能名', 'ターゲット', 'ターゲット名']
  2. ['萼片の長さ (cm)'、'萼片の幅 (cm)'、'花弁の長さ (cm)'、'花弁の幅 (cm)']
  3. [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]
  4. ['setosa' 'versicolor' 'virginica']

紫: セトサ、緑: バーシカラー、黄: バージニカ

クラスター分析

クラスター分析では、データはいくつかの異なるグループに分割されます。つまり、このステップの目的は、全体のデータから類似した特性を持つグループを分離し、それらをクラスターに割り当てることです。

視覚化の例:

上図の左側は分類前の元のデータ、右側はクラスタリング後のデータ(データが自身の特性に応じて分類されている)です。予測する入力が与えられると、その特徴に基づいてどのクラスターに属するかを調べ、それに基づいて予測を行います。

Python での K 平均法クラスタリング

K-means は、各反復で局所的最大値を見つけることを目的とする反復クラスタリング アルゴリズムです。アルゴリズムでは、最初にクラスターの数を選択する必要があります。この問題には 3 つのカテゴリの花が関係していることがわかっているので、パラメータ「n_clusters」を K-means モデルに渡して、データを 3 つのカテゴリにグループ化するアルゴリズムを作成します。ここで、3 つのデータ ポイント (入力) をランダムに 3 つのクラスターに分割します。次に、特定の入力データ ポイントは、各ポイント間の重心距離に基づいて個別のクラスターに分割されます。次に、すべてのクラスターの重心を再計算します。

各クラスターの重心は、結果セットを定義する固有値の集合です。重心の特徴の重みを調べることで、各クラスターがどのようなタイプのグループを表すかを定性的に解釈できます。

sklearn ライブラリから K-means モデルをインポートし、特徴を適合させて予測を行います。

K-means アルゴリズムの Python 実装:

  1. # モジュールのインポート
  2. sklearnからデータセットをインポートする
  3. sklearn.clusterからKMeansをインポートする
  4.  
  5. # データセットを読み込んでいます
  6. iris_df =データセット.load_iris ()
  7.  
  8. # モデルの宣言
  9. モデル= KMeans ( n_clusters = 3 )
  10.  
  11. # フィッティングモデル
  12. モデルをフィット(iris_df.data)
  13.  
  14. # 単一の入力を予測する
  15. 予測ラベル=モデル.predict([[7.2, 3.5, 0.8, 1.6]])
  16.  
  17. # データ全体の予測
  18. すべての予測= model.predict (iris_df.data)
  19.  
  20. # 印刷予測
  21. print(予測ラベル)
  22. 印刷(すべての予測)
  1. [0]
  2. [0 ...2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 1 2]

階層的クラスタリング

階層的クラスタリングは、その名前が示すように、階層的なクラスターを構築できるアルゴリズムです。このアルゴリズムの開始時には、各データ ポイントはクラスターです。次に、最も近い 2 つのクラスターが 1 つにマージされます。最終的に、すべてのポイントが 1 つのクラスターにマージされると、アルゴリズムは停止します。

階層的クラスタリングの実装は、デンドログラムを使用して表示できます。次に、穀物データの階層的クラスタリングの例を見てみましょう。データセットリンク:

https://raw.githubusercontent.com/vihar/unsupervised-learning-with-python/master/seeds-less-rows.csv

1. 階層的クラスタリングの Python 実装:

  1. # モジュールのインポート
  2. scipy.cluster.hierarchy から linkage, dendrogram をインポートします
  3. matplotlib.pyplot を plt としてインポートします。
  4. pandasをpdとしてインポートする
  5.  
  6. # データフレームの読み取り
  7. seeds_df = pd.read_csv (
  8. 「https://raw.githubusercontent.com/vihar/unsupervised-learning-with-python/master/seeds-less-rows.csv」
  9.  
  10. # DataFrame から穀物の種類を削除し、後で保存します
  11. 品種=リスト(seeds_df.pop('grain_variety'))
  12.  
  13. # 測定値をNumPy配列として抽出する
  14. サンプル= seeds_df.values
  15.  
  16. 「」
  17. サンプルに対して階層的クラスタリングを実行するには、
  18. method = 'complete'キーワード引数を持つ linkage() 関数。
  19. 結果をマージに割り当てます。
  20. 「」
  21. マージ=リンク(サンプル、方法= '完全' )
  22.  
  23. 「」
  24. dendrogram() 関数を使用して、マージ時に樹形図をプロットします。
  25. キーワード引数を指定すると、 labels = variety leaf_rotation = 90
  26. そしてleaf_font_size = 6です。
  27. 「」
  28. 樹形図(併合、
  29. ラベル=品種
  30. 葉の回転= 90
  31. リーフフォントサイズ= 6
  32.  
  33. plt.show()

2. K平均法と階層的クラスタリングの違い

  • 階層的クラスタリングは大規模なデータではうまく機能しませんが、K-means クラスタリングは機能します。その理由は、K 平均法アルゴリズムの時間計算量は線形、つまり O(n) であるのに対し、階層的クラスタリングの時間計算量は二次、つまり O(n2) であるためです。
  • K-means クラスタリングでは、最初にクラスターをランダムに選択するため、アルゴリズムを複数回実行して得られる結果は大きく異なる可能性があります。階層的クラスタリングの結果は再現可能です。
  • 研究によると、クラスターの形状が超球面(たとえば、2 次元空間では円、3 次元空間では球)の場合、K 平均法アルゴリズムのパフォーマンスが良好であることがわかっています。
  • K-means アルゴリズムはノイズ データに対する耐性が低い (ノイズ データに対する堅牢性が低い) のに対し、階層的クラスタリングではノイズ データを直接クラスタリング分析に使用できます。

t-SNEクラスタリング

これは視覚的な教師なし学習法です。 t-SNE は t 分布の確率的近傍埋め込みを指します。高次元空間を視覚化された 2 次元または 3 次元空間にマッピングします。具体的には、2 次元または 3 次元のデータ ポイントを使用して高次元空間内のオブジェクトをモデル化します。つまり、類似のオブジェクトは近くのポイントを使用して高い確率でモデル化され、類似しないオブジェクトは遠くのポイントを使用してモデル化されます。

Iris データセットの t-SNE クラスタリングの Python 実装:

  1. # モジュールのインポート
  2. sklearnからデータセットをインポートする
  3. sklearn.manifold から TSNE をインポート
  4. matplotlib.pyplot を plt としてインポートします。
  5.  
  6. # データセットを読み込んでいます
  7. iris_df =データセット.load_iris ()
  8.  
  9. # モデルの定義
  10. モデル= TSNE (学習率= 100 )
  11.  
  12. # フィッティングモデル
  13. 変換された=モデル.fit_transform(iris_df.data)
  14.  
  15. # 2d t-Sne のプロット
  16. x_axis =変換された[:, 0]
  17. y_axis =変換された[:, 1]
  18.  
  19. plt.scatter(x_axis, y_axis, c = iris_df .target)
  20. plt.show()

紫: セトサ、緑: バーシカラー、黄: バージニカ

ここでは、4 つの特徴 (4 次元) を持つ Iris データセットが 2D 空間に変換され、2D 画像に表示されます。同様に、t-SNE モデルは n 個の特徴を持つデータセットに使用できます。

DBSCAN クラスタリング

DBSCAN (ノイズ付き密度ベース空間クラスタリング) は、予測分析で K 平均アルゴリズムの代わりに使用される一般的なクラスタリング アルゴリズムです。実行するクラスターの数を入力する必要はありません。ただし、他の 2 つのパラメータを調整する必要があります。

scikit-learn の DBSCAN アルゴリズム実装では、デフォルトの「eps」および「min_samples」パラメータが提供されますが、通常はユーザーがそれらを調整する必要があります。パラメータ「eps」は、2 つのデータ ポイントが同じ近傍にあると見なされるための最大距離です。パラメータ「min_samples」は、同じクラスター内にある必要がある近傍のデータ ポイントの最小数です。

1. DBSCAN クラスタリングの Python 実装:

  1. # モジュールのインポート
  2. sklearn.datasetsからload_irisをインポートする
  3. matplotlib.pyplot を plt としてインポートします。
  4. sklearn.clusterからDBSCANをインポートする
  5. sklearn.decomposition から PCA をインポート
  6.  
  7. # データセットをロード
  8. アイリス= load_iris ()
  9.  
  10. # モデルの宣言
  11. dbscan = DBSCAN ()
  12.  
  13. #フィッティング
  14. dbscan.fit(iris.data)
  15.  
  16. # PCA を使用した変換
  17. pca = PCA ( n_components = 2 ).fit(iris.data)
  18. pca pca_2d = pca.transform(iris.data)
  19.  
  20. # クラスに基づくプロット
  21. iが範囲(0, pca_2d.shape[0])内にある場合:
  22. dbscan.labels_[i] == 0の場合:
  23. c1 = plt .scatter(pca_2d[i, 0], pca_2d[i, 1], c = 'r' マーカー= '+' )
  24. elif dbscan.labels_[i] == 1:
  25. c2 = plt .scatter(pca_2d[i, 0], pca_2d[i, 1], c = 'g' マーカー= 'o' )
  26. elif dbscan.labels_[i] == -1:
  27. c3 = plt .scatter(pca_2d[i, 0], pca_2d[i, 1], c = 'b' マーカー= '*' )
  28.  
  29. plt.legend([c1, c2, c3], ['クラスター1', 'クラスター2', 'ノイズ'])
  30. plt.title('DB

2. その他の教師なし学習テクニック:

  • 主成分分析(PCA)
  • 異常検出
  • オートエンコーダ
  • ディープビリーフネットワーク
  • ヘブビアン学習
  • 生成的敵対ネットワーク (GAN)
  • 自己組織化マップ

オリジナルリンク:

https://towardsdatascience.com/python による教師なし学習-173c51dc7f03

[この記事は51CTOコラム「Machine Heart」、WeChatパブリックアカウント「Machine Heart(id:almosthuman2014)」によるオリジナル翻訳です]

この著者の他の記事を読むにはここをクリックしてください

<<:  将来、人工知能は人類を脅かすのか?人工知能が「暴走」するのを防ぐ6つの戦略

>>:  今回はホーキングの言うことを聞かなかった!人工知能が人間に取って代わる、これが科学が進む道だ

ブログ    
ブログ    

推薦する

1つのコマンドでChatGPTがさらに強力になります

GPT を使用する過程で、AI にニーズをより明確に理解させる方法が重要です。今日は、GPT をあな...

MetaMindによるNLP研究の徹底分析:機械学習をスキップさせる方法

自然言語処理は、人工知能研究における中心的な課題の 1 つです。最近、Salesforceによる買収...

将来のAIアプリケーションには、より高速でスマートな通信インフラストラクチャが必要

[[409599]]インターネット接続が4Gから5Gへと高速化していく一方で、利用可能な帯域幅が限ら...

機械学習とディープラーニングの違いは何ですか?

機械学習とディープラーニングのアルゴリズムフローついに人工知能研究僧に入学しました。機械学習とディー...

GoogleのAIチップ設計能力は人間より優れているのか?社内研究者が疑問を呈し解雇された

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

AI に適切なデータ戦略を構築するにはどうすればよいでしょうか?

適切なデータ戦略を使用して人工知能 (AI) を実装すると、データがシステムにシームレスに流れ込み、...

デアデビルが来た!バットセンスAIは、スマートフォンが音を聞いて3D画像を生成できるようにする

英国の科学者たちは、スマートフォンやノートパソコンなどの日常的な物に、デアデビルと同じくらい強力なコ...

持続可能な開発の達成において AI はどのような役割を果たすのでしょうか?

長年にわたり、持続可能なエネルギーは科学者にとって大きな関心事である重要な分野でした。人々は、効果的...

エッジ AI は興味深い未来を提供し​​ます!

人工知能(AI)は、私たちの生活のほぼすべての側面において一般的な要素になりつつあります。これまで、...

WeChat、サードパーティのエコシステムに統合するインテリジェント会話システム「Xiaowei」を発表

2019年WeChatオープンクラスPROで、WeChat AIチームが開発したインテリジェント対話...

AR テクノロジーは自動車メーカーにとって次の焦点となるのでしょうか?

現在、拡張現実(AR)技術はもはや新しい製品ではありませんが、その適用範囲が限られているため、ARは...

テクノロジー企業史上初:MetaがGPT3パラメータサイズのAIモデルをオープンソース化

テキスト段落の生成、人間の会話のシミュレーション、数学の問題の解決において驚くほど優れたパフォーマン...

AIとロボットのユースケース

人工知能とロボット工学はテクノロジー分野に大きな変化をもたらしています。 20年前に人々が夢見ていた...

生死に関わる問題:病院のICU病棟で人工知能は何ができるのか?

病院の集中治療室 (ICU) では、重病の患者を一日中一連の機器に接続し、いつでもバイタルサインを監...

50枚の写真が「毒された」安定した拡散、車と牛の区別がつかない

AI侵害に対するアーティストの反撃がここに——絵画に「毒」を入れると、AIが「毒化」されて使用時に誤...