ホームページ >バックエンド開発 >Python チュートリアル >Python での K 平均法アルゴリズムの実装

Python での K 平均法アルゴリズムの実装

小云云
小云云オリジナル
2017-12-06 10:28:101903ブラウズ

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

K-MEANSアルゴリズムは、クラスター数kとn個のデータオブジェクトを含むデータベースを入力し、最小分散基準を満たすk個のクラスターを出力するアルゴリズムです。 k-means アルゴリズムは、入力量 k を受け取り、取得されたクラスターが次の条件を満たすように、n 個のデータ オブジェクトを k クラスターに分割します。同じクラスター内のオブジェクトの類似性はより高く、異なるクラスター内のオブジェクトの類似性はより小さくなります。この記事では、Python での K 平均法アルゴリズムの実装について紹介します。

中心となるアイデア

は、k 個のクラスターの分割スキームを繰り返し見つけます。これにより、これらの k 個のクラスターの平均を使用して、対応する種類のサンプルを表すときに得られる全体的な誤差が最小限に抑えられます。

k クラスターには次の特徴があります。各クラスター自体は可能な限りコンパクトであり、各クラスターは可能な限り分離されています。

k-meansアルゴリズムは最小誤差二乗和基準に基づいていますK-menasの長所と短所:

長所:

原理が簡単
速度が速い
大規模なデータセットに対して比較的優れたスケーラビリティを持っています

短所:

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

K-meansのクラスタリングプロセス

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

c クラスの初期中心を適切に選択します。
k 回目の反復で、任意のサンプルについて、c 中心までの距離を見つけて分類します。最短距離の中心が位置するクラスへのサンプル
mean などのメソッドを使用してクラスの中心値を更新します
すべての c クラスターの中心について、( 2) (3)、反復は終了します。それ以外の場合は反復が継続します。

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

K-means の例は、Python で km のパラメーターをいくつか示しています:

sklearn.cluster.KMeans(
  n_clusters=8,
  init='k-means++', 
  n_init=10, 
  max_iter=300, 
  tol=0.0001, 
  precompute_distances='auto', 
  verbose=0, 
  random_state=None, 
  copy_x=True, 
  n_jobs=1, 
  algorithm='auto'
  )
n_clusters: 簇的个数,即你想聚成几类
init: 初始簇中心的获取方法
n_init: 获取初始簇中心的更迭次数,为了弥补初始质心的影响,算法默认会初始10个质心,实现算法,然后返回最好的结果。
max_iter: 最大迭代次数(因为kmeans算法的实现需要迭代)
tol: 容忍度,即kmeans运行准则收敛的条件
precompute_distances:是否需要提前计算距离,这个参数会在空间和时间之间做权衡,如果是True 会把整个距离矩阵都放到内存中,auto 会默认在数据样本大于featurs*samples 的数量大于12e6 的时候False,False 时核心实现的方法是利用Cpython 来实现的
verbose: 冗长模式(不太懂是啥意思,反正一般不去改默认值)
random_state: 随机生成簇中心的状态条件。
copy_x: 对是否修改数据的一个标记,如果True,即复制了就不会修改数据。bool 在scikit-learn 很多接口中都会有这个参数的,就是是否对输入数据继续copy 操作,以便不修改用户的输入数据。这个要理解Python 的内存机制才会比较清楚。
n_jobs: 并行设置
algorithm: kmeans的实现算法,有:'auto', ‘full', ‘elkan', 其中 ‘full'表示用EM方式实现
虽然有很多参数,但是都已经给出了默认值。所以我们一般不需要去传入这些参数,参数的。可以根据实际需要来调用。


コード例を以下に示します


from sklearn.cluster import KMeans
from sklearn.externals import joblib
from sklearn import cluster
import numpy as np

# 生成10*3的矩阵
data = np.random.rand(10,3)
print data
# 聚类为4类
estimator=KMeans(n_clusters=4)
# fit_predict表示拟合+预测,也可以分开写
res=estimator.fit_predict(data)
# 预测类别标签结果
lable_pred=estimator.labels_
# 各个类别的聚类中心值
centroids=estimator.cluster_centers_
# 聚类中心均值向量的总和
inertia=estimator.inertia_

print lable_pred
print centroids
print inertia

代码执行结果
[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 次元を描画する方が直感的であるため、データを 100 個のポイントを選択して描画します。ご覧のとおり、クラスタリング効果は依然として良好です。K-means のクラスタリング効率に関するテストを実施し、次元を 50 次元


50 次元


30 次元に拡張しました。

50 次元

1000000 アイテム

4'13s

50 次元 数百万のデータでは、フィッティング時間はまだ許容範囲内であり、保存効率も依然として良好であることがわかります。モデルは他の機械学習アルゴリズム モデルの保存と似ています
from sklearn.cluster import KMeans
from sklearn.externals import joblib
from sklearn import cluster
import numpy as np
import matplotlib.pyplot as plt

data = np.random.rand(100,2)
estimator=KMeans(n_clusters=3)
res=estimator.fit_predict(data)
lable_pred=estimator.labels_
centroids=estimator.cluster_centers_
inertia=estimator.inertia_
#print res
print lable_pred
print centroids
print inertia

for i in range(len(data)):
  if int(lable_pred[i])==0:
    plt.scatter(data[i][0],data[i][1],color='red')
  if int(lable_pred[i])==1:
    plt.scatter(data[i][0],data[i][1],color='black')
  if int(lable_pred[i])==2:
    plt.scatter(data[i][0],data[i][1],color='blue')
plt.show()
上記の内容は、Python での K-means アルゴリズムの実装です。 関連する推奨事項: K 平均法クラスタリング アルゴリズムを使用して画像の主要な色を特定するK 平均法クラスタリング アルゴリズムを使用して画像の主要な色を特定する_PHP チュートリアルK 平均法を理解する画像によるアルゴリズム

以上がPython での K 平均法アルゴリズムの実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。