Menu
CoddyTech

epsの選び方

CoddyのMachine Learningジャーニー「教師なし学習」セクションの一部。レッスン 22/51。

epsは、確認するまでは推測にすぎません。Noise Points の公園では、各点から4番目に近い点までの距離を、自分自身も数えて測定します。これはmin_samples=4のようにします。並べ替えてプロットしましょう:

71個の距離を並べた上昇曲線。ピクニック中の人々の点では1 m付近で低く平坦だが、約3 mで急に折れ曲がり、破線がepsを示し、その後ひとりでいる人々のところで急上昇する

密集した点は低く平坦に並び、孤立した点は急上昇します。曲線が上向きに折れる膝は、適切なepsです:

from sklearn.neighbors import NearestNeighbors
nn = NearestNeighbors(n_neighbors=4).fit(X)
distances, rows = nn.kneighbors(X)
ax.plot(np.sort(distances[:, -1]))

kneighbors は各点から4つの最近傍点までの距離を近い順に返すため、列 -1 は4番目の点です。np.sort はそれらを並べ替えます。

challenge icon

チャレンジ

中級

地震学者は、1年分の地震データから断層線を見つけるために、min_samples=5でDBSCANを使いたいと考えています。epsを選びましょう。

  1. XにNearestNeighbors(n_neighbors=5)を適合させ、各地震の距離を取得します。
  2. 5番目に近い地震までの距離を並べ替えてプロットします。
  3. 実行して、折れ曲がり点を読み取ります。その値をepsに設定し、ax.axhlineで破線の灰色の線を引いて、表示します。

別の地域では、折れ曲がり点は4 km付近でした。

「5番目に近い地震までの距離」というタイトルのグラフ。約145個の地震について、曲線は2 km付近で平坦に推移し、その後50 kmを超えて急上昇しています。折れ曲がり点の4 kmには破線の灰色の線が引かれています

Coddyがグラフを説明し、続いてあなたのepsを使ってDBSCANを実行します。

自分で試してみよう

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.neighbors import NearestNeighbors

# ある地域で1年間に発生した地震:各震源の位置はkm単位
quakes = pd.read_csv("quakes.csv")
X = np.column_stack([quakes["east_km"], quakes["north_km"]])

fig, ax = plt.subplots()
ax.set_title("Distance to the 5th Nearest Quake")
ax.set_xlabel("Quakes, sorted")
ax.set_ylabel("Distance (km)")

# 以下にコードを書いてください
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

教師なし学習のすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