クラスター分析

Scikit-learnを用いた階層的クラスタリング (Hierarchical clustering)の解説

目次 1. 階層的クラスタリングの概要 __1.1階層的クラスタリング (hierarchical clustering)とは __1.2所と短所 __1.3 凝集クラスタリングの作成手順 __1.4 sklearn のAgglomerativeClustering __1.5 距離メトリック (Affinity) __1.6 距離の計算(linkage) 2. 実験・コード __2.1 環境の準備 __2.2 データロード __2.3 Euclidean距離のモデル学習・可視化 __2.4 Manhattan距離のモデル学習・可視化 __2.5 Cosine距離のモデル学習・可視化 1.1 階層的クラスタリング (hierarchical clustering)とは 階層的クラスタリングとは、個体からクラスターへ階層構造で分類する分析方法の一つです。樹形図(デンドログラム)ができます。デンドログラムとは、クラスター分析において各個体がクラスターにまとめられていくさまを樹形図の形で表したもののことです。ツリーのルートは、すべてのデータをクラスターで分類しており、一番下の部分は1件のデータになっています。 左側の図はクラスタリングする前のデータ分布で例えばこれを階層型クラスタリングしたものが右側の図になります(gifで過程が見えるようになっています)。この樹形図のグラフをよく階層型クラスターと呼びます。 1.2 階層的クラスタリングの長所と短所 クラスタリング手法の中でもkmeanのような非階層型クラスタリングと比べた時に以下のメリットとデメリットがあります。 長所 ・特定の数のクラスター(すなわち、k平均)の仮定なし ・可視化でクラスタリングの様子が自分で確認できる 短所 ・ノイズや外れ値に敏感です。 ・分類の対象が多い場合はkmeanよりも遅くなりがちなことがある。 代表的な階層型クラスタリングアルゴリズムには2つあります。 凝集性(Agglomerative)—ボトムアップアプローチ。 多くの小さなクラスターから始め、それらを結合して大きなクラスターを作成します。 分割型(Divisive) —トップダウンアプローチ。 小さなクラスターに分割するのではなく、単一のクラスターから始めます。 1.3 凝集クラスタリングの作成手順 1. 個々のデータが,それぞれ孤立したクラスタを形成している状態から開始します。 2. 全てのクラスタ対の間の距離を計算し,最も近いクラスタ対を見つけます。最も近いクラスタを併合し,この新しいクラスタにします。 …

Scikit-learnを用いた階層的クラスタリング (Hierarchical clustering)の解説 Read More »

アンサンブル学習(Ensemble learning)解説と実験

前回はアンサンブル学習のアルゴリズムを開設しました。アンサンブル学習のアルゴリズムは、同じ学習アルゴリズムの多数のEstimatorからの予測結果を組み合わせた技術である。今回は様々なアンサンブル学習手法を解説と実験したいと思います。 目次 1.  アンサンブル学習の概要 ___1.1 アンサンブル学習(Ensemble learning)とは ___1.2 バイアス(Bias)とバリアンス(Variance) 2. 基本的なアンサンブル学習 ___2.1 Max Voting ___2.2 Weighted Average Voting 3. 高度なアンサンブル学習 ___3.1 Bagging ___3.2 Boosting ___3.3 Stacking 4. まとめ 1.  アンサンブル学習の概要 1.1 アンサンブル学習(Ensemble learning)とは アンサンブル学習とは、(英:ensemble learning)とは日本語で合奏を意味します。その名の通り、簡単に言えば多数決をとる方法です。個々に別々の学習器として学習させたものを、融合させる事によって、未学習のデータに対しての予測能力を向上させるための学習です。 ビジネス判断に考えると、アンサンブル学習は1人で問題を解くより、複数人で意見を出し合って知識を補い合いながら解く方が、正答率上がるということになっています。 Kaggleなどのデータ解析競技には、頻繁にこの「アンサンブル学習」の話題が上がります。事実、多くのコンペティションの上位にランクインする方々はアンサンブル学習を活用しています。 1.2 バイアス(Bias)とバリアンス(Variance) アンサンブル学習を理解する上で前提となる知識、「バイアス(Bias)」「バリアンス(Variance)」の2つを説明します。機械学習の精度を向上するということは「予測値」と「実際値」の誤差を最小化することですが、その誤差をより的確に理解するために「バイアス」「バリアンス」が用いられます。 下の図は青い点が機械学習モデルの予測した値、赤い点がデータの実際の値を図式化したものです。 バイアス(Bias)は、推定値と実際値の平均的な違い。高いバイアス エラーは、性能が悪いモデルで、データ中の重要なトレンドを見逃します。 バリアンス(Variance)同じ観測で推定値の異なり具合。バリアンスが高いモデルは訓練データに当てはまりすぎて、訓練外では性能が悪いです。 低バイアスの状態(予測値と実際値の誤差が少ない)になりますが、その一方でバリアンスは高まり過学習に陥るケースがあります。良いモデルはバイアスとバリアンスの最も適切なバランスを調整してモデルの精度を向上させていきます。 アンサンブル学習の種類 アンサンブル学習の大まかな分類は以下になります。基本的なアンサンブルと高度なアンサンブル学習手法の大分類があります。(以下図の以外の方法もあります) 2.   基本的なアンサンブル学習手法 2.1 Max Voting Max Votingは異なる機械学習分類器を組み合わせ、多数決や予測の平均投票を使用し、クラスラベルを予測することです。そのような分類器は個々の弱点を相殺するため、モデルの生成に有効である場合もあります。 複数のモデルを訓練して各モデルの予測を最終的に多数決して決めます。 …

