PythonでのK-meansの実現
K-meansアルゴリズムの概要
K-meansは機械学習で比較的よく使われるアルゴリズムで、監視なし学習アルゴリズムに属し、データのクラスタリングによく用いられ、クラスタの数を指定するだけで自動的に複数のクラスにデータを集約することができ、同じクラスタのデータ類似度が高く、異なるクラスタのデータ類似度が低い.
K-menasのメリットとデメリット:
メリット:原理単純 速度が速い ビッグデータセットに比較的良い伸縮性 がある.
欠点:クラスタリング数K を指定する必要がある.異常値に敏感 初期値に敏感 K-meansのクラスタリングプロセス
そのクラスタリング過程は勾配降下アルゴリズムに類似し,代価関数を確立し,反復により代価関数値をますます小さくする. cクラスの初期中心を適切に選択する. k回目の反復では、任意のサンプルに対して、c個の中心までの距離を求め、このサンプルを距離が最も短い中心があるクラスに分類する. は、クラスの中心値を平均値などの方法で更新する. すべてのc個のクラスタ中心について、(2)(3)の反復法で更新した後、値が変わらない場合、反復は終了し、そうでなければ反復は継続する.
このアルゴリズムの最大の利点は簡潔さと迅速さにある.アルゴリズムの鍵は初期中心の選択と距離式にある.
K-meansインスタンス展示
pythonのkmのいくつかのパラメータ:
コードの例を示します
より直感的に説明するために、今回は画像に2次元を描くのが直感的であるため、データは2次元に調整され、100点を選択して描画され、クラスタリングカテゴリは3クラスである.
クラスタリング効果は良好であることがわかり、k-meansのクラスタリング効率をテストし、次元を50次元に拡大した.
データ規模
時間を費やす
データ次元
10,000
4s
50次元
100000件
30s
50次元
1000000件
4'13s
50次元
百万級のデータに対して、フィッティング時間はまだ受け入れられるが、可視効率は悪くない.モデルの保存は他の機械学習アルゴリズムモデルの保存と似ている.
K-meansは機械学習で比較的よく使われるアルゴリズムで、監視なし学習アルゴリズムに属し、データのクラスタリングによく用いられ、クラスタの数を指定するだけで自動的に複数のクラスにデータを集約することができ、同じクラスタのデータ類似度が高く、異なるクラスタのデータ類似度が低い.
K-menasのメリットとデメリット:
メリット:
欠点:
そのクラスタリング過程は勾配降下アルゴリズムに類似し,代価関数を確立し,反復により代価関数値をますます小さくする.
このアルゴリズムの最大の利点は簡潔さと迅速さにある.アルゴリズムの鍵は初期中心の選択と距離式にある.
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次元を描くのが直感的であるため、データは2次元に調整され、100点を選択して描画され、クラスタリングカテゴリは3クラスである.
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()
クラスタリング効果は良好であることがわかり、k-meansのクラスタリング効率をテストし、次元を50次元に拡大した.
データ規模
時間を費やす
データ次元
10,000
4s
50次元
100000件
30s
50次元
1000000件
4'13s
50次元
百万級のデータに対して、フィッティング時間はまだ受け入れられるが、可視効率は悪くない.モデルの保存は他の機械学習アルゴリズムモデルの保存と似ている.
from sklearn.externals import joblib
joblib.dump(km,"model/km_model.m")