KMeansで何ができるの?

こんにちは!EMです^^

 

だんだん春も近づいてきましたね~!

こちらでは雪も解けてきて、気温もプラスの日が続いてポカポカです!

 

それでは今日もさっそくKMeansについて学んでいきましょう!

 

 

KMeansってどんな役割なのか?

 

前回の例では、KMeansを使ってうまく4つのクラスターを色で分ける事ができました。

ただ、もっと複雑なデータを扱ったときにも、KMeansを使って
客観的なグループ分けが出来るのでしょうか?

 

KMeansをもう少し掘り下げて理解していきましょう。

このモデルは、K(n_clusters)の特別な点をデータに適合させています。

これらの点は、それぞれのグループに対してラベルをつけていきます。

この点は「センター」と呼ばれ、それぞれがデータのクラスターの真ん中に
配置されます。

最適なセンターを見つけるアルゴリズムの中身は、めちゃくちゃ複雑です。

 

より詳細を知りたい方は、こちらのURLを参考にしてください。

https://en.wikipedia.org/wiki/Expectation%E2%80%93maximization_algorithm

 

データポイントXのラベルを予測するときは、1番近い中心と同じラベルに
割り当てます。

前回のデータでKMeansモデルを再実行した場合、今回は中心をプロットしました。

 

 

points_per_class = 100

mean = [5,5]
cov = [[1,0],[0,1]]
x_one = np.random.multivariate_normal(mean, cov, (points_per_class))

mean = [-5,-5]
cov = [[1,0],[0,1]]
x_two = np.random.multivariate_normal(mean, cov, (points_per_class))

mean = [4,-2.5]
cov = [[0.25,0],[0,0.25]]
x_three = np.random.multivariate_normal(mean, cov, (points_per_class))

mean = [-6,2.5]
cov = [[0.25,0],[0,0.25]]
x_four = np.random.multivariate_normal(mean, cov, (points_per_class))

X = np.concatenate((x_one,x_two,x_three,x_four),axis=0)

#Specify the model
k_means_model = KMeans(n_clusters = 4)
k_means_model.fit(X)


#Annotate the data points with the KMeans prediction
Y = k_means_model.predict(X)

#Plot
plt.scatter(X[:, 0], X[:, 1], c=Y, edgecolor='k')

#Plot the K centers
plt.scatter(k_means_model.cluster_centers_[:, 0],k_means_model.
cluster_centers_[:, 1], c='red',marker="*",s=200)
plt.show()
 

f:id:tennisfashionista:20210305014208p:plain

 
各センター(赤い星)がクラスターの中央に割り当てられましたね。
 
一例として、データラベルの割り当てを変えて、2つのセンターを調整してみましょう。
 
 
 
#Change the center locations (finds a bad fit)
k_means_model.cluster_centers_ = np.array([[ 4.93629851,  4.86487333],\
                                           [-0-6],\
                                           [ 3.98048973-2.49005718],\
                                           [-0,  -4]])

#Annotate the data points with the KMeans prediction
Y = k_means_model.predict(X)

#Plot
plt.scatter(X[:, 0], X[:, 1], c=Y, edgecolor='k')

#Plot the K centers
plt.scatter(k_means_model.cluster_centers_[:, 0],k_means_model.
      cluster_centers_[:, 1], c='red',marker="*",s=200)
plt.show()
 
 

f:id:tennisfashionista:20210305014739p:plain

 
 
これで、左上のセンターが近づいたため、左下のクラスターのデータの一部が
新しいクラスター(その真上のクラスターと同じ)に割り当てられます。
 
 
今回の図では、上記のクラスタリングはあまりにも不自然ですが
もっと複雑なデータを使って、線引きがきれいに出来ない際に、センターを調整して
様々な角度でグループ分けをする時にとても便利です。
 
 

 

クラスタリングは、ビジネスの場面でもよく使われます!

クラスタリングについては、次回も取り上げようと思いますが
もっと実践に近い内容を学びたい!という方には、めちゃくちゃこのコースが体系的でおススメです。
 

 ↓↓

 
 
これは、実践のビジネスの場でデータを使えるように指導してくれる、社会人の為の講座です! 
ぜひサイトや無料説明会等で情報を見てみてくださいね^^
 
 
また詳しくは簡単にメリットデメリット等もまとめているので
よかったら下の記事も参考にしてください^^
 
 
最後まで読んで頂きありがとうございました。