この記事では、さまざまな教師なしクラスタリングアルゴリズムの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つの戦略

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

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

マイクロソフト、マルチモーダルアプローチでAIの理解能力を向上させるプロジェクトRumiを実証

新興技術のデジタル時代において、大規模言語モデル (LLM) は、人間社会と文化の多くの側面に革命を...

...

...

人工知能がウェブホスティング業界に優位性をもたらす

近年、ウェブホスティング業界は劇的に変化しました。そして、業界を永遠に変える可能性のあるいくつかのト...

3D モデルの「スキンを変更する」のはどれくらい簡単ですか?一言だけ

[[443015]]この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI...

実践編 | アポロレーンチェンジの詳しい説明

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

AI および機械学習プロジェクトはどの程度安全ですか?

[[355693]]人工知能と機械学習はメリットをもたらす一方で、新たな脆弱性ももたらします。この...

315 顔認識は安全性が疑問視されており、新たな潜在的な脅威となる可能性があるのでしょうか?

先週、「Facezam」と呼ばれる偽のアプリがFacebookの写真をスキャンして人々の顔を追跡でき...

子どもたちが将来のスタートラインで勝てるようにするには:人工知能の思考を学ぶ

今日は、子供たちにプログラミングを教えるということについての私たちの考えをいくつか共有したいと思いま...

...

...

従来のセキュリティ手法を覆し、AIがWebセキュリティを再定義

Amazonが2006年にEC2サービスをリリースしてから11年が経ちました。この 11 年間で、A...

Gemini vs ChatGPT: Google の最新 AI と ChatGPT のどちらが優れているのでしょうか?

Google は、最新かつ最も強力な AI モデルである Gemini 1.0 を発表し、AI の...

顔認識を完了するための3行のPythonコード

顔認識パッケージこれは世界で最もシンプルな顔認識ライブラリです。 Python リファレンスまたはコ...