科学の箱

科学・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

仕事で始める機械学習 – 2.機械学習で何ができるか – 分類 – パーセプトロン

パーセプトロン 判別式 それぞれのデータに対して重みづけした値 ヒンジ損失 パーセプトロンの損失関数をヒンジ損失という。パーセプトロン基準とも呼ばれる。 sum(wx) 状態 ラベル label*su …

no image

Exploratory Data Analysis

データを取得した後にやることは、データの構造化とクレンジング。それが完了したらData Exploratory Analysisに入る。 Exloratory Data Analysis(EDA)に関 …

no image

Core Concept in Data Analysis – Week 3

2d Analsysis 分布図 相関 回帰分析 因果関係 ガルトンはダーウィンのいとこ Related posts:research pipeline手書き数字のデータセットについてイメージを確認m …

no image

AWStatで基本指標を読む

ウェッブサイトの分析でまず見るべきことは月ごとのトレンドである。確認すべき指標はPV, 訪問数、UUdとなる。 AWStatではこれらの項目はWhen -> Month Historyで棒グラフ …

no image

irisデータを読み込んでseabornでいろいろ表示をしてみる。

data可視化ライブラリのseabornではすぐに機械学習を始められるように質が良いデータが用意されている。その中でも最も有名であるirisについてpairplotを使って可視化してみる。 ここでは以 …

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

side bar top



アーカイブ

カテゴリー