LoginSignup
6
10

More than 3 years have passed since last update.

k-means法でデータを分類

Last updated at Posted at 2020-11-25

こんにちは、Mottyです。
今回は分類(クラスタリング)をPythonで行いました。

分類とは

統計や機械学習においての分類とは、データを似た特徴のグループに分類することを指す。
事前に基準がない状態で行うので、「教師なし学習」の1つとなる。

KMeans法

K平均法とはクラスタの平均を用いて与えられたクラスターの数(k個)に分類するアルゴリズムである。各データが重心にどれくらい近いかでクラス分けをし、重心を逐次更新していくことで分類構造を最適化していく。

 2020-04-12 18.49.13.png

Pythonで実装

KMeans.py
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs as mb


clf = KMeans(n_clusters = 3)
N = 100 #Number of sample

dataset = mb(centers = 3)
features = np.array(dataset[0])
pred = clf.fit_predict(features)

 2020-04-12 18.51.40.png
綺麗に分類できた。

なおデータ自体が綺麗であること、Kの数が適切であること、アルゴリズムの選択が適切である事条件が揃っていない場合はこのように綺麗に分けられないケースが考えられる。

異常値が存在する場合

NOISE = [25,25]
features = np.append(features,NOISE).reshape(-1,2)

 2020-04-12 18.56.36.png

クラスタ数が適切でない場合

dataset = mb(centers = 4)

 2020-04-12 18.59.44.png

分類アルゴリズムがそもそもKMeansに適していないケース

makemoons.py
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs as mb

clf = KMeans(n_clusters = 2)

X1,y1 = make_moons(noise = 0.05, random_state=0)
pred1 = clf.fit_predict(X1)

for i in range(2):
    labels = X1[pred1 == i]
    plt.scatter(labels[:,0],labels[:,1])

plt.show()

 2020-04-12 19.03.03.png

終わりに

分類アルゴリズムにも様々あり、今回はそのうち代表的なものの1つであるKMeans法について記述しました。
SVMやランラムフォレスト等の分類についても後々記述していきたいと思います。

6
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
10