LoginSignup
4

More than 5 years have passed since last update.

posted at

updated at

scikit-learnでDBSCAN

scikit-learnに実装されてるDBSCANを使ってみた

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import numpy as np
from sklearn import cluster

""" パラメータを指定 """
dbscan = cluster.DBSCAN(eps=float(sys.argv[1]), min_samples=int(sys.argv[2]))

""" データを読み込む """
data_list = []
for line in open(sys.argv[3]):
    x = map(float, line.rstrip().split(' '))
    data_list.append(x)
data = np.array(data_list)

""" クラスタリング """
dbscan.fit(data)

""" 結果を表示 """
labels = dbscan.labels_
for i in range(len(labels)):
    if labels[i] != -1:
        print labels[i], data[i]

使い方

データは行にサンプル、列に書く属性の値を記述した以下のようなファイルを準備

0 1
8.5 6
2 0
1.5 0
1 1.5
10 5
9 6
8 5.5
9.5 5.6
100 100
-100 -50
1 0

引数にeps, min_samples, data_fileの順で渡して実行

>> python dbscan.py 1.5 3 data
0.0 [ 0.  1.]
1.0 [ 8.5  6. ]
0.0 [ 2.  0.]
0.0 [ 1.5  0. ]
0.0 [ 1.   1.5]
1.0 [ 10.   5.]
1.0 [ 9.  6.]
1.0 [ 8.   5.5]
1.0 [ 9.5  5.6]
0.0 [ 1.  0.]

dbscan.labels_は、各サンプルがどのクラスタに割り当てられたかを表している。
-1の時はどのクラスタにも割り当てられないノイズになったという意味

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
4