アンサンブル学習(Ensemble learning)解説と実験 Read More »

DTW(Dynamic Time Warping)動的時間伸縮法

前回「時系列データの評価方法」について解説しました。 時系列データの向け、時系列同士の類似度を測る際にDTWという手法があります。今回の記事はDTW(Dynamic Time Warping)/動的時間伸縮法について解説したいと思います。 目次 1.  DTWの概要 ___1.1 DTW(Dynamic Time Warping)/動的時間伸縮法とは ___1.2 DTWの計算 2.   tslearn.clusteringの説明 ___2.1 tslearn.clusteringのクラス ___2.2 パラメタの説明 3. 実験 ___3.1 データ理解 ___3.2 EuclideanとDTWのk-meansクラスター ___3.3 可視化 4. まとめ 1. DTWの概要 1.1 DTW(Dynamic Time Warping)/動的時間伸縮法とは DTWとは時系列データ同士の距離・類似度を測る際に用いる手法です。波形の距離を求める手法としてはユークリッド距離(Euclidean Distance)や マンハッタン距離等(Manhattan distance)があるかと思います。 DTWは2つの時系列の各点の距離(誤差の絶対値)を総当たりで求め、全て求めた上で2つの時系列が最短となるパスを見つけます。時系列同士の長さや周期が違っても類似度を求めることができます。 1.2 DTWの計算 類似度を算出したい2つの時系列データ S=s1,s2,…,sm,T=t1,t2,…,tn, があるとき,各時系列データを横・縦に並べたグリッドを考えることができる. このグリッドの点 (i,j)は要素siとtj間のアライメントに相当します。 ワーピングパス W=w1,w2,⋯,wk は 時系列データSとTの各要素を”距離”が小さくなるようにアライメントします。つまり,Wはグリッドの点の系列となります。   Derivative DTW Derivative DTWは時系列データ S=s1,s2,⋯,smの各要素に対して,次のような変換を行った時系列データS′=s′1,s′2,…,s′mをりようします。 …

DTW(Dynamic Time Warping)動的時間伸縮法 Read More »

PySparkでのk-meanクラスタリング

