epsの選び方
CoddyのMachine Learningジャーニー「教師なし学習」セクションの一部。レッスン 22/51。
epsは、確認するまでは推測にすぎません。Noise Points の公園では、各点から4番目に近い点までの距離を、自分自身も数えて測定します。これはmin_samples=4のようにします。並べ替えてプロットしましょう:
密集した点は低く平坦に並び、孤立した点は急上昇します。曲線が上向きに折れる膝は、適切な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 はそれらを並べ替えます。
チャレンジ
中級地震学者は、1年分の地震データから断層線を見つけるために、min_samples=5でDBSCANを使いたいと考えています。epsを選びましょう。
XにNearestNeighbors(n_neighbors=5)を適合させ、各地震の距離を取得します。- 5番目に近い地震までの距離を並べ替えてプロットします。
- 実行して、折れ曲がり点を読み取ります。その値を
epsに設定し、ax.axhlineで破線の灰色の線を引いて、表示します。
別の地域では、折れ曲がり点は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)")
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師なし学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