科学の箱

科学・IT・登山の話題

機械学習

Pythonではじめる機械学習 – k-Means

投稿日:

k-Meansの概要

k-Meansは教師なし学習の一つであり、あらかじめ指定された数にグループを分ける。

例えば今身長である程度まとまって席に座っている生徒を考えます。k-Meansでは最初に分けるグループ数のみ指定されています。これを例えば3とします。

一回目のサイクルは以下のように始まります。

  1. k-Meansは最初にクラス内の適当な場所に旗を3つ立てます。
  2. この旗に生徒をすべての所属させます。所属方法は生徒と旗の距離から計算します。
  3. 次に所属している生徒すべての中心となる点を探しここに旗を移します。

2回目のサイクルは以下の陽なります

  1. 移った旗の位置に従って生徒の所属を変えます。大部分の生徒は同じ旗に残ることが予測されますが、何人かの生徒は移動します。
  2. 移動が終わったら新たに中心となる点を探しここに旗を移します。

3回目以降は2回目のサイクルを繰り返します。旗が移動しなくなるあるいはあらかじめ指定されたより移動しなくなれば終了です。この時点で旗に所属している状態によりクラスタリングをします。

Expectations – Maximization

E-Step : データを最も近い中心点に割り当てる

M-Step : クラスタの中心をデータの中心点に割り当てる

k-Means法のデメリット

最初のランダムポイントによっては最適解を得られない可能性がある。

  • 最初の選択位置が理想とするクラスタの位置とは異なる場合、例えば同じクラスタに複数の中心が入るなど、最適なクラスタを得られない可能性がある。
  • 複数のランダムシードでクラスタリングを実施する

クラスタ数を指定する必要がある

  • あらかじめクラスタ数を指定する必要がある。
  • クラスタ数の指定にはデータの可視化もしくは何らかの方法によりクラスタ数を予測しなければならない。
  • しかしそもそもクラスタ数が予測できるならば、データの割り当てもk-Meansによらなくてよい

複雑なクラスタには向いてない

  • データの境界が複雑になっている場合には良い結果にはならない
  • カーネル化したk-Meansを利用する

データ数に比例して時間が極端に遅くなる

  • 試行のたびにすべてのデータについて計算をする。
  • データが増えるとそのまま処理にかかる時間も増える。
  • ミニバッチを利用する(クラスタ内の一部のデータを利用して中心を更新する)

k-Means on Digits

クラスタリング自体は正しい数値ラベルを持たないで、各クラスタのデータからラベルを付けなおす必要がある

from scipy.stats import mode

# 値が0の10次元のリスト
labels = np.zeros_like(clusters)

for i in range(10):
    mask = (clusters == i) 
    # 0~9のクラスタについてTrue, Falseリスト
    labels[mask] = mode(digits.target[mask])[0]
    # digits.target[mask]で該当マスクのデータをすべて取得
    # modeで最頻値を取得
    # リスト0番目に最頻値が入っている
    # labelを正しい数値で付け替える

 

検証方法のステップ

  1. 正解率からモデルの信頼度を確認する
  2. 混同行列から間違いに傾向があるかを確認する

k-Means on Color Compression

RGBから生成される色は16million通りある。これはR=255, G=255, B=255であるからRGBの組み合わせは255*255*255=16581375となる。

しかし実際にRed/Gree, Red/Blueを見てみると使っている使っている色は対角線上に集まっている。プロットがないスペースが広くみられる。これより色を集約できると考えられる。

k-Meansにより16色まで減らしてみる。画面右上の青~青白が不自然に境界が出ていることがわかる。

実際のイメージで確認すると空の部分が不自然に境界ができている。しかし他の部分は16色まで減らしても不自然さは感じられない。

メタ情報

inarticle



メタ情報

inarticle



-機械学習

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

Pythonではじめる機械学習 – Chap03

3.1 Types of Unsupervised Learning 教師なし学習の例 次元削減: 重要な特徴量のみを使って元のデータを表現する トピック抽出: データを構成する部品を見つける クラス …

no image

手書き数字データについて次元縮約および教師ありモデルの構築

前回手書き数字データについてイメージで確認した結果、人の目で確認する分には区別ができる。では機械学習ではどのように実施していくのか。 今回は以下の内容について説明する。 多様体学習による次元縮約 ナイ …

no image

条件付きでレコードを取得する

データフレームでは条件付きでレコードを取得できる。 以下のようなフォーマットのデータフレームを考える id name height vector1 <- c(1, 2, 3, 4, 5) vec …

no image

kaggle Titanic Tutorial – 3

DecitionTreeのパラメータを調整する。 まずはMaxDepthから from sklearn.model_selection import LeaveOneOut from sklearn. …

no image

独立性の検定 2つ

ニートの年齢別割合が1996年と2012年で関連性があるか独立性の検定をしてみる。 ニートの割合  1996 2012 15~19歳 9 9 20~24歳 12 17 25~29歳 10 18 30~ …

2019年11月
« 10月   12月 »
 123
45678910
11121314151617
18192021222324
252627282930  

side bar top



アーカイブ

カテゴリー