Python での機械学習 K-means アルゴリズムの実装

Python での機械学習 K-means アルゴリズムの実装

K平均法アルゴリズムの紹介

K-means は、機械学習でよく使用されるアルゴリズムです。これは教師なし学習アルゴリズムであり、データのクラスタリングによく使用されます。クラスターの数を指定するだけで、データを複数のカテゴリに自動的に集約できます。同じクラスター内のデータは類似性が高く、異なるクラスター内のデータは類似性が低くなります。

K-menas の利点と欠点:

アドバンテージ:

  • 原理は単純です
  • 高速
  • 大規模データセットのスケーラビリティの向上

欠点:

  • クラスターの数Kを指定する必要があります
  • 外れ値に敏感
  • 初期値に敏感

K平均法クラスタリングプロセス

クラスタリング プロセスは、コスト関数を確立し、反復を通じてコスト関数の値を小さくしていく勾配降下アルゴリズムに似ています。

  • c クラスターの初期中心を適切に選択します。
  • k 回目の反復では、任意のサンプルについて c 個の中心までの距離を計算し、中心までの距離が最短のクラスにサンプルを割り当てます。
  • mean などのメソッドを使用してクラスの中心値を更新します。
  • すべてのcクラスター中心について、反復法(2)(3)を使用して更新した後も値が変化しない場合は反復が終了し、そうでない場合は反復が継続されます。

このアルゴリズムの最大の利点は、そのシンプルさとスピードです。アルゴリズムの鍵は、初期中心と距離の式の選択にあります。

K平均法の例

