クラスター分析

スペクトラルクラスタリングのパラメータ解説

  以前の記事はスペクトラルクラスタリングについて説明しました。スペクトラルクラスタリングとは、クラスタリングの機械学習の方法のうち、教師なし学習に分類されます。スペクトラルクラスタリングの詳細はこちらです。   今回の記事はスペクトラルクラスタリングのパラメータ設定を説明します。 Scikit-learnのライブラリのパラメータを説明していきます。   class sklearn.cluster.SpectralClustering(n_clusters=8, eigen_solver=None, random_state=None, n_init=10, gamma=1.0, affinity=’rbf’, n_neighbors=10, eigen_tol=0.0, assign_labels=’kmeans’, degree=3, coef0=1, kernel_params=None, n_jobs=None)   先ず、スペクトラルクラスタリングの例を作成します。   from sklearn import datasets   # データ作成 X,z = datasets.make_blobs(n_samples=5000,                           n_features=2,                           centers=15,                           cluster_std=1.2,                           center_box=(-10.0, 10.0),                           shuffle=True,                           random_state=111                           )   # データの整形 sc=preprocessing.StandardScaler() sc.fit(X) X_norm=sc.transform(X)   …

スペクトラルクラスタリングのパラメータ解説 Read More »

クラスター数の決め方の1つシルエット分析

シルエット分析(Silhouette analysis)とは シルエットは、クラスターの解釈と一貫性な評価の手法です。各クラスターにどれくらいうまくグループしているかを簡潔にグラフィカルに表現します。 シルエット分析は、クラスタリングの結果を評価する事ができます。 シルエットプロットは、1つのクラスター内の各点が隣接するクラスター内のどの点にどれくらい近いかを示すもので、クラスター数などのパラメーターを視覚的に評価する方法です。 この評価の範囲は[-1、1]です。 +1に近いシルエット係数は、標本が隣接するクラスターから遠く離れていることを示します。クラスタリングの分離性能が良いと判断できます。0の値は、隣接する2つのクラスター間の決定境界にあるか、またはそれに非常に近いことを示しており、分離性能が悪い事を示しています。マイナス値だとクラスター化されたサンプルは間違ったクラスターに所属している可能性があります。できる限り1に近い事が目標になります。 実験: 今回の分析は、クラスター数の決め方法を説明します。 シルエットプロットは、3,5,6のクラスター数が、平均シルエットスコア以下になります。シルエット分析は、2と4のクラスター数は高いシルエットスコアになっています。シルエットスコアを使う時に、注意しないといけない事として分離の具合を評価している指標のため、クラスター数が少ないときは高くスコアが出ます。そのため、シルエットプロットも確認し、各クラスターの厚さが似ている事とシルエットスコアの先端部分が超えている事を確認し、クラスター4とします。 Out: For n_clusters = 2 The average silhouette_score is : 0.7049787496083262 For n_clusters = 3 The average silhouette_score is : 0.5882004012129721 For n_clusters = 4 The average silhouette_score is : 0.6505186632729437 For n_clusters = 5 The average silhouette_score is : 0.56376469026194 For n_clusters = 6 …

クラスター数の決め方の1つシルエット分析 Read More »

k-means++

前回の記事にはGMMモデルとMini Batch K-MeansとSpectral Clusteringについて説明します。この記事では、k-means++について説明していきます。 k-means++とは k-means++法は、非階層型クラスタリング手法の1つで、k-means法の初期値の選択に改良を行なった方法です。 先ず、k-meansの初期値の流れは以下のようになります。 1. クラスタ数kを決める2. データが含まれる空間にランダムにk個の点(セントロイド)を置く3. 各データがセントロイドのうちどれに最も近いかを計算して、そのデータが所属するクラスタとする4. セントロイドの位置をそのクラスタに含まれるデータの重心になるように移動する(各セントロイドの重心が変わらなくなるまで3, 4を繰り返す)   k-meansのクラスタには、初期値が不適切であるときにうまく分類ができなかったりする問題も抱えています。下記のクラスタリングの結果は初期値(セントロイド)の問題について解決を図るためにk-means法の改良として考案されたのが,k-means++法です。 初期のクラスター中心をなるべく遠目におくという発想があります。まず始めにデータ点をランダムに選び1つ目のクラスタ中心とし、全てのデータ点とその最近傍のクラスタ中心の距離を求め、その距離の二乗に比例した確率でクラスタ中心として選ばれていないデータ点をクラスタ中心としてランダムに選んでいきます 普通のk-meansでやると以下のような感じで見るからに無様な結果になっています.これは初期セントロイドを乱数で割り当ててるために,近い位置にセントロイドが置かれた場合にこういう感じになってしまいます.   Python Scriptの説明 # ライブラリの読み込みfrom sklearn.cluster import KMeansimport numpy as npimport matplotlib.pyplot as plt#データロードdata = np.loadtxt(‘./data.txt’, delimiter=’ ‘)#k-means++モデル作成kmeans = KMeans(n_clusters=9, init=’random’, random_state=0)y_kmeans = kmeans.fit_predict(data)# グラフの作成plt.scatter(data[:, 0], data[:, 1], c=y_kmeans, s=20, cmap=’viridis’)centers = kmeans.cluster_centers_plt.scatter(centers[:, 0], centers[:, 1], c=’black’, s=100, …