関係記事:クラスター数の決め方の1つシルエット分析、 k-means++ ビッグデータ処理や機械学習の場合は、巨大データの取り扱いを目的とした分散処理のフレームワークが必要です。特定のアプリケーションに関する実行性能はSpark MLです。今回の記事はSpark MLでk-meanのクラスタリングを解説します。 目次 1. PySparkのクラスタリング 2. 実験・コード __2.1 ライブラリーのインポート __2.2 データ処理 __2.3. シルエットスコアの比較 __2.4. クラスタリングのモデルを作成 __2.5. 可視化 1. Spark MLのk-meanクラスタリング Spark MLはSparkの統計処理、機械学習を分散処理するライブラリです。k-meanはは最も一般的に使われる、事前に定義したクラスタ数までデータを群にする、クラスタリング アルゴリズムです。 spark.mlでのパラメータ: – k は要求するクラスタの数です。 – maxIterations は実行の繰り返しの最大数です。 – initializationMode はランダム初期化 – initializationSteps は k-meansアルゴリズム内でのステップ数を決定します。 – epsilon はk-meansが収束したと見なす距離の閾値を決定します。 – initialModel は初期化に使用されるクラスタの中心点の任意のセットです。 2. 実験・コード 概要 データセット: UCI機械学習リポジトリの白ワインの属性 環境: Databricks Runtime Version: 6.0 ML (includes …

PySparkでのk-meanクラスタリング Read More »

DBSCANクラスタリングの解説と実験

前回の記事は密度ベースクラスタリングのOPTICSクラスタリングを解説しました。 今回の記事はもう一つの密度ベースクラスタリングのDBSCANクラスタリングを解説と実験します。 目次: 1.DBSCANとは 2.Sci-kit LearnのDBSCAN 3.コード・実験 (K-Mean++ vs DBSCAN) 4.まとめ DBSCANとは DBSCAN (Density-based spatial clustering of applications with noise ) は、1996 年に Martin Ester, Hans-Peter Kriegel, Jörg Sander および Xiaowei Xu によって提案された密度準拠クラスタリングのアルゴリズムです。半径以内に点がいくつあるかでその領域をクラスタとして判断します。近傍の密度がある閾値を超えている限り,クラスタを成長させ続けます。半径以内に近く点がない点はノイズになります。 長所 1)k-meansと違って,最初にクラスタ数を決めなくてもクラスターを作成できます。 2)とがったクラスターでも分類できます。クラスターが球状であることを前提としない。 3)近傍の密度でクラスターを判断します。 短所 1)border点の概念が微妙で,データによりどのクラスタに属するか変わる可能性があります。 2)データがわからないとパラメータを決めるのが難しいです。 DBSCANの計算プロセスの例1 DBSCANのアルゴリズムは半径以内に確認します。半径以内に3個以上の点があれば、グループを成長させ続けます。左の2列は2点しかないなので、グループに属しません。また、一番下の行は半径以外なので、グループに属しません。 DBSCANの計算プロセスの例2 以上の例と同じ、DBSCANは半径以内に確認して、グループに属するかどうか判断します。最初は上からと下からでグループを確認します。上の確認は半径以外になると、途中に止まりました。このようにDBSCANのアルゴリズムはすべての点はグループを確認します。   DBSCANの論文: A Density-Based Algorithm for Discovering Clusters in Large Spatial Databases …

DBSCANクラスタリングの解説と実験 Read More »

クラスタリングのアルゴリズム評価するFMI( Fowlkes-Mallows Index)

前回の記事はアルゴリズム評価を解説しました。 今回はクラスタリングのアルゴリズム評価するFMIを解説します。 FMI (Fowlkes-Mallows index)とは The Fowlkes-Mallows 指標 または、Fowlkes-Mallows スコアはクラスタリングのアルゴリズム評価する方法です。2つのクラスタリングアルゴリズムの結果間の類似性を判断するために使用されるこの方法。さらに、クラスタリングアルゴリズムの結果と実際のラベルも使われます。FMIの形式は下記になります。 TPは真陽性の数です。つまり、真のラベルと予測ラベルの両方で同じクラスターに属するポイントの数です。 FPはFalse Positiveの数です。予測ラベルではなく、真のラベルの同じクラスターに属するポイントの数です。 FNはFalse Negativeの数です。真のラベルではなく、予測ラベルの同じクラスター内です。 スコアの範囲は0〜1です。高い値は、2つのクラスター間の類似性が高いと示します。 今回は、ラベルがあるクラスタリング方法の評価をしていきます。 FMIのサンプル データセット:digitデータ 8×8の画像が1797枚(0〜9のラベル) クラスターアルゴリズム: K-Means, MeanShift モデル評価:FMI (Fowlkes-Mallows index) ライブラリの読み込む import numpy as np import pandas as pd import os import seaborn as sns import matplotlib.pyplot as plt from tqdm import tqdm_notebook from sklearn import datasets from sklearn.cluster import KMeans …

クラスタリングのアルゴリズム評価するFMI( Fowlkes-Mallows Index) Read More »

密度ベースのOPTICSクラスター

  前回の記事はk-means++, x-meansなどのクラスター分析を解説しました。 今回は密度ベースのOPTICSクラスターを解説します。 OPTICSクラスターとは OPTICS (Ordering Points To Identify the Clustering Structure)は密度ベースのクラスター分析(Density-based Clustering)の手法の一つです。ポイントが集中しているエリアおよび空または疎なエリアによって分離されているエリアを検出します。このアルゴリズムは、空間位置および指定された近傍数までの距離のみに基づいてパターンを自動的に検出します。DBSCANと似ているアルゴリズムになります。そのためクラスター数を決める必要がないアルゴリスムになります。 DBSCAN と OPTICSの検索距離 DBSCAN では、3つの点が存在しています。クラスターの中心、クラスターから到達できるもの、そしてノイズになります。特定のポイントからの検索距離の範囲内でクラスター内にない場合は、そのポイントにはノイズとして他のクラスターだとマークが付けられます。そのためクラスタリングといいつつ外れているものも検出することになります。 OPTICS の場合、検索距離は中心距離と比較される最大距離として扱われます。マルチスケール OPTICS は、最大到達可能性距離の概念を使用します。この距離は、あるポイントから、検索によってまだ訪問されていない最も近いポイントまでの距離です。 sklearn.cluster.cluster_optics_dbscanでOPTICSクラスターを作成します。scikit-learn 0.21.3が必要です。 pip install -U scikit-learn ライブラリのロード %matplotlib inline from sklearn.cluster import OPTICS, cluster_optics_dbscan import matplotlib.gridspec as gridspec import matplotlib.pyplot as plt import numpy as np サンプルを作成 np.random.seed(0) n_points_per_cluster = 250 C1 …