Python の km のいくつかのパラメータ:

  1. sklearn.cluster.KMeans(
  2.  
  3. n_clusters=8、
  4.  
  5. init= 'k-means++'
  6.  
  7. n_init=10、
  8.  
  9. 最大反復回数=300、
  10.  
  11. 誤差=0.0001、
  12.  
  13. precompute_distances = 'auto'
  14.  
  15. 詳細=0、
  16.  
  17. ランダム状態=なし、
  18.  
  19. copy_x = True
  20.  
  21. n_ジョブ=1、
  22.  
  23. アルゴリズム = '自動'  
  24.  
  • n_clusters: クラスターの数、つまりクラスター化するカテゴリの数
  • init: 初期クラスタ中心を取得する方法
  • n_init: 初期クラスター センターの反復回数を取得します。初期重心の影響を補正するために、アルゴリズムはデフォルトで 10 個の初期重心に設定し、アルゴリズムを実装して、最良の結果を返します。
  • max_iter: *** 反復回数 (kmeans アルゴリズムの実装には反復が必要であるため)
  • tol: 許容値、つまり kmeans 実行基準が収束するための条件
  • precompute_distances: 距離を事前に計算するかどうか。このパラメータは、スペースと時間の間でトレードオフを行います。True の場合、距離行列全体がメモリに格納されます。データ サンプルの数が features*samples より大きく、12e6 より大きい場合、Auto はデフォルトで False になります。False の場合、コア実装方法は Cpython を使用して実装されます。
  • verbose: 詳細モード(意味がよく分かりませんが、通常はデフォルト値を変更しません)
  • random_state: クラスター センターをランダムに生成するための状態条件。
  • copy_x: データが変更されたかどうかを示すフラグ。True の場合、コピー後にデータは変更されません。 bool このパラメータは scikit-learn の多くのインターフェースで使用され、ユーザーの入力データを変更しないように入力データのコピーを継続するかどうかを指定します。 Python のメモリ メカニズムを理解していれば、これがより明確になります。
  • n_jobs: 並列設定
  • アルゴリズム: kmeans 実装アルゴリズム (「auto」、「full」、「elkan」を含む)。「full」は EM モードでの実装を意味します。

パラメータは多数ありますが、デフォルト値が与えられています。したがって、通常はこれらのパラメータを渡す必要はありません。実際のニーズに応じて呼び出すことができます。

コード例はこちら

  1. sklearn.clusterからKMeansをインポートする
  2.  
  3. sklearn.externalsからjoblibをインポートする
  4.  
  5. sklearn インポート クラスターから
  6.  
  7. numpyをnpとしてインポートする 
  8.   
  9.  
  10. # 10*3行列を生成する
  11.  
  12. データ = np.random.rand(10,3)
  13.  
  14. 印刷データ
  15.  
  16. # 4つのカテゴリーにまとめる
  17.  
  18. 推定値 = KMeans(n_clusters=4)
  19.  
  20. # fit_predictはフィッティング+予測を意味し、別々に書くこともできます
  21.  
  22. res = estimator.fit_predict(データ)
  23.  
  24. # 予測されたカテゴリラベルの結果
  25.  
  26. label_pred = 推定値.labels_
  27.  
  28. # 各カテゴリのクラスター中心値
  29.  
  30. 重心 = estimator.cluster_centers_
  31.  
  32. # クラスター中心平均ベクトルの合計
  33.  
  34. 慣性 = estimator.inertia_  
  35.   
  36.  
  37. ラベル_pred を印刷する
  38.  
  39. 重心を印刷する
  40.  
  41. 印刷慣性 
  42.   
  43.  
  44. コード実行結果
  45.  
  46. [0 2 1 0 2 2 0 3 2 0]  
  47.   
  48.  
  49. [[ 0.3028348 0.25183096 0.62493622]
  50.  
  51. [ 0.88481287 0.70891813 0.79463764 ]
  52.  
  53. [ 0.66821961 0.54817207 0.30197415 ]
  54.  
  55. [ 0.11629904 0.85684903 0.7088385 ]]
  56.  
  57. 0.570794546829

より直感的に説明するために、今回はグラフで示します。2次元で描いた方が直感的なので、データを2次元に合わせます。描画するポイントは100個選択し、クラスタリングカテゴリは3カテゴリです。

  1. sklearn.clusterからKMeansをインポートする
  2.  
  3. sklearn.externalsからjoblibをインポートする
  4.  
  5. sklearn インポート クラスターから
  6.  
  7. numpyをnpとしてインポートする
  8.  
  9. matplotlib.pyplot をpltとしてインポートします。  
  10.   
  11.  
  12. データ = np.random.rand(100,2)
  13.  
  14. 推定値 = KMeans(n_clusters=3)
  15.  
  16. res = estimator.fit_predict(データ)
  17.  
  18. label_pred = 推定値.labels_
  19.  
  20. 重心 = estimator.cluster_centers_
  21.  
  22. 慣性 = estimator.inertia_
  23.  
  24. #res を印刷
  25.  
  26. ラベル_pred を印刷する
  27.  
  28. 重心を印刷する
  29.  
  30. 印刷慣性 
  31.   
  32.  
  33. iが範囲(len(データ))内にある場合:
  34.  
  35. int (lable_pred[i])==0の場合:
  36.  
  37. plt.scatter(データ[i][0]、データ[i][1]、色= '赤' )
  38.  
  39. int (lable_pred[i])==1の場合:
  40.  
  41. plt.scatter(データ[i][0]、データ[i][1]、色= '黒' )
  42.  
  43. int (lable_pred[i])==2の場合:
  44.  
  45. plt.scatter(データ[i][0]、データ[i][1]、色= '青' )
  46.  
  47. plt.show()

クラスタリング効果は依然として良好であることがわかります。k-meansのクラスタリング効率についてテストを行い、次元を50次元に拡張しました。

*** データの場合、フィッティング時間は許容範囲内であり、効率が良好であることがわかります。モデルは、他の機械学習アルゴリズム モデルと同様に保存されます。

  1. sklearn.externals からjoblibをインポートする
  2. joblib.dump(km, "model/km_model.m" )

<<:  AIが起こした恐ろしいことは何ですか?

>>:  TensorFlow プロダクト マネージャー: 今後 10 年間で機械学習はソフトウェアとハ​​ードウェアをどのように変えるのでしょうか?

ブログ    
ブログ    
ブログ    

推薦する

...

モバイルデバイスでのリアルタイムディープラーニング

[[210219]] 2017 年には、モバイル アプリケーション向けのディープラーニングにおいて大...

ディープラーニングの次の段階:ニューラルアーキテクチャの自己学習により、優れたコンピュータビジョンモデルが実現

[[275255]]ディープラーニングは人工知能モデルの先駆けです。画像認識、音声認識、テキスト理解...

人間と人工知能がどのように関係を築くか

人間関係を構築するのに優れているのは人間か人工知能か?実際、この革新的な技術は長い間存在していました...

Nature のサブ出版物: 新しいアルゴリズムは、米国の 8 つの都市で 90% の精度で、1 週間前に 2 ブロック以内の犯罪を予測できます。

シカゴ大学の助教授イシャヌ・チャトパディアイ氏は、彼と彼のチームが「アーバン・ツイン」モデルを作成し...

AIがビジネスプロセス管理を根本的に変える方法

BPM に AI の検出機能と自動化機能を導入すると、フロントオフィス プロセス、プロセス データ分...

機械学習アルゴリズムのコレクション: ベイズ学習からディープラーニングまで、それぞれの長所と短所

私たちが日常生活で使用する推奨システム、インテリジェントな画像美化アプリケーション、チャットボットな...

...

戦争の太鼓はすでに鳴り響いています。人工知能に関して、あなたはどちらの陣営に属しますか?

[[240281]]人工知能が将来の技術の方向性であることは誰もが知っていますが、AIの学習に対す...

英国のサイバーセキュリティ機関がAIにおける大規模言語モデルのリスクを警告

英国の国家サイバーセキュリティセンター(NCSC)は、AIを活用した大規模言語モデル(LLM)を企業...

...

LLM幻覚問題の徹底レビュー! HITチームの50ページのレビューが公開された

幻覚だよ、古い友人よ。 LLM が私たちの視野に入って以来、錯覚の問題は常に無数の開発者を悩ませてき...

農業革命:農業ロボットの台頭

近年、農業ロボットの登場により農業業界は大きな変化を遂げています。これらの最先端の機械は、作物の栽培...

これはGPT-4が愚かである理由についての新たな説明である

かつては世界で最も強力だと考えられていたGPT-4も、リリース以来、いくつかの「信頼の危機」を経験し...