mcpField
M
machine-learning

machine-learning

github.com/pluginagentmarketplace数据与数据库737 次安装42 周前更新
代码仓库

关于 machine-learning

此机器学习技能面向使用 Scikit-Learn 构建模型的数据从业者,涵盖分类、回归和聚类,并提供模型评估、调参与特征处理示例。内容还介绍模型选择、交叉验证和管道实践。

主要功能

  1. 01构建分类、回归和聚类模型
  2. 02使用多种指标评估模型
  3. 03通过交叉验证评估表现
  4. 04使用 GridSearchCV 调整超参数
  5. 05进行特征缩放与编码
  6. 06用 Pipeline 组合处理步骤

适用场景

  1. 01训练分类模型并生成评估报告
  2. 02拟合回归模型并检查误差指标
  3. 03对数据进行聚类并观察肘部法结果
  4. 04通过交叉验证和调参比较模型

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/pluginagentmarketplace/custom-plugin-ai-data-scientist --skill machine-learning

安装后在 Claude Code 中输入/machine-learning确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/
model_config.yaml
README.md
references/
GUIDE.md
README.md
scripts/
README.md
train_model.py

详细介绍

使用 Scikit-Learn 进行机器学习

构建、训练和评估用于分类、回归和聚类的 ML 模型。

快速入门

分类
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report

# Split data
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

# Train model
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

# Predict
predictions = model.predict(X_test)
probabilities = model.predict_proba(X_test)

# Evaluate
print(classification_report(y_test, predictions))
回归
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.metrics import mean_absolute_error, r2_score

model = GradientBoostingRegressor(n_estimators=100)
model.fit(X_train, y_train)

predictions = model.predict(X_test)

print(f"MAE: {mean_absolute_error(y_test, predictions):.2f}")
print(f"R²: {r2_score(y_test, predictions):.3f}")
聚类
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# Find optimal k (elbow method)
inertias = []
for k in range(1, 11):
    km = KMeans(n_clusters=k, random_state=42)
    km.fit(X)
    inertias.append(km.inertia_)

plt.plot(range(1, 11), inertias, marker='o')
plt.xlabel('Number of clusters')
plt.ylabel('Inertia')
plt.show()

# Train with optimal k
kmeans = KMeans(n_clusters=5, random_state=42)
clusters = kmeans.fit_predict(X)

模型选择指南

分类:

  • 逻辑回归:线性、易于解释,可作为基线
  • 随机森林:非线性、可提供特征重要性、鲁棒
  • XGBoost:性能最佳,可处理缺失数据
  • SVM:适用于小型数据集,使用核技巧

回归:

  • 线性回归:适用于线性关系、易于解释
  • Ridge/Lasso:正则化、特征选择
  • 随机森林:非线性、对异常值具有鲁棒性
  • XGBoost:性能最佳,常在竞赛中胜出

聚类:

  • K-Means:速度快,适用于球形簇
  • DBSCAN:适用于任意形状,可处理噪声
  • 层次聚类:可生成树状图,无需选择 k

评估指标

分类:

from sklearn.metrics import (
    accuracy_score, precision_score, recall_score,
    f1_score, roc_auc_score, confusion_matrix
)

accuracy = accuracy_score(y_true, y_pred)
precision = precision_score(y_true, y_pred, average='weighted')
recall = recall_score(y_true, y_pred, average='weighted')
f1 = f1_score(y_true, y_pred, average='weighted')
roc_auc = roc_auc_score(y_true, y_pred_proba, multi_class='ovr')

回归:

from sklearn.metrics import (
    mean_absolute_error, mean_squared_error, r2_score
)

mae = mean_absolute_error(y_true, y_pred)
mse = mean_squared_error(y_true, y_pred)
rmse = np.sqrt(mse)
r2 = r2_score(y_true, y_pred)

交叉验证

from sklearn.model_selection import cross_val_score

scores = cross_val_score(model, X, y, cv=5, scoring='f1_weighted')
print(f"CV F1: {scores.mean():.3f} (+/- {scores.std() * 2:.3f})")

超参数调优

from sklearn.model_selection import GridSearchCV

param_grid = {
    'n_estimators': [100, 200, 300],
    'max_depth': [5, 10, 15],
    'min_samples_split': [2, 5, 10]
}

grid_search = GridSearchCV(
    RandomForestClassifier(),
    param_grid,
    cv=5,
    scoring='f1_weighted',
    n_jobs=-1
)

grid_search.fit(X_train, y_train)
print(f"Best params: {grid_search.best_params_}")
print(f"Best score: {grid_search.best_score_:.3f}")

# Use best model
best_model = grid_search.best_estimator_

特征工程

from sklearn.preprocessing import StandardScaler, LabelEncoder

# Scaling
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Encoding
encoder = LabelEncoder()
y_encoded = encoder.fit_transform(y)

# Polynomial features
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree=2)
X_poly = poly.fit_transform(X)

流水线

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier

pipeline = Pipeline([
    ('scaler', StandardScaler()),
    ('classifier', RandomForestClassifier(n_estimators=100))
])

pipeline.fit(X_train, y_train)
predictions = pipeline.predict(X_test)

最佳实践

  1. 始终在预处理前拆分数据
  2. 使用交叉验证获得可靠的估计
  3. 对基于距离的模型缩放特征
  4. 处理类别不平衡(SMOTE、类别权重)
  5. 检查是否过拟合(训练与测试性能对比)
  6. 使用 joblib 或 pickle 保存模型

评论

支持 Markdown