元のページ

ステージ2-4: クラスタリング、3次元グラフ描画演習 (cluster.KMeans, cluster.Ward + Axes3D) (情報工学実験 3 : データマイニング班)

目次

想定環境

クラスタリングし、結果を簡易観察する (cluster.KMeans)

from sklearn import datasets
iris = datasets.load_iris()
data = iris.data
target = iris.target

# K-means(k=3)でクラスタリングしてみる。
# クラスタリング結果(ラベル付与結果)は estimator.labels_ に保存される。
# 簡易評価として target との違いを目視チェック。
# list[start:end:step]
from sklearn import cluster
k_means = cluster.KMeans(n_clusters=3)
k_means.fit(data)
print k_means.labels_[::10]
print target[::10]
# fit する度に labels_ の結果は変わりうる。
# labels_とtargetの出力を比較した結果はどう解釈できる?




特徴ベクトルの要素において相関の高い上位3件を選択し、3次元グラフ描画してみる (Axes3D)

# data <-> target の関係を可視化してみる。
# dataは4次元のデータセット。
# 相関が高い上位3次元をxyz座標とし、target3種(0,1,2)を色で区別する。
import numpy as np
np.corrcoef(data[:,0], target)
np.corrcoef(data[:,1], target)
np.corrcoef(data[:,2], target)
np.corrcoef(data[:,3], target)
# -> 相関が高いのはdataの0番目, 2番目, 3番目。

# data3次元 <-> taregt(正解データ) での3次元グラフ化
import pylab as pl
from mpl_toolkits.mplot3d import Axes3D
fig = pl.figure(1)
# Axes3D
# X,Y,Z座標毎にデータをリストで用意し、
# cで色を指定。
ax = Axes3D(fig)
X = data[:,0]
Y = data[:,2]
Z = data[:,3]
labels = target
ax.scatter(X, Y, Z, c=labels)
ax.set_xlabel("sepal length")
ax.set_ylabel("petal length")
ax.set_zlabel("petal width")
#pl.show()

# クラスタリング結果を描画
fig = pl.figure(2)
# Axes3D
ax = Axes3D(fig)
X = data[:,0]
Y = data[:,2]
Z = data[:,3]
labels = k_means.labels_
ax.scatter(X, Y, Z, c=labels.astype(np.float))
ax.set_xlabel("sepal length")
ax.set_ylabel("petal length")
ax.set_zlabel("petal width")
pl.show()




階層型クラスタリング(Ward法)の例

from sklearn import datasets, cluster
import numpy as np
iris = datasets.load_iris()
data = iris.data
target = iris.target

# Ward(n_clusters=3)でクラスタリングしてみる。
# クラスタリング結果(ラベル付与結果)は estimator.labels_ に保存される。
# 簡易評価として target との違いを目視チェック。
ward = cluster.Ward(n_clusters=3)
ward.fit(data)
print ward.labels_[::10]
print target[::10]





参考サイト一覧