Menu
CoddyTech

星団

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

ある天文学クラブが、空の一角を撮影しました。225個の星の一部は同じ雲で生まれた仲間ですが、残りは手前や奥にいる見知らぬ星です。

60×40分角の写真に黒い点で示された225個の星:左側には丸い集まり、右側には上昇する長く曲がった帯があり、孤立した星があちこちに散らばっている

どちらの位置も単位はアーク分なので、epsは写真上の距離です。

クラブは、単独で存在するフィールドスターを除いて、各クラスターとそのサイズを知りたいと考えています。k-meansでも同じようにできるでしょうか?

challenge icon

チャレンジ

難しい

プログラムはepsを読み込みます。スターターコードでは2つの図、leftとrightを用意しています。

  1. そのepsとmin_samples=5を使って、2つの位置に対してDBSCANを実行します。クラスターとフィールド星(ラベル-1)を表示します。
  2. 同じ数のクラスターでk-meansを適合させます(n_init=10、random_state=0)。それぞれの手法で最大と最小のクラスターを表示します。
  3. leftにはDBSCANのクラスターを描画し、最大のものをcluster 1として、その後にfield starsを灰色で描画します。rightにはk-meansのクラスターを同じ順序で番号を付けて描画します。凡例を表示します。

別の写真とeps 2.5を使った場合:

DBSCAN: 3 clusters and 29 field stars
Biggest cluster: 63 stars by DBSCAN, 77 by k-means
Smallest cluster: 41 stars by DBSCAN, 48 by k-means

そして、その図:

別の写真。2つの図が横並び。左はDBSCAN:左上に丸い集団のクラスター1、右上に丸い集団のクラスター2、下部に星が短く並ぶクラスター3。フィールド星は灰色で散らばっている。右は3クラスターのk-means:同じ3つの集団があり、すべてのフィールド星が最も近い集団に取り込まれている

次にCoddyがあなたの結果を説明します。フィールド星を考慮すると、どちらの手法を信頼しますか?

自分で試してみよう

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN, KMeans

# 写真に写る星1つにつき1行:位置(分角)と明るさ(等級)
field = pd.read_csv("field.csv")
eps = float(input())

# 2つの図を横に並べる:左がDBSCAN、右がk-means
fig, axs = plt.subplots(1, 2, figsize=(10, 4))
left = axs[0]
right = axs[1]
left.set_title("DBSCAN")
right.set_title("k-means")
for ax in axs:
    ax.set_xlabel("x (arcmin)")
    ax.set_ylabel("y (arcmin)")

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

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

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

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