この記事は 3-shake Advent Calendar 2025 の21日目の記事です。
@tozastationです。普段はWebアプリを開発したり、そのアプリや学習ジョブが動く Kubernetes 基盤の面倒をみています。宇宙が好きなのとAI/MLの方たちがどういう業務をされているか少しでもシンクロしたかったのでこのテーマにしてみました。本ブログは、GeminiとClaudeSonnetに進め方を相談して教わりながら実施しています。大変お世話になりました。
今回使ったノートブックは (Github) tozastation/try-astronomy に置いたので交互に見ていただくのがいいかもしれません。pyproject.tomlのライブラリをインストールしていただければご自身のパソコンでもたぶん試していただけます。
今回の目標
MultimodalUniverseという宇宙のデータセットを活用し機械学習を学んでいきます。テーマは「銀河の画像とスペクトルのデータセットを用いて活動銀河核(AGN)の2クラス分類を作ってみる」です。めちゃめちゃ長く書いてしまったのですがぜひ読んでいただけると嬉しいです。ポップな画像を Nano Bananaさんに作ってもらいました。
提供: Nano Banana Pro
Multimodal Universe とは?
天文学の機械学習研究を促進するために作られた科学的な天文観測データの大規模データセットです。データはHugging Face上で公開されており、誰でもアクセス可能です。
規模
- 数億個の天文観測データ
- 総容量100TB
提供データセット
- マルチチャンネル・ハイパースペクトル画像 (モダリティ: 画像)
- 複数の波長(可視光、赤外線など)で撮影された天体画像
- 主な観測源: すばる望遠鏡、ジェームズ・ウェッブ宇宙望遠鏡等
- スペクトルデータ (モダリティ: スペクトル)
- 天体から来る光を波長ごとに分解したデータ
- 主な観測源: ガイア衛星等
- 多変量時系列データ (モダリティ: 時系列)
- 時間とともに変化する天体の明るさや色の記録
- 科学的測定値とメタデータ
- 観測条件(望遠鏡の性能、ノイズレベルなど)
- 天体の分類や物理パラメータ(質量、距離など)
参考
- The Multimodal Universe: Enabling Large-Scale Machine Learning with 100 TB of Astronomical Scientific Data
- (Github) MultimodalUniverse/MultimodalUniverse
- (Hugging Face) Multimodal Universe
今回使うデータセット
MultimodalUniverseのサンプルコードを参考にしていきます。
ここでは、以下の二つのデータセットが使われています。
-
SDSS (Sloan Digital Sky Survey)
- 全天の約4分の1を可視光でデジタル撮影し、さらに分光観測も行ない、これらをカタログ化するサーベイプロジェクト
- SDSSは米国・日本・ドイツの大学・研究所で構成する国際協力研究で、人類史上最大規模の宇宙地図を作ることを目指しています
- 装置は、米国アリゾナ州に設置した口径2.5m の広視野専用望遠鏡と、同時に5色の天体画像を撮る合計1.4億画素のモザイクCCDカメラ、そして約600本の光ファイバーを用いた分光器です
-
hsc (Hyper Suprime-Cam)
- すばる望遠鏡の超広視野主焦点カメラ
- 可視光で、満月9個分に相当する広い視野を一度に撮像します
- 観測条件が良い時は 0.4 秒角という高い解像度で天体画像を撮影できます
ライブラリのバージョンについて
サンプルコードでは datasets==2.21.0 で動作確認されています。新しいバージョンでは動作しない場合があるためご注意ください。
# データセット読み込み部分の抜粋
sdss = load_dataset_builder("data/MultimodalUniverse/v1/sdss", trust_remote_code=True)
hsc = load_dataset_builder("data/MultimodalUniverse/v1/hsc", trust_remote_code=True)
SDSSはスペクトルデータ、HSCは画像データと今回のテーマにぴったりでした。これを使わせていただきます。
参考
データセットの確認
サンプルコードを確認し、フラットアイロン研究所のファイルサーバを発見、ここにデータセットがありました。データサイズを確認すると、SDSSは301.5GB、HSCは400.9GBあります。私の作業PCに乗り切らないため扱うデータ量を少なくしたいので部分的にダウンロードできないか確認します。
ファイル構造を見ると特徴があります。
healpix単位でフォルダが分かれており、その中にデータセット(hdf5)が格納されています。この単位でダウンロードすれば容量を減らせそうです。
|-hsc
|- pdr3_dud_22.5
|- healpix=1107
|- 001-of-001.hdf5
|- healpix=1174
|- healpix=1703
...
HEALPixとは
HEALPix (Hierarchical Equal Area isoLatitude Pixelation) とは、天文学の全天データを扱うために開発されたデータ形式です。天球上で区画を作り、区画ごとに取得したデータがまとめられています。
参考
カラムを確認
緯度・経度のような共通のカラム、画像やスペクトルなど固有のカラムを確認できました。
SDSS データセット (スペクトルデータ)
※合計31カラム
| カラム名 | 型 | 説明 |
|---|---|---|
object_id |
string | オブジェクトID |
ra |
float64 | 赤経(度) |
dec |
float64 | 赤緯(度) |
spectrum |
Sequence | スペクトル情報(flux, ivar, lambda等を含む) |
Z |
float32 | 赤方偏移 |
HSC データセット (画像データ)
※ 合計51カラム
| カラム名 | 型 | 説明 |
|---|---|---|
object_id |
string | オブジェクトID |
ra |
float64 | 赤経(度) |
dec |
float64 | 赤緯(度) |
image |
Sequence | 5バンド(grizy)の160×160ピクセル画像 |
i_cmodel_mag |
float32 | iバンドのcModelマグニチュード |
# サンプルコード
dset = load_dataset("MultimodalUniverse/sdss",streaming=True, split='train')
dset = dset.with_format("numpy")
dset_iterator = iter(dset)
example = next(dset_iterator)
example.keys()
参考
異なるデータセットを結合して学習データとして使えるようにする (クロスマッチング)
マルチモーダル学習を行うためには、同一の天体に対する「画像データ(HSC)」と「スペクトルデータ(SDSS)」がペアになっている必要があります。しかし、これらは全く別の観測プロジェクトで得られたデータです。そこで、それぞれのデータに含まれる天体の「位置情報(座標)」を頼りに、互いに同一と思われる天体を探し出してデータを結合する「クロスマッチング」という工程を行います。
MultimodalUniverseでは、異なるサーベイで観測された同一天体を自動的に結びつけるクロスマッチングの関数を提供してくれているので、中身を確認してアプローチを見てみます。
# Use the cross matching utility to return a new HF dataset, the intersection
# of the parent samples.
dset = cross_match_datasets(sdss, # Left dataset
hsc, # Right dataset
matching_radius=1.0, # Distance in arcsec
)
Step1. 座標情報の取得
各データセットから天体の位置情報(赤経・赤緯)を抽出し、天球座標系に変換します
# SDSSとHSCの座標を取得
from astropy.coordinates import SkyCoord
sdss_coords = SkyCoord(sdss['ra'], sdss['dec'], unit='deg')
hsc_coords = SkyCoord(hsc['ra'], hsc['dec'], unit='deg')
Astropyとは
天文学のための Python 標準ライブラリです。宇宙の地図は平面ではなく「球面」であるため、三平方の定理などが通用しない厄介な計算が必要です。Astropyはそのような天文学特有の複雑な座標計算や単位変換を吸収してくれます。
Step2. 最近傍探索
天球上での角度分離を計算し、最も近い天体ペアを見つけます
天球上では天体の二点間の距離を角度(角距離)で表します。
観測者から見て2つの天体の視線がどれくらい開いているかを表す指標です。
# 各SDSS天体に対して最も近いHSC天体を検索
idx, separation, _ = sdss_coords.match_to_catalog_sky(hsc_coords)
Step3. 距離フィルタリング
指定した閾値(デフォルト1秒角)以内のマッチのみを採用します
1秒角の大きさ
1秒角がどれくらいかというと、満月がだいたい1800秒角なので、その1800分の1サイズになります。最近のすばる望遠鏡では0.02秒角の解像度で天体を見分けられるそうです。「富士山頂に置いたコインを東京都内から見分けられるほどの視力」という表現もありました。
# 1秒角以内のマッチのみ保持
mask = separation < 1.0 * u.arcsec
matched_pairs = matches[mask]
Step4. HEALPix境界の処理
両データセットで同じHEALPixセル内のマッチのみ保持し、境界領域の問題を回避します
HEALPixは天球をタイル状に区切りますが、タイルの境界線ギリギリにいる天体は、隣のタイルのデータセットに含まれている可能性があります。データの整合性チェック作業になります。
# 同じHEALPixセル内のマッチのみ
mask = matched['sdss_healpix'] == matched['hsc_healpix']
final_matches = matched[mask]
結合できたデータセットを可視化してみる
データセットが結合できたことによって以下のような図も作れるようになりました。一応HSCのデータセットがGalaxiesになっていたのですが、ぱっと見だと星なのか銀河なのか星団なのか判断するの難しいですね...去年撮影した球状星団のM3を思い出しました。
画像とスペクトルから見る銀河の色一覧
- 青い銀河
- 短波長側(3800-5000Å付近)のフラックス(単位時間あたりの光の流量)が高い
- 若い高温の星が多いため、青い光を強く出す
- 赤い銀河
- 長波長側(6000-9000Å付近)のフラックスが高い
- 古い低温の星が多いため、赤い光を強く出す
- 近くの銀河
- スペクトルの波長位置がほぼそのまま(赤方偏移の影響が小さい)
- 遠くの銀河
- スペクトル全体が長波長側にシフトしている
- 遠いため全体的にフラックスが低い(暗い)
赤方偏移 $z$ とは
天体が地球からどれくらい遠くにあるかを示す指標です。宇宙空間が膨張しているため、遠くの天体から届く光ほど波長が引き伸ばされ、スペクトル全体が「赤色(長波長)」の方へズレていきます。つまり、$z$ の値が大きいほど「より遠く、より昔の宇宙にある天体」であることを意味します。
スペクトルの波長位置から赤方偏移zをどのように求めているのか
天体から放出される光は特定の元素ごとに既知の波長で輝線・吸収線を持ちますが、宇宙膨張により遠くの天体ほどすべての波長が長波長側にシフトするため、観測された輝線の波長と元来の波長との比較からシフト量(赤方偏移 z)を算出し、その z を使って他のすべての輝線位置も予測できる。
参考
なぜマルチモーダルなのか?
機械学習において、異なる種類(モダリティ)のデータを組み合わせる「マルチモーダル学習」は、単一のデータと比較し精度の向上が期待できます。
情報の相補性
- 画像の役割
- 銀河全体の「形」や「広がり」を捉えます。渦巻き状なのか、楕円状なのか、あるいは他の銀河と衝突して形が崩れているのか、といった空間的なコンテキストを提供します
- スペクトルの役割
- 光を波長ごとに分解することで、銀河に含まれるガスの温度や化学組成、ブラックホールの活動性などを捉えます
データセットを増やす
現在は二つの異なる天体データセットを1秒角という角距離で同一天体とみなすようになっています。ここで課題があり、2500件ほどのスペクトルデータを画像データと比較しても36件ほどしかクロスマッチングでは取得できません。
healpix=1104: SDSS 21 × HSC 6,841
healpix=1107: SDSS 788 × HSC 7,668
healpix=1171: SDSS 306 × HSC 22
healpix=1172: SDSS 476 × HSC 2,553
healpix=1175: SDSS 475 × HSC 2,850
healpix=1708: SDSS 402 × HSC 1,688
-> 33件
あまりにもヒット数が少ないため、原因を調査しました。各データセットの座標情報の重複状況を確認したところ、添付の散布図(RA/Decプロット)から、現在のHEALPixピクセル内では両データセットの観測領域がほぼ完全に分離しており、物理的な重なりがないことが判明しました。
マッチング閾値を2秒角、3秒角へと緩和して試行しましたが、結果に改善は見られませんでした。根本的な原因は領域の不一致にあるため、もう少しデータセットを増やしてみます。SDSSのレコード数が多く、かつHSCのファイルサイズが手元の環境で扱える(ダウンロード可能な)容量に収まっている 共通のHEALPix領域(ディレクトリ) を選定し、いくつか追加してみました。結果として、HSCは5万件、SDSSは7千件ほど増え、クロスマッチングは187件になりました。これで次に進みましょう。
画像とスペクトルから活動銀河核(AGN)の2クラス分類を実装する
活動銀河核とは
銀河の中心にある超大質量ブラックホールが物質を飲み込む際に放出される宇宙で最も明るい天体現象の一つです。活動銀河核の中心では、超高温のガスがブラックホールに落ち込んでいます。
参照: https://www.astroarts.co.jp/news/2011/05/23cen_a_jet/index-j.shtml
データセットから活動銀河核を探すには
以下の要素を特徴として提案してもらいました。
スペクトル
- 輝線の強さ
- 活動銀河核では特定の波長が強く確認できる
- OⅢ線 (オースリー線): 500.7 nm
- Hα線 (エイチ・アルファ線): 656.3nm
- Hβ線 (エイチ・ベータ線): 486.1nm
- 活動銀河核では特定の波長が強く確認できる
- 輝線の比率
- 単独の輝線ではなく、比率を見ることで電離源を特定
- OⅢ線/Hα線/Hβ線の比
- 活動銀河核: > 3.0(高エネルギー源で酸素が強く電離)
- 星形成銀河: < 1.0(若い星程度のエネルギー)
- OⅢ線/Hα線/Hβ線の比
- 単独の輝線ではなく、比率を見ることで電離源を特定
- ガスの運動状態
- 輝線の幅: 広い輝線 = ガスが高速運動(AGNのジェットや風)
- 連続光の傾き: 活動銀河核は平坦、星形成銀河は赤い傾向
- 吸収線の有無: 星の種類を判定
画像
- 中心集中度
- 銀河の中心に小さく明るく光る
- 明るさ分布
- 中心から外側への明るさの減衰率
- 活動銀河核: 急激に暗くなる
- 普通の銀河: 緩やかに暗くなる
- 中心から外側への明るさの減衰率
- 色情報
- 高温降着円盤から青白い光を放ちます
- g-rバンド色指数: g(青)- r(赤)の明るさの差
- 活動銀河核: 0.6(青い)
- 古い銀河: > 0.8(赤い)
活動銀河核と通常銀河の違い