k-means++ Read More »

スペクトラルクラスタリング

クラスタリング分析の話になっております。前回の記事にはGMMモデルとMini Batch K-Meansについて話しました。この記事では、スペクトラルクラスタリング(Spectral Clustering)について話していきます。 スペクトラルクラスタリングとは スペクトラルクラスタリングとは、クラスタリングの機械学習の方法のうち、教師なし学習に分類されます。スペクトルクラスタリングでは、データをグラフに置き換え、繋がりがある近いデータ程一緒にわけられやすくなっています。 KMeansやGaussian mixture modelはクラスタの中心点からの距離に基づいてクラスタリングのモデルですが、スペクトラルクラスタリングでは連結性に注目してクラスタリングのモデルのため、KMeansやGaussian mixtureではうまくクラスタリングできなかったようなデータをうまくクラスタリングできることがあります。 下記の円形と月形のグラフのクラスタリング結果を見ると、スペクトラルクラスタリングがよく対応出来ています。但し、学習時間は20倍以上になっています。 Python Scriptの説明 # ライブラリの読み込み print(__doc__) import time import warnings import numpy as np import matplotlib.pyplot as plt from sklearn import cluster, datasets, mixture from sklearn.preprocessing import StandardScaler from itertools import cycle, islice np.random.seed(0) # データセット作成 n_samples = 1500 noisy_circles = datasets.make_circles(n_samples=n_samples, factor=.5,                                       noise=.05) …

スペクトラルクラスタリング Read More »

Mini Batch K-Means

クラスタリング分析の話になっております。前回の記事にはGMMモデルについて話しました。GMMモデルのクラスタリングは計算時間がそれなりにかかりますので、大量のデータのプロジェクトには合わない事があります。その際にはMini Batch K-Means (ミニバッチ k平均)モデルを用いる事も1つの選択肢になります。   ミニバッチとは部分的にサンプリングされた入力データの一部です。これらのミニバッチでクラスタリングを行い、計算時間を大幅に短縮します。K-meansの結果と比べると若干悪い結果をもたらす事があります。 正確な情報は以下をご覧ください http://scikit-learn.org/stable/modules/generated/sklearn.cluster.MiniBatchKMeans.html#sklearn.cluster.MiniBatchKMeans モデルの比較 Pythonを使用してKMeansとGMMとMiniBatchKMeansを実装し、比較していきます。例えば大量の300,000件のサンプルのデータから各モデルの効率を比較します。下記の図は各モデルのクラスターの結果で、K-Means Mini BatchはK-Meansの半分実行時間になっております。(K-Means 2.95 Sec vs K-Means Mini Batch 1.47sec). GMMと比べるK-Means Mini Batchが三分の一の学習時間になります。学習期間が減らしましたが、クラスターの結果はほとんど変わりません。 MiniBatchKMeansは、大量なデータを学習の場合は K-Means Mini Batchは時間を節約するのに役立ちます。 Python Scriptの説明 <code> # ライブラリの読み込みprint(__doc__) import timeimport numpy as npimport matplotlib.pyplot as plt from sklearn.mixture import GMMfrom sklearn.cluster import MiniBatchKMeans, KMeansfrom sklearn.metrics.pairwise import pairwise_distances_argminfrom sklearn.datasets.samples_generator import make_blobs # 300,000件のサンプルを作成するnp.random.seed(0)batch_size …

Mini Batch K-Means Read More »

クラスター分析2 GMMモデル

