K平均法アルゴリズムの紹介 K-means は、機械学習でよく使用されるアルゴリズムです。これは教師なし学習アルゴリズムであり、データのクラスタリングによく使用されます。クラスターの数を指定するだけで、データを複数のカテゴリに自動的に集約できます。同じクラスター内のデータは類似性が高く、異なるクラスター内のデータは類似性が低くなります。 K-menas の利点と欠点: アドバンテージ: - 原理は単純です
- 高速
- 大規模データセットのスケーラビリティの向上
欠点: - クラスターの数Kを指定する必要があります
- 外れ値に敏感
- 初期値に敏感
K平均法クラスタリングプロセス クラスタリング プロセスは、コスト関数を確立し、反復を通じてコスト関数の値を小さくしていく勾配降下アルゴリズムに似ています。 - c クラスターの初期中心を適切に選択します。
- k 回目の反復では、任意のサンプルについて c 個の中心までの距離を計算し、中心までの距離が最短のクラスにサンプルを割り当てます。
- mean などのメソッドを使用してクラスの中心値を更新します。
- すべてのcクラスター中心について、反復法(2)(3)を使用して更新した後も値が変化しない場合は反復が終了し、そうでない場合は反復が継続されます。
このアルゴリズムの最大の利点は、そのシンプルさとスピードです。アルゴリズムの鍵は、初期中心と距離の式の選択にあります。 K平均法の例 Python の km のいくつかのパラメータ: - sklearn.cluster.KMeans(
-
- n_clusters=8、
-
- init= 'k-means++' 、
-
- n_init=10、
-
- 最大反復回数=300、
-
- 誤差=0.0001、
-
- precompute_distances = 'auto' 、
-
- 詳細=0、
-
- ランダム状態=なし、
-
- copy_x = True 、
-
- n_ジョブ=1、
-
- アルゴリズム = '自動'
-
- )
- 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 モードでの実装を意味します。
パラメータは多数ありますが、デフォルト値が与えられています。したがって、通常はこれらのパラメータを渡す必要はありません。実際のニーズに応じて呼び出すことができます。 コード例はこちら - sklearn.clusterからKMeansをインポートする
-
- sklearn.externalsからjoblibをインポートする
-
- sklearn インポート クラスターから
-
- numpyをnpとしてインポートする
-
-
- # 10*3行列を生成する
-
- データ = np.random.rand(10,3)
-
- 印刷データ
-
- # 4つのカテゴリーにまとめる
-
- 推定値 = KMeans(n_clusters=4)
-
- # fit_predictはフィッティング+予測を意味し、別々に書くこともできます
-
- res = estimator.fit_predict(データ)
-
- # 予測されたカテゴリラベルの結果
-
- label_pred = 推定値.labels_
-
- # 各カテゴリのクラスター中心値
-
- 重心 = estimator.cluster_centers_
-
- # クラスター中心平均ベクトルの合計
-
- 慣性 = estimator.inertia_
-
-
- ラベル_pred を印刷する
-
- 重心を印刷する
-
- 印刷慣性
-
-
- コード実行結果
-
- [0 2 1 0 2 2 0 3 2 0]
-
-
- [[ 0.3028348 0.25183096 0.62493622]
-
- [ 0.88481287 0.70891813 0.79463764 ]
-
- [ 0.66821961 0.54817207 0.30197415 ]
-
- [ 0.11629904 0.85684903 0.7088385 ]]
-
- 0.570794546829
より直感的に説明するために、今回はグラフで示します。2次元で描いた方が直感的なので、データを2次元に合わせます。描画するポイントは100個選択し、クラスタリングカテゴリは3カテゴリです。 - sklearn.clusterからKMeansをインポートする
-
- sklearn.externalsからjoblibをインポートする
-
- sklearn インポート クラスターから
-
- numpyをnpとしてインポートする
-
- matplotlib.pyplot をpltとしてインポートします。
-
-
- データ = np.random.rand(100,2)
-
- 推定値 = KMeans(n_clusters=3)
-
- res = estimator.fit_predict(データ)
-
- label_pred = 推定値.labels_
-
- 重心 = estimator.cluster_centers_
-
- 慣性 = estimator.inertia_
-
- #res を印刷
-
- ラベル_pred を印刷する
-
- 重心を印刷する
-
- 印刷慣性
-
-
- iが範囲(len(データ))内にある場合:
-
- int (lable_pred[i])==0の場合:
-
- plt.scatter(データ[i][0]、データ[i][1]、色= '赤' )
-
- int (lable_pred[i])==1の場合:
-
- plt.scatter(データ[i][0]、データ[i][1]、色= '黒' )
-
- int (lable_pred[i])==2の場合:
-
- plt.scatter(データ[i][0]、データ[i][1]、色= '青' )
-
- plt.show()
クラスタリング効果は依然として良好であることがわかります。k-meansのクラスタリング効率についてテストを行い、次元を50次元に拡張しました。 *** データの場合、フィッティング時間は許容範囲内であり、効率が良好であることがわかります。モデルは、他の機械学習アルゴリズム モデルと同様に保存されます。 - sklearn.externals からjoblibをインポートする
- joblib.dump(km, "model/km_model.m" )
|