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

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

このチュートリアルでは、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)

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

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

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-2.1.0_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-2.1.0_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-2.1.0_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-2.1.0_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-2.1.0_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-2.1.0_how-to-clustering-point-cloud_notebook_22_0.png

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

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