密度ベースのOPTICSクラスター Read More »

Group Lassoの正則化

前回、【正則化のLasso回帰とRidge回帰】について説明しました。 今回の記事はLasso進化形のGroup Lassoの正則化について解説します。   Group Lassoとは Group Lassoは、説明変数の属性に基づいていくつかのグループに分けられるとき、変数選択においてグループ単位で選択したいときに利用する方法です。 Lassoというのは、正則化項にL1normを使ったいわゆるL1正則化のことで、大部分の重みが0に潰れて疎な解が得られます。   この進化形として、Group Lassoという手法があります。Group Lassoでは、重みベクトルの次元をグループ分けして、各グループごとのL2normを正則化項として使います。 使うメリットは以下になります。 カテゴリー変数の効果をモデルに反映 例えば、都道府県を説明変数に入れる場合があります。この場合は、各都道府県をフラグ化して、変数にします。しかしこの方法では「都道府県じたい」が効果のある変数かどうかを判定したい場合にはわかりません。そのためカテゴリー変数じたいの効果の有無を調べる場合にGroup Lassoを使うとわかります。   大規模な線形分類、回帰のライブラのsklearn-contrib-lightningをインストールします。 pip install scikit-learnpip install sklearn-contrib-lightning   ライブラリのインポート from sklearn.datasets import fetch_20newsgroups_vectorizedfrom lightning.classification import CDClassifier   20 newsgroupsはこのブログでも過去何回か取り上げまたしが、ベクトル化済みのデータです。 (130,107のカラム) bunch = fetch_20newsgroups_vectorized(subset=”all”)X = bunch.datay = bunch.targetprint(X.shape)print(y.shape) (18846, 130107)(18846,)   分類の設定と学習 clf = CDClassifier(penalty=”l1/l2″,                   loss=”squared_hinge”,                   multiclass=True,                   max_iter=20,                   alpha=1e-4,                   …

Group Lassoの正則化 Read More »

X-means法でクラスタ数を推定する方法

  前回、【クラスタ数の決め方の1つシルエット分析】について説明しました。 今回の記事はもう一つのクラスタ数を自動推定するX-meansについて紹介します。 x-meansとは x-meansは、k-meansのクラスター数kを自動推定しつつクラスタリングしてくれる手法です。k-meansの逐次繰り返しとBIC(Bayesian information criterion)による分割停止基準を用いて最適なクラスター数を決定します。 BICは重心の近くにガウス分布している仮定してBICを計算します。   詳細はx-meansの論文になります。 今回は「pyclustering」のライブラリを使用して、x-meansのクラスタ数推定を行います。 先ず、ライブラリの読み込み %matplotlib inline import pyclustering from pyclustering.cluster import xmeans import numpy as np import matplotlib import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn.datasets import make_blobs   サンプルの作成 X, y = make_blobs(n_samples=5000,                   n_features=2,                   centers=4,                   cluster_std=1,                   center_box=(-10.0, 10.0),                   shuffle=True, …

X-means法でクラスタ数を推定する方法 Read More »

ランダムフォレストのアンサンブル【Random Forest Ensemble】

前回の記事 「ランダムフォレスト(分類分析)」はランダムフォレストの特徴とランダムフォレストの例について話しました。ランダムフォレストは分類や回帰に使える機械学習の手法です。今回は別のランダムフォレストアンサンブルのクラスター分析の一つを説明します。 先ずアンサンブルはなんのことでしょう? アンサンブル手法 (Ensemble methods) 同じ学習アルゴリズムの多数のEstimatorからの予測結果を組み合わせた技術。この方法は、一つのEstimatorと比較して一般化可能性/ロバスト性を向上させます。 ランダムフォレストアンサンブル (Random Forest Ensemble) 教師なしデータセットの高次元スパース表現への変換の手法。データポイントは、各ツリーのどのリーフに分類されるかによってコード化されます。 葉のワンホットエンコーディングを使用して、これは森の中に木があるのと同じくらい多くのものとのバイナリコーディングをもたらします。 次元削減法を適用した高次元表現を学びます。 ただし、データセットをクラスが線形分離可能な表現にキャストすると便利なことがよくあります。