mcpField
C
cuml-machine-learning

cuml-machine-learning

github.com/langchain-aiデータ・データベース30.7k247 回インストール今日更新
リポジトリ

cuml-machine-learning について

NVIDIA RAPIDS cuML による GPU 加速機械学習のスキルです。モデル学習や前処理を対象とし、scikit-learn 互換 API の例と GPU・CPU 向けの手順を示します。

主な機能

  1. 01分類と回帰
  2. 02クラスタリングと次元削減
  3. 03特徴量の前処理とエンコード
  4. 04GPU 動作確認とトラブル対応

活用シーン

  1. 01大規模データでの分類モデル学習
  2. 02回帰による数値予測
  3. 03データのクラスタ分け
  4. 04可視化に向けた特徴量削減

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/langchain-ai/deepagents --skill cuml-machine-learning

インストール後、Claude Code で/cuml-machine-learningを入力して読み込まれたか確認します。

詳細

cuML 機械学習スキル

NVIDIA RAPIDS cuML を使用した GPU アクセラレーション対応の機械学習です。cuML は scikit-learn と互換性のある API を提供し、NVIDIA GPU 上で実行することで、大規模なデータセットで大幅な高速化を実現します。

このスキルを使用する場面

次のような場合にこのスキルを使用します。

  • 分類モデルのトレーニング(カテゴリの予測、不正の検出、テキストの分類)
  • 回帰モデルのトレーニング(値の予測、価格の予測、数量の推定)
  • データのクラスタリング(顧客のセグメント化、ドキュメントのグループ化、パターンの発見)
  • 次元削減(高次元データの可視化、特徴量の圧縮)
  • 大規模なデータセットの前処理と特徴量エンジニアリング
  • GPU アクセラレーションが有効な、10K 行以上のデータセットに対するあらゆる ML タスク

初期化(必須)

すべてのスクリプトは、必ずこの定型コードから始めてください。実際の GPU ML 処理をテストします。

import pandas as pd
import numpy as np

try:
    import cudf
    import cuml
    # Smoke-test: verify GPU ML works end-to-end
    _test_data = cudf.DataFrame({'a': [1.0, 2.0, 3.0, 4.0], 'b': [5.0, 6.0, 7.0, 8.0]})
    _km = cuml.cluster.KMeans(n_clusters=2, n_init=1, random_state=42)
    _km.fit(_test_data)
    assert len(_km.labels_) == 4
    GPU = True
except Exception as e:
    print(f"[GPU] cuml unavailable, falling back to scikit-learn: {e}")
    GPU = False

def read_csv(path):
    return cudf.read_csv(path) if GPU else pd.read_csv(path)

def to_pd(df):
    """Convert cuML/cuDF output to pandas. Use this instead of .to_pandas() directly."""
    if not GPU:
        return df
    try:
        return df.to_pandas()
    except Exception as e:
        print(f"[GPU] .to_pandas() failed, using Arrow fallback: {e}")
        return df.to_arrow().to_pandas()

インポートパターン

# GPU mode
if GPU:
    from cuml.cluster import KMeans, DBSCAN, HDBSCAN
    from cuml.ensemble import RandomForestClassifier, RandomForestRegressor
    from cuml.linear_model import LinearRegression, Ridge, Lasso, LogisticRegression
    from cuml.neighbors import KNeighborsClassifier, KNeighborsRegressor
    from cuml.svm import SVC, SVR
    from cuml.decomposition import PCA, TruncatedSVD
    from cuml.manifold import UMAP, TSNE
    from cuml.preprocessing import StandardScaler, MinMaxScaler, LabelEncoder
    from cuml.model_selection import train_test_split
    from cuml.metrics import accuracy_score, r2_score, mean_squared_error
# CPU fallback
else:
    from sklearn.cluster import KMeans, DBSCAN, HDBSCAN
    from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor
    from sklearn.linear_model import LinearRegression, Ridge, Lasso, LogisticRegression
    from sklearn.neighbors import KNeighborsClassifier, KNeighborsRegressor
    from sklearn.svm import SVC, SVR
    from sklearn.decomposition import PCA, TruncatedSVD
    from sklearn.manifold import TSNE
    from sklearn.preprocessing import StandardScaler, MinMaxScaler, LabelEncoder
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import accuracy_score, r2_score, mean_squared_error
    # UMAP not in sklearn — skip or pip install umap-learn

クイックリファレンス

トレーニング/テストデータの分割(ここから開始)
X = df[["feature1", "feature2", "feature3"]].astype("float32")
y = df["target"]

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
分類
model = RandomForestClassifier(n_estimators=100, max_depth=10, random_state=42)
model.fit(X_train, y_train)

predictions = model.predict(X_test)
accuracy = float(accuracy_score(to_pd(y_test), to_pd(predictions)))
print(f"Accuracy: {accuracy:.4f}")

# Feature importances (tree models only)
importances = to_pd(model.feature_importances_)
for name, imp in zip(feature_names, importances):
    print(f"  {name}: {imp:.4f}")
回帰
model = Ridge(alpha=1.0)
model.fit(X_train, y_train)

predictions = model.predict(X_test)
r2 = float(r2_score(to_pd(y_test), to_pd(predictions)))
mse = float(mean_squared_error(to_pd(y_test), to_pd(predictions)))
print(f"R² Score: {r2:.4f}")
print(f"MSE: {mse:.4f}")

# Coefficients
coeffs = to_pd(model.coef_)
print(f"Intercept: {float(model.intercept_):.4f}")
クラスタリング(KMeans)
X = df[["feature1", "feature2"]].astype("float32")

model = KMeans(n_clusters=4, n_init=10, random_state=42)
model.fit(X)

labels = to_pd(model.labels_)
centroids = to_pd(model.cluster_centers_)
inertia = float(model.inertia_)

print(f"Inertia: {inertia:.2f}")
print(f"Cluster sizes: {labels.value_counts().sort_index().to_dict()}")
print(f"Centroids:\n{centroids}")
次元削減(PCA)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X.astype("float32"))

pca = PCA(n_components=3)
X_reduced = pca.fit_transform(X_scaled)

variance_ratio = to_pd(pca.explained_variance_ratio_)
print(f"Explained variance: {[f'{v:.4f}' for v in variance_ratio]}")
print(f"Total explained: {float(sum(variance_ratio)):.4f}")
次元削減(UMAP — GPU のみ)
if GPU:
    reducer = UMAP(n_components=2, n_neighbors=15, min_dist=0.1, random_state=42)
    embedding = to_pd(reducer.fit_transform(X_scaled))
    print(f"UMAP embedding shape: {embedding.shape}")
前処理
# Scale numeric features
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X.astype("float32"))

# Encode categorical columns
le = LabelEncoder()
df["category_encoded"] = le.fit_transform(df["category"])

データ型の要件

  • cuML の特徴量には float32 または float64 が必要です。必ずキャストしてください:X.astype("float32")
  • 整数のターゲット(分類ラベル)はそのまま使用できます
  • カテゴリ列は事前にエンコードする必要があります(LabelEncoder または OneHotEncoder)
  • cuML はスパース行列をサポートしていません。必ず密なデータを使用してください

注意点

問題対処法
TypeError: sparse input密な形式に変換します:X.toarray() を使用するか、スパース形式を使用しないでください
PCA の solver='randomized' が失敗するsolver='full' を使用するか、省略します(cuML が自動選択します)
UMAP を CPU で使用できないCPU モードでは UMAP を使わないか、pip install umap-learn を実行します
float64 は float32 より遅いfloat32 にキャストします:X.astype("float32")
大規模なデータセットで OOM が発生する適合処理の前に特徴量を減らすか、データをサンプリングします

出力ガイドライン

ML の結果を報告する際は、次の内容を含めます。

  • データセットの形状(行数 × 特徴量数)とターゲットの分布
  • トレーニング/テスト分割のサイズ
  • 主要な指標(accuracy、R²、MSE など)を整形済みの表で報告
  • 分類の場合:マルチクラスならクラスごとの指標を表示
  • クラスタリングの場合:クラスタのサイズと重心の概要を表示
  • 次元削減の場合:説明分散比を表示
  • 特徴量の重要度を大きい順に一覧表示
  • データ品質の問題(クラスの不均衡、欠損値、外れ値など)を記載

コメント