Communityコーディング&開発github.com

cuML 機械学習スキル

NVIDIA cuMLを使用したGPU加速機械学習スキル。分類、回帰、クラスタリング、次元削減など、テーブルデータのモデルトレーニングタスクに使用します。

cuML 機械学習スキル とは?

このスキルは、NVIDIA RAPIDS cuMLライブラリを活用してGPU上で高速な機械学習を実行するためのものです。cuMLはscikit-learn互換のAPIを提供し、大規模データセットに対して大幅な処理速度向上を実現します。主な機能として、分類(RandomForest、SVMなど)、回帰(Ridge、Lassoなど)、クラスタリング(KMeans、DBSCAN)、次元削減(PCA、UMAP)をサポートし、さらに前処理(StandardScaler、LabelEncoder)やデータ分割(train_test_split)も含まれています。スキルは自動的にGPUとCPUのフォールバックを検出し、GPUが利用できない場合でもscikit-learnで同等の処理を実行できるよう設計されています。テーブルデータが10,000行以上の場合にGPU加速の恩恵を最大限に受けることができ、常にfloat32型へのキャストや密なデータ形式の使用などの注意点がドキュメントに記載されています。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/rpulid/skills/tree/HEAD/skills/AI_Research/deepagents/examples/nvidia_deep_agent/skills/cuml-machine-learning

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

cuML 機械学習スキル は何をしますか?

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

このスキルを使用するタイミング

以下の場合にこのスキルを使用します:

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

初期化 (必須)

すべてのスクリプトは常にこの定型コードから始めてください。これにより実際の GPU ML 操作がテストされます。

import pandas as pd
import numpy as np

try:
    import cudf
    import cuml
    # スモークテスト: GPU ML がエンドツーエンドで動作することを確認
    _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 が利用できません。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):
    """cuML/cuDF の出力を pandas に変換します。直接 .to_pandas() を使う代わりにこれを使用してください。"""
    if not GPU:
        return df
    try:
        return df.to_pandas()
    except Exception as e:
        print(f"[GPU] .to_pandas() に失敗しました。Arrow フォールバックを使用します: {e}")
        return df.to_arrow().to_pandas()

インポートパターン

# GPU モード
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 フォールバック
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 は sklearn に含まれていません — スキップ または 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}")

# 特徴量重要度 (ツリーモデルのみ)
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}")

# 係数
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}")

前処理

# 数値特徴量のスケーリング
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X.astype("float32"))

# カテゴリカル列のエンコーディング
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 が自動選択)
CPU モードで UMAP が利用不可CPU モードでは UMAP をスキップ または pip install umap-learn
Float64 が float32 より遅いfloat32 にキャスト: X.astype("float32")
大規模データセットで OOM特徴量削減または事前にデータをサンプリング

出力ガイドライン

機械学習の結果を報告する際は:

  • データセットの形状 (行数 × 特徴量数) とターゲットの分布を含める
  • 学習/テスト分割サイズを表示する
  • 主要な指標を整形されたテーブルで報告する (Accuracy, R², MSE など)
  • 分類の場合: マルチクラスではクラスごとの指標を表示する
  • クラスタリングの場合: クラスタサイズと重心の要約を表示する
  • 次元削減の場合: 説明分散比を表示する
  • 特徴量重要度を大きさでランク付けして一覧表示する
  • データ品質の問題 (クラスの不均衡、欠損値、外れ値) に注意する

関連スキル