ポイントクラウドのクラスタリング

ポイントクラウドのクラスタリング

このチュートリアルでは、irisデータセットをクラスタリングし可視化します。

  • ポイントクラウドのクラスタリング方法

Requirements

In [1]:
import numpy as np

import matplotlib.pyplot as plt

from sklearn.datasets import load_iris
from sklearn.cluster import KMeans, DBSCAN
from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC

from renom_tda.topology import Topology
from renom_tda.lens import PCA

データセット

最初にirisデータセットをダウンロードします.今回はsckit-learnの load_iris 関数を使用します。

irisデータセットは4つの変数を持つ150行のデータから構成されています。

In [2]:
iris = load_iris()

data = iris.data
target = iris.target

インスタンス作成

次にトポロジーのインスタンスを作成します。

In [3]:
topology = Topology()

データのロード

次に作成したインスタンスにデータをロードします。
load_data関数を使ってデータを入力します。
In [4]:
topology.load_data(data)

ポイントクラウドの作成

次に、ポイントクラウドと呼ばれる低次元空間に投影したデータを作成します。

データを低次元空間に射影する際に2つのパラメータを設定します。

metricは、データ同士の距離をどのように測るかの指標となります。lensとは、ポイントクラウドに投影する軸になります。

このチュートリアルではMetricはNone、lensはPCAを使います。

In [5]:
metric = None
lens = [PCA(components=[0, 1])]
topology.fit_transform(metric=metric, lens=lens)
projected by PCA.

ポイントクラウドの色付け

次にポイントクラウドを色付けします。

In [6]:
topology.color_point_cloud(target, normalize=True)

教師なしクラスタリング

次に、ポイントクラウドをクラスタリングします。
unsupervised_clustering_point_cloud関数を使うときは、clustererには、fit関数を持つクラスタリングのクラスを設定してください。
In [7]:
clusterer = KMeans(n_clusters=3)
topology.unsupervised_clustering_point_cloud(clusterer=clusterer)
topology.show_point_cloud()
../../../_images/notebooks_tda_how-to-clustering-point-cloud_notebook_14_0.png

他の手法を使う。

In [8]:
clusterer = DBSCAN(eps=0.1, min_samples=2)
topology.unsupervised_clustering_point_cloud(clusterer=clusterer)
topology.show_point_cloud()
../../../_images/notebooks_tda_how-to-clustering-point-cloud_notebook_16_0.png

教師ありクラスタリング

supervised_clustering_point_cloud関数を使うときは、clustererには、fit関数とpredict関数を持つクラスタリングのクラスを設定してください。

In [9]:
clusterer = KNeighborsClassifier(n_neighbors=3)
topology.supervised_clustering_point_cloud(clusterer=clusterer, target=target, train_size=0.8)
topology.show_point_cloud()
../../../_images/notebooks_tda_how-to-clustering-point-cloud_notebook_18_0.png
In [10]:
clusterer = SVC()
topology.supervised_clustering_point_cloud(clusterer=clusterer, target=target, train_size=0.8)
topology.show_point_cloud()
../../../_images/notebooks_tda_how-to-clustering-point-cloud_notebook_19_0.png
In [11]:
clusterer = RandomForestClassifier()
topology.supervised_clustering_point_cloud(clusterer=clusterer, target=target, train_size=0.8)
topology.show_point_cloud()
../../../_images/notebooks_tda_how-to-clustering-point-cloud_notebook_20_0.png

正解データ

In [12]:
topology.color_point_cloud(target, normalize=True)
topology.show_point_cloud()
../../../_images/notebooks_tda_how-to-clustering-point-cloud_notebook_22_0.png

正解データのインデックス確認

In [13]:
topology.train_index
Out[13]:
array([  0,   1,   2,   3,   6,   7,   8,   9,  11,  13,  14,  16,  17,
        18,  19,  20,  21,  23,  24,  25,  26,  27,  28,  30,  31,  32,
        33,  34,  35,  36,  38,  39,  40,  41,  42,  43,  45,  46,  47,
        49,  51,  52,  53,  55,  56,  57,  59,  60,  61,  63,  64,  65,
        66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,
        79,  80,  81,  82,  83,  85,  87,  89,  90,  92,  93,  94,  95,
        96,  97,  98,  99, 100, 101, 103, 105, 106, 108, 109, 111, 112,
       113, 114, 115, 116, 117, 119, 120, 121, 122, 124, 125, 126, 127,
       128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 142,
       143, 144, 147])
In [14]:
topology.test_index
Out[14]:
array([  4,   5,  10,  12,  15,  22,  29,  37,  44,  48,  50,  54,  58,
        62,  84,  86,  88,  91, 102, 104, 107, 110, 118, 123, 140, 141,
       145, 146, 148, 149])