前回の記事には クラスター分析 の手法について話しました。今回の記事は、KNNでは分離が上手くいかない時に使用するクラスタリング手法として混合ガウス モデル (GMM)を紹介します。ただし計算時間はそれなりにかかります。 GMMはGaussian mixture modelsの略称です。GMM は”ソフト クラスタリング” 方式と見なすことができます。ソフトクラスタリング方式では、1つの点に対して複数のクラスに所属する確率を出す事ができます。 sklearn.mixture のパッケージでGMM の学習を行う例を以下に示します。混合正規分布の密度を計算し,可視化するスクリプトを作成しています. GMM による分類結果は図中の等高線で表現されます。 これは学習された混合正規分布の高さになります。例えば実際のデータでは、顧客分布で初見さんがやや多く、常連さんの山があるような場合に相当します。当然初見さんが多く、常連さんの山があるという見方ができます。曲線の色はそれぞれの等高線ごとに分けています.以下では二つの分布になることがわかります。 Python Codeの説明 #ライブラリの読み込み import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import LogNorm from sklearn import mixture #ランダムサンプル、2つの要素を作成する n_samples = 300 np.random.seed(0) # 地形データを作成 (20, 20) shifted_gaussian = np.random.randn(n_samples, 2) + np.array([20, 20]) # Gaussianデータを作成する C = np.array([[0., …

クラスター分析2 GMMモデル Read More »

クラスター分析

クラスター分析とは データのグループ化を含む機械学習技術になる。クラスターとは「集団」「群れ」を意味する英語で、その名の通り、データ全体をいくつかの集団(グループ)に分類する分析手法である。分類にあたっては、サンプル同士がお互いに「似ているか」または「似ていないか」を基準に分ける事ができる。この類似度・非類似度をもとにしたグループ分けの考え方の違いによって、多数のバリエーションが存在する。以下はクラスター分析の代表的な手法の「階層的手法」と「非階層的手法」について説明する。クラスター分析は多様な産業に使われる手法で、例えば下記のような使い方がある。 One to Oneマーケティングクラスター毎に求められる情報やアクションを予測し、ポジショニング確認を目的としたブランドの分類や、クラスターに応じておすすめ情報や配信キャンペーンに変化を付けるなど、最適なアプローチ戦略に役立することに用いられる。 小売小売でも商圏分析・価格弾力性分析・顧客分析・売り上げ予測といった様々な分析方法がある。その中でも顧客分析で、顧客を分類する事によってキャンペーン施策に繋げて、売り上げ増加を行う分析方法のときにクラスター分析が活躍する。例えば顧客の来店分析を以下のようにする事でクラスター分析を用いる。以下のグラフは、ある店の会員カードの使用回数である。   来店キャンペーン等で、初回は割引クーポン配布しており、利用で増えるがその後中々利用してもらえないのがネックであった。平均利用回数は、約4.2回のため5回利用の壁を突破するために5回利用した人に何か更にクーポンを渡そうか考えた。しかしよく上のグラフを見て欲しい。初回のキャンペーンで作ってそのままの人が多く、またヘビーユーザー層もおり、微妙に中間で使う人達がいるといった状態になっている。こういった層を上手くクラスタリングしてくれるのがクラスター分析である。例えば以下になる。 このクラスター別に、最適な販促を行っていく事が売り上げに繋がった。平均回数は分かりやすいが、個別事情といったものまで分析に取り入れられないのでデータ分布を確認し、分析をする事で最適なキャンペーン施策を立案する事が可能になった。 2種類のクラスター分析 階層的手法全てのデータ間の類似度(または非類似度)を計算した後、ある基準で似たもの同士を併合していく方法です。デンドログラム型(図1)の出力になるのが特徴になります。デンドログラムの縦軸は距離となっており、グループが結合した距離のところで線分が結合するようになっています。 図1:デンドログラム型   非階層的手法全体をあらかじめ決めておいたクラスター数に分割していく方法です。サンプル数が大きいビッグデータを分析するときに適しています。ただし、あらかじめいくつのクラスターに分けるかは、分析者が決める必要があり、最適クラスター数を自動的には計算する方法は確立されていません。代表的な手法としてk平均法(K-Means法)/Two-step法があります。情報量を用いて、最適なクラスター数に調整する事もできます。 図2:クラスター分析(非階層的手法)   Pythonでクラスター分析は、以下のように行う。 <pre><code><? $str = <<<‘EOD’import pandas as pdfrom sklearn import datasetsfrom sklearn.cluster import KMeansfrom matplotlib import pyplot as pltiris = datasets.load_iris()df = pd.DataFrame(iris.data, columns=iris.feature_names)result = KMeans(n_clusters=3).fit_predict(df[[‘sepal length (cm)’,’sepal width (cm)’, ‘petal length (cm)’,’petal width (cm)’]])</code></pre>   また数理的に最適だと思われる最適な数は以下のようにElbow plotを用いる事ができる。 <pre><code>distorsions …

クラスター分析 Read More »