Astartesでのサンプリング#

スペクトルデータに対して、ランダムな訓練/テスト分割が本当に最善の方法か疑問に思ったことがあるなら、あなただけではありません。ランダム分割はキャリブレーションセットにギャップを残したり、さらに悪いことに非常に類似したサンプルを両方のセットに入れてしまい、誤差推定が過度に楽観的になることがあります。

Astartes はこの問題を解決します。これは sklearn.model_selection.train_test_split の直接置換として機能するPythonライブラリですが、ケモメトリクスに実際に意味のあるサンプリングアルゴリズム:Kennard-StoneSPXY などにアクセスできます。

なぜこれが重要なのでしょうか?#

例えば、Kennard-Stoneはスペクトル空間のカバレッジを最大化するサンプルを選択します。ランダムな抽選が代表的なキャリブレーションセットを提供することを願う代わりに、それを*保証*します。これにより、新しいサンプルを予測する際の外挿リスクが減少します。

SPXYは、サンプル選択時にスペクトル(X)と基準値(y)の両方を考慮することでさらに一歩進んでおり、y値が広い範囲に及ぶ場合に有用です。

利用可能なサンプラー#

Astartesはそのサンプラーを2つのカテゴリに分類します:

  • 内挿的:データ空間*内*でのカバレッジを確保するためにサンプルが選択されます。汎用モデルの構築に適しています。

  • 外挿的:サンプルはクラスターにグループ化され、クラスター全体が保留されます。これはモデルが*未見の領域*にどれだけ一般化できるかをテストします。

スペクトルデータに最も有用ないくつかのサンプラーを以下に示します:

サンプラー

タイプ

使用する場面

random

内挿的

ベースライン比較。sklearnのデフォルトと同じです。

kennard_stone

内挿的

スペクトロスコピーの定番です。X空間のカバレッジを最大化するサンプルを選択します。

spxy

内挿的

Kennard-Stoneと同様ですが、y値も考慮します。キャリブレーション転送に最適です。

kmeans

外挿的

サンプルをクラスタリングし、クラスター全体を保留します。新しい領域への一般化をテストします。

sphere_exclusion

外挿的

距離のカットオフ内のサンプルを除外します。データのギャップに対する堅牢性をテストするのに有用です。

完全なリスト(Scaffoldのような分子固有のサンプラーを含む)については、Astartes GitHubページ を確認してください。

Chemotoolsとの組み合わせ#

これら2つのライブラリは互いにうまく補完し合います:

  • **Chemotools**はスペクトル前処理(平滑化、ベースライン補正、微分など)を担当します。

  • **Astartes**はモデリングを開始する前のサンプル選択を担当します。

一緒に使用することで、クリーンで十分に検証されたパイプラインが得られます。

例:Kennard-Stone分割#

簡単な例を示します。いくつかのスペクトルを読み込み、Kennard-Stoneで分割し、前処理パイプラインで実行します:

from astartes import train_test_split
from chemotools.datasets import load_fermentation_train
from chemotools.baseline import AirPls
from sklearn.pipeline import make_pipeline
from sklearn.decomposition import PCA

# Load the data (returns pandas DataFrames)
X, y = load_fermentation_train()

# Split with Kennard-Stone instead of random
X_train, X_test, y_train, y_test = train_test_split(
    X.values,  # astartes expects numpy arrays
    y.values,
    train_size=0.75,
    sampler='kennard_stone'
)

# Preprocess and reduce dimensionality
pipeline = make_pipeline(
    AirPls(),
    PCA(n_components=3)
)

pipeline.fit(X_train)
scores = pipeline.transform(X_test)

選択ロジックにy値を含めたい場合は、sampler='spxy' に切り替えるだけです。

インストール#

Astartesはchemotoolsの依存関係ではないため、別途インストールする必要があります:

pip install astartes

For more details, check out the Astartes documentation.