클러스터링 기법 클러스터링

소개



클러스터링에 대해 살펴보면, 분할과 무책임한 scikit-learn이-라든지 기계 학습이-라든지 말하는 페이지가 매우 많았기 때문에,
  • 왜 클러스터링을 수행하는지와 그주의 사항
  • 클러스터링에는 어떤 분류가 있습니까
  • 각 방법의 장점과 단점, 왜 그 방법을 사용하는가
  • 특정 라이브러리 선택

  • 라는 관점에서 정리해 보았습니다.

    프로그래머이고 수학 약자이므로, 깊이 들어간 수학적인 늪에 대해서는 말할 수 없습니다.

    구체적인 라이브러리는 Python Scipy와 scikit-learn을 사용합니다.

    기본적으로 인용이 많은 기사이므로, 아래의 참고 페이지를 읽어 주셨으면합니다. 또, 인용원의 저자씨로, 인용을 제외해 주셨으면 하는 경우는 연락해 주세요. 즉시 대응합니다.

    클러스터링을 수행하는 이유와 주의 사항



    클러스터링이란?



    원래 기계 학습의 기법은 크게 나누어 교사와 교사 없이 나눌 수 있다.
  • 교사 있음 학습 : 인간이 준 정답을 바탕으로 관측 데이터로부터 예측하는 규칙을 생성. (예: 오소마츠씨의 판정이라든지. 먼저 각각의 정답을 배우게 하고 있다.)
  • 교사 없음 학습 : 관측 데이터 만 대상으로 분석합니다. (예: 대량의 데이터를 넣어 분류시키는 등)

  • 클러스터링 (clustering)은 클러스터 분석 (cluster analysis) 및 데이터 클러스터링 (data clustering)이라고도 불리는 대표적인 교사없는 학습 방법입니다.

    데이터 집합을 클러스터라고하는 부분 집합으로 나누는 것으로, 내부 결합 (internal cohesion)과 외부 분리 (external isolation)의 성질을 갖는다.

    上図は,参考ページ [3] クラスタリングに関する講演・講義資料 におけるスライド 3 より引用. (2017/7/7 閲覧)

    そもそも,教師なし学習の手法であるため,分類の基準が決まっておらず,分類のための外敵基準や評価が与えられていない場合に行う.つまり,分類してみてから,どうしてそのように分類されたかを分析する必要がある.そのため,これが最適と呼べるようなクラスター分析が存在するわけではないということを留意しなければならない.

    클러스터링의 주의점

    神蔦先生より,

    最も重要な点は,クラスタリングは探索的 (exploratory) なデータ解析手法であって,分割は必ず何らかの主観や視点に基づいているということです.よって,クラスタリングした結果は,データの要約などの知見を得るために用い,客観的な証拠として用いてはなりません.

    また,

    クラスタリングの結果は,その利用目的などに応じて,妥当性を常に検証する必要があります.
    得られたクラスタは絶対的・客観的なものではなく,あくまで一つのある視点から見た結果であることに留意.

    に全て集約されている.

    クラスタリングの結果,グループ分けされた結果を解釈して,他者でも納得できるような意味を与えることが,クラスタリングの価値を大きく左右する重要なプロセスであるとも言える.

    また,クラスタリングはあくまで分類のみであるため,分類された対象ごとに相関分析や回帰分析を行うことで,成立している法則性・相関関係・因果関係を考察しなければならない.

    클러스터링 분류

    クラスタリング手法をネストして分類すると,

    • 階層的 (hierarchical)
      • 凝集型 (agglomerative)
        • 単リンク法 (single linkage method) 別名:最短距離法
        • 完全リンク法 (complete linkage method) 別名:最長距離法
        • 群平均法 (group average method)
        • Ward 法 (Ward's method) 別名:最小分散法
        • セントロイド法 (centroid method) 別名:重心法
        • 重み付き平均法 (weighted average method)
        • メジアン法 (median method)
      • 分割型 (divisible)
        • データ集合全体が一つのクラスタの状態から,順次クラスタを分割して,クラスタの階層を生成する.
    • 非階層的 (non-hierarchical) 別名:分割最適化 (partitional optimization)
      • K-means 法 別名:K 平均法
        • 派生的手法:K-means++
      • その他沢山

    に分けられる.

    階層的手法は最も距離 (類似度) が近くて似ている組み合わせからまとめていくという方法である.最終的にはツリー状のデンドログラムを書くことができる.この距離 (metric) についても様々な定義が存在する.(後述する) また,クラスタ間における距離の定義も複数存在し,上で挙げた7つの手法に分類される.

    非階層的手法は逆にいくつのクラスターに分けるかあらかじめ決め,決めたクラスター数になるようにまとめていく手法である.代表的な手法として,K-means 法があり,これは K 個のクラスターに means (平均) を用いてまとめていくという手法である.

    계층적 방법에 대해

    각 클러스터 간의 거리를 결정하는 정의 (method)

    단 링크법, 최단 거리법

    2つのクラスタのそれぞれの中から一つづつ点を選び距離を求め,その内で最も近い距離をクラスタ間の距離として用いる.

    特徴として,

    • 実用上,外れ値に弱い
    • 細長いクラスタが出やすい
    • 分類感度が低く,連鎖しやすい

    などが挙げられる.

    완전 링크법, 최장거리법

    2つのクラスタのそれぞれの中から一つづつ点を選び距離を求め,その内で最も遠い距離をクラスタ間の距離として用いる.

    特徴として,

    • 実用上,外れ値に弱い
    • クラスタの大きさが揃いやすい
    • 分類感度は高い

    などが挙げられる.

    그룹 평균법

    単一リンク法と完全リンク法の折衷案.2つのクラスタのそれぞれの中から一つづつ点を選び距離を求め,その平均をクラスタ間の距離として用いる.重みのない平均距離を用いる手法.

    特徴として,

    • 単リンク法と完全リンク法の中間的なクラスタが得られる
    • 外れ値に強く,実用的に便利

    などが挙げられる.

    Ward 법, 최소 분산법

    併合後のクラスタの分散と,併合前のクラスタの分散のそれぞれの和と差が最小となるクラスタ同士を併合していく.要約すると,内部の平方距離を用いているって感じ.

    特徴として,

    • 実用上,外れ値に弱い
    • 最も明確なクラスターが出やすい
    • 一番代表的な手法

    などが挙げられる.

    센트로이드법, 중심법

    それぞれのクラスタの重心の間の距離の2乗をクラスタ間の距離として用いる.metric はユークリッド距離にのみ適している.

    特徴として,

    • クラスタ間の距離が逆になりやすい
    • 単純なセントロイドになる場合がある

    などが挙げられる.

    가중 평균 방법

    u と v のクラスタ間の距離を決める際,u 以外の全てのクラスタと,v との距離の平均を用いる.要は,平均距離にそれ以外のクラスタを用いて重み付けを行っているって感じである.

    これと,メジアン法は計算量が少ないという利点があったが,そもそも計算機の発達によりあまり使われなくなっている.

    메디안법

    重心法の変形で,それぞれの重心にクラスタ内の個数に応じた重み付けを行っている.metric はユークリッド距離にのみ適している.

    각 거리 정의 (metric)

    • euclidean:ユークリッド距離
    • minkowski:ミンコフスキー距離
    • cityblock:マンハッタン距離
    • seuclidean:標準化されたユークリッド距離
    • sqeuclidean:乗ユークリッド距離
    • cosine:コサイン距離 (1からベクトルの余弦を引いたもの)
    • correlation:層間距離(1から標本相関を引いたもの)
    • hamming:異なる座標の比率を示すハミング距離
    • jaccard:1からジャカード係数を引いた値
    • chebychev:チェビシェフ距離(最大座標差)
    • canbella:キャンベラ距離
    • braycurtis:ブレイ・カーティス距離
    • mahalanobis:マハラノビス距離

    等が存在する.基本的にユークリッド距離のみを使っていれば良いはず,,,

    他にも,yule, matching, dice, kulsinski, rogerstanimoto, russellrao, sokalmichener, sokalsneath, wminkowski などが存在する.

    어떤 기술을 사용할 것인가?

    1. サンプルでクラスタリングするか,変数でクラスタリングするか決める.
    2. 階層構造が必要なら階層的クラスタリング,データが大きい場合は非階層的クラスタリングである K-means 法を用いる.
    3. 分類に用いる距離 (類似度) の定義をどれを用いるか決める.
    4. それぞれの手法に応じた選択を行う.

    階層構造が必要な場合,とりあえず method は ward 法か群平均法,metric は eucidian, cosine, correlation, chebychev, mahalanobis ぐらいから総当りでやってみる.結果が気に入らない場合は,method を単一リンク法や完全リンク法に変えて試してみると良い.

    階層構造が必要ない場合,k-means 法の初期値問題を解決しようとした k-means++ 法を用いれば良い.k 個のクラスタに分けるため,k の値を変えつつ最も適当な k の値を決めると良い.

    파이썬 라이브러리 정보

    계층적 기법

    scipy.cluster.hierarchy를 사용하면됩니다. method는 scipy.cluster.hierarchy.linkage, metric은 scipy.spatial.distance.pdist 근처에 정리되어 있다.

    영어이지만 이 페이지가 매우 잘 정리되어 있다. SciPy Hierarchical Clustering and Dendrogram Tutorial

    scikit-learn을 사용하여 계층 적 기법의 덴드로그램을 작성하는 방법은 발견되지 않았다.

    비 계층 적 방법 (k-means 방법)



    Syipy와 scikit-learn 라이브러리 모두 사용할 수 있습니다.

    Scipy의 경우 scipy.cluster.vq은 공식 문서입니다. 어느 쪽이든, scikit-learn을 사용하는 것이 주류 같고, 실제로 하고 있는 사람은 그다지 없는 것 같습니다.

    scikit-learn의 경우 scikit-learn A demo of the mean-shift clustering algorithm, scikit-learn의 클러스터 분석 (K-means 방법)k-means의 최적 클러스터 수를 확인하는 방법 당이 참조가됩니다.

    마지막으로



    각 라이브러리의 코드에 대해 쓰려고 생각했습니까? 언젠가 가필하고 싶습니다.

    또, 지적등 받을 수 있으면 고맙습니다.

    추가 (2017/07/07)



    certeron 씨의 지적으로부터 그림의 인용원의 기술이 불충분하다는 것과 계층형 분류의 미비가 있었기 때문에 명기·수정을 실시했다.

    참고 페이지



  • 기계 학습 클러스터링 정보 : 선구자. 이것을 Python 라이브러리에 넣을 수 없다고 생각하는 곳에서 시작했습니다.

  • 클러스터링 (클러스터 분석) :가미쓰키 선생님의 기사. 매우 도움이됩니다.

  • 클러스터링에 관한 강연·강의 자료 : 神蔦 선생님의 강의 자료. 이것을 읽어두면 좋은 느낌이 있다.
  • 神嶌敏弘. "데이터 마이닝 분야의 클러스터링 기법 (1)." 인공 지능 학회지 18.1 (2003).

  • 대표적인 기계 학습 기법 목록 : 기계 학습 기법의 분류에 대해.

  • Scipy.org scipy.cluster.hierarchy.linkage :method

  • Scipy.org scipy.spatial.distance.pdist :metric 정보
  • scikit-learn A demo of the mean-shift clustering algorithm
  • 좋은 웹페이지 즐겨찾기