提供: Nano Banana Pro
参考 (DeepResearchでソース探してもらいましたが多すぎて端折ります🙇♂️)
- Conversion between vacuum and air wavelengths
- BPT Diagram: Galaxy & AGN Diagnostics
- すざく衛星による狭輝線セイファート1型銀河の広帯域観測
6つの特徴量を抽出しモデルを作る
クロスマッチングによって画像とスペクトルが紐付いたデータセットが用意できました。 ここからは、実際に活動銀河核を判別するための機械学習モデルを構築していきます。
以下の流れで進めることにします。
- 特徴量抽出: 生データから物理的に意味のある数値を計算
- ラベリング: 既存の天文学的知見(BPT図)を用いて正解ラベルを作成
- データセット作成: 学習用とテスト用に分割
- モデル構築・最適化: ニューラルネットワークの実装とOptunaによるパラメータ探索
- 評価: テストデータを用いたモデルの精度確認
Step1. 特徴量抽出
先ほど出てきた活動銀河核判定に有効とされる特徴量を、スペクトルと画像それぞれから抽出します。以下に再掲します。
スペクトル特徴(8次元)
物理的なガスの状態を表す指標です。活動銀河核判定に重要な4つの輝線に着目し、それぞれの強度や周辺情報を数値化します。
- 輝線フラックス (4次元):主要な4つの輝線 (OIII、Hα、Hβ、NII) の強度を測定
- 連続光レベル (1次元):輝線がない領域のベースの明るさ
- 等価幅 (2次元):Hαの輝線の鋭さ
- 輝線比 (1次元):OIII/Hβ の比率(BPT図のY軸となる重要指標)
画像特徴(2次元)
銀河の形態を表す指標です。
- 中心集中度 (1次元):中心16×16ピクセルの光量が全体に占める割合
- コントラスト (1次元):中心部と外周部の明るさの差
ここでの「次元」とは
「モデルに入力するパラメータの数」を指します。
今回は、スペクトル由来の8個の数値と、画像由来の2個の数値、合計10個の数値を後程構築するニューラルネットワークの入力層に渡します。
Step2. BPT図による活動銀河核自動ラベリング
教師あり学習を行うための「正解ラベル」を作成します。 ここでは天文学の標準的な分類手法である BPT図 (Baldwin, Phillips & Terlevich diagram) の基準を提案されたので見ていきます。
BPT図とは
銀河のスペクトル輝線の比率を用いて、その光のエネルギー源が「若い星(星形成銀河)」なのか「活動銀河核 (AGN)」なのかを判別する天文学の標準的な診断ツールです。
-
Y軸: $\rm [OIII]/H\beta$ 比
- ブラックホール周辺の高エネルギーな活動により酸素が強く電離すると高くなる指標
-
X軸: $\rm [NII]/H\alpha$ 比
- 星形成銀河と活動銀河核を区別するために用いられる指標
判定基準 (Kewley et al. 2006)
天文学の論文で定義されている分類ライン(Kauffmann線など)を用いて、分類を行います。計算式は BPT&VO87 Diagrams を参照しています。
-
活動銀河核候補 (ラベル: 1)
- Seyfert(セイファート): 典型的な活動銀河核
- Composite(複合領域): 活動銀河核と星形成が混在している領域
- ※確実性の高いこれらのみを「正解」とします
-
非活動銀河核 / 判定保留 (ラベル: 0)
- Star-forming: 通常の星形成銀河
- LINER: データセット内の70%を占め判定が難しいため、本記事の分類タスクにおいては便宜上「非活動銀河核」として扱います
クロスマッチングされた187件の天体について分類を行った結果は以下の通りです。
-
活動銀河核候補 (Label 1): 24件 (12.8%)
- Seyfert: 1件
- Composite: 23件
-
非活動銀河核 / LINER (Label 0): 163件 (87.2%)
- Star-forming: 18件
- LINER: 145件
分布図とBPT図
作成した図から、機械学習を行う上での特性が見えてきました。
- 判定が難しいデータが多い
- 大部分が判定の難しいLINER(グレー)でした。これらを教師データに含めるとモデルの判断基準がブレるため、正解データからは除外します
- 不均衡データ
- 確実な活動銀河核は全体の 12.8% です。モデルが「すべて非活動銀河核」と答えても87%の正解率が出てしまうため、単純な正解率(Accuracy)以外での評価が必要になります
- 特徴量の有効性
- 境界線を挟んで青(星形成)と赤・緑(活動銀河核)が分かれていることから、今回選定した特徴量(輝線比)が分類に有効であることが確認できました
活動銀河核の候補と通常銀河の画像比較
BPT図で「活動銀河核(AGN)」と「通常の銀河(Normal)」に分類された天体を、実際に画像(HSC)で並べて比較してみました。画像上段が「活動銀河核候補」、下段が「通常の銀河」になりますが、私の目にはどちらも同じような点にしか見えません... しかし、スペクトルデータ上では輝線の強さで違いが現れていました。
Step3. データセット作成
ラベルの2値化
Step 2 のBPT図による判定結果に基づき、機械学習モデルに学習させるターゲット(正解ラベル)を整理します。 今回は「活動銀河核候補(Seyfert, Composite)」を正解(1)とし、それ以外(Star-forming, LINER)を負例(0)とする2値分類タスクとして設定します。
特徴量行列作成
スペクトルと画像から抽出した特徴量を結合し、モデルに入力する行列を作成します。 スペクトルから8個、画像から2個、合計10個の特徴量をリスト化します。
訓練データとテストデータの分割
準備した特徴量(X)とラベル(y)を、学習用とテスト用に分割します。 ここで重要なのが stratify オプションです。活動銀河核データは全体の約12%しかないため、ランダムに分割すると「テストデータに活動銀河核が一つもない」という事態になりかねません。比率を維持したまま分割します。
stratify(層化抽出)について
train_test_split の stratify オプションは、分割後のデータセットに含まれるクラス(ラベル)の比率を維持するための機能です。
今回のように 正例(活動銀河核)が極端に少ない不均衡データ の場合、ランダム分割では訓練データとテストデータで分布に偏りが生じ、学習が不安定になることがあります。このオプションを指定することで、どちらのデータセットにも公平に活動銀河核が含まれることを保証しています。
分割結果は以下です。出力結果を見ると、stratify オプションが効いていそうです。活動銀河核の比率が維持されています。
- 訓練データ: 19/149 $\approx$ 12.8%
- テストデータ: 5/38 $\approx$ 13.2%
訓練データ: 149件
- 活動銀河核 (1): 19件
- 非活動銀河核 (0): 130件
テストデータ: 38件
- 活動銀河核 (1): 5件
- 非活動銀河核 (0): 33件
Step4. モデルの構築と最適化
ニューラルネットワークの基本設計
活動銀河核分類のための多層ニューラルネットワークを構築します。 今回は Optuna を使って最適なサイズを探索しますが、モデルの基本構造(アーキテクチャ) は以下の設計を採用します。
アーキテクチャ
入力層(10次元)
│ (Linear + ReLU)
▼
隠れ層1 (サイズは可変)
│ (Dropout: 率を調整)
▼
隠れ層2 (隠れ層1の半分)
│ (Dropout: 率を調整)
▼
出力層(1ユニット)
│ (Sigmoid)
▼
出力 (0.0〜1.0の確率)
アーキテクチャの補足
- 入力層 (Input): スペクトルや画像のデータから抽出した特徴ベクトルを受け取ります
- 隠れ層 (Hidden Layers): 手掛かりを組み合わせ、より複雑な特徴を見つけ出します。層が深くなるほど「ただの数値」から「意味のある情報」へと解釈が進みます
- ReLU (活性化関数): 「重要な情報は通し、不要な情報は遮断する」フィルタのような役割です
- Dropout (ドロップアウト): 学習中にランダムに一部のニューロンを「休憩」させる仕組みです。特定のヒントだけに頼りすぎるのを防ぎ、「どのヒントが欠けても正解できるようにする」ために行います
- 出力層 (Output): 最終的に計算された値を、Sigmoid関数を使って 0%〜100% (0.0〜1.0) の確率に変換して答えを出します
設定
- 損失関数: Binary Cross Entropy(2クラス分類問題の標準的な損失関数)
- 最適化手法: Adam(学習率 0.001)
- Dropout: 30%のニューロンをランダムに無効化し、特定のニューロンへの依存を防ぎ汎化性能を向上させます
学習設定の補足
1. Binary Cross Entropy (二値交差エントロピー)
2クラス分類における「予測と正解のズレ」を測る標準的な指標です。このズレ(損失)が最小になるよう学習が進みます。
2. Adam (Adaptive Moment Estimation)
学習率を状況に合わせて自動調整してくれる最適化アルゴリズムです。パラメータ更新を効率化し、学習をスムーズに収束させます。
3. Dropout (ドロップアウト)
学習時にランダムにニューロンを無効化(スイッチOFF)する手法です。特定のニューロンへの依存を防ぎ、過学習(暗記)を抑制します。
Optunaによるハイパーパラメータ探索
データ数が少なく不均衡なため、決め打ちのパラメータ(学習率やネットワークの大きさ)ではうまく学習できない可能性があります。 そこで今回は Optuna を導入し、最適なパラメータをAIに探索させます。
Optunaとは PFNが開発した、ハイパーパラメータ自動最適化フレームワークです。試行錯誤を自動化し、過去の結果から「良さそうなパラメータ」を推測して効率的に探索を行います。
探索するパラメータ
- 中間層のサイズ: ネットワークの表現力
- ドロップアウト率: 過学習を防ぐための「忘れっぽさ」の度合い
- 学習率: 重みを更新するステップ幅
# --- 探索するパラメータの定義 ---
# 中間層の広さ: 16〜64の間
hidden_dim = trial.suggest_int("hidden_dim", 16, 64)
# ドロップアウト率: 0.1〜0.5の間
dropout_rate = trial.suggest_float("dropout_rate", 0.1, 0.5)
# 学習率: 0.0001〜0.01 (対数スケール)
lr = trial.suggest_float("lr", 1e-4, 1e-2, log=True)
Step5. モデルの評価
完成したモデルが、未知のテストデータに対してどれくらい通用するかを確認します。 今回は不均衡データ(活動銀河核が全体の約13%のみ)であるため、単なる正解率(Accuracy)での評価は適切ではないそうです。モデルが「すべて通常銀河」と予測しても、約87%という高い正解率が出てしまうためです。そのため、今回は全体の正解率ではなく、「少ない活動銀河核をどれだけ見逃さずに拾えたか」を示す 再現率(Recall) に注目して評価を行います。
テストデータの正解率 (Accuracy): 89.47%
【詳細レポート】
precision recall f1-score support
Normal (0) 0.94 0.94 0.94 33
AGN (1) 0.60 0.60 0.60 5
accuracy 0.89 38
macro avg 0.77 0.77 0.77 38
weighted avg 0.89 0.89 0.89 38
評価指標の項目
precision (適合率)
モデルがそのクラスであると予測したデータのうち、実際に正解だった割合です。予測の「正確さ」を示しており、この値が高いほど誤検知(False Positive)が少ないことを意味します
recall (再現率)
実際にそのクラスであるデータ全体のうち、モデルが正しく検出できた割合です。網羅の「完全さ」を示しており、この値が高いほど取りこぼし(False Negative)が少ないことを意味します
f1-score (F値)
PrecisionとRecallの調和平均です。一般に適合率と再現率はトレードオフの関係(片方を上げるともう片方が下がりやすい)にあるため、両者のバランスを総合的に評価する指標として用いられます
support
検証用データセット(テストデータ)に含まれる、各クラスの実際のデータ件数です。評価スコアの信頼性を判断する際、母数が十分にあるかを確認するために参照します
以下は混同行列の図です。縦軸が正解ラベル、横軸がモデルによる予測ラベルです
混同行列(Confusion Matrix)とは
クラス分類の結果を「予測」と「正解」の組み合わせで4つに分類した表です。データセットの予測値と実際の値を比較することで、機械学習における分類モデルの性能を評価するのに役立ちます
- True Positive (右下): 活動銀河核を正しく活動銀河核と検出できた(成功)
- True Negative (左上): 通常銀河を正しく通常と判定できた
- False Positive (右上): 通常銀河を活動銀河核と誤検知した(空振り)
- False Negative (左下): 活動銀河核を通常銀河と誤判定した(見逃し)
結果の考察
- 活動銀河核の発見率 (Recall: 0.60)
- テストデータに含まれる5つの活動銀河核のうち、60%(3つ) を正しく発見することに成功しました
- 全体の正解率 (Accuracy: 89.5%)
- 「すべて非活動銀河核」と答えた場合のベースライン(約86.8%)を上回っており、モデルが特徴量から活動銀河核の傾向を学習できていることが分かります
- 課題
- テストデータ内の活動銀河核がわずか5件しかないため、統計的な信頼性を高めるには、やはり母数を増やす(データセットを拡張する)ことが次のステップとして必要です
感想
今回は「Multimodal Universe」データセットを活用し、銀河の画像とスペクトルという異なる種類のデータを組み合わせて、活動銀河核を判別するモデルを作成しました。
データ同士が紐づけられるように設計したり、紐づけるための情報を見つけ実施するプロセスを体感できたのが面白かったです。また、BPT図など天文学のドメイン知識を用いてデータセットから正解ラベルを作っていく作業というのも体験できたのが大きな収穫でした。ここまでで、データ集め・それを学習で使えるように分析・整えるところというのはとても労力のいるものだと実感しました。今後も天文学と機械学習、それぞれのインプットは続けつつ、またこの二つを掛け合わせたテーマに挑戦していきたいです。




