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 上运行,在大规模数据集上实现显著的加速。

何时使用此技能

在以下情况使用此技能:

  • 训练分类模型(预测类别、检测欺诈、文本分类)
  • 训练回归模型(预测数值、预测价格、估算数量)
  • 对数据进行聚类(客户分群、文档分组、发现模式)
  • 降维(可视化高维数据、压缩特征)
  • 对大型数据集进行预处理和特征工程
  • 任何在 1 万行以上数据集上的机器学习任务,且 GPU 加速有帮助的场景

初始化(必需)

每个脚本都必须以此样板代码开头。它会测试实际的 GPU 机器学习操作。

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 会自动选择)
CPU 模式下无法使用 UMAP在 CPU 模式下跳过 UMAP,或执行 pip install umap-learn
Float64 比 float32 慢转换为 float32:X.astype("float32")
大数据集内存溢出(OOM)在拟合前减少特征数量或对数据进行采样

输出指南

报告机器学习结果时:

  • 包括数据集形状(行数 × 特征数)和目标分布
  • 显示训练/测试集划分的大小
  • 以格式化表格报告关键指标(准确率、R²、MSE 等)
  • 对于多分类任务:显示每个类别的指标
  • 对于聚类:显示各簇大小和质心摘要
  • 对于降维:显示解释方差比
  • 按重要性大小列出特征重要性排序
  • 记录任何数据质量问题(类别不平衡、缺失值、异常值)

评论

支持 Markdown