关于 machine-learning
此机器学习技能面向使用 Scikit-Learn 构建模型的数据从业者,涵盖分类、回归和聚类,并提供模型评估、调参与特征处理示例。内容还介绍模型选择、交叉验证和管道实践。
主要功能
- 01构建分类、回归和聚类模型
- 02使用多种指标评估模型
- 03通过交叉验证评估表现
- 04使用 GridSearchCV 调整超参数
- 05进行特征缩放与编码
- 06用 Pipeline 组合处理步骤
适用场景
- 01训练分类模型并生成评估报告
- 02拟合回归模型并检查误差指标
- 03对数据进行聚类并观察肘部法结果
- 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.yamlREADME.mdreferences/GUIDE.mdREADME.mdscripts/README.mdtrain_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)
最佳实践
- 始终在预处理前拆分数据
- 使用交叉验证获得可靠的估计
- 对基于距离的模型缩放特征
- 处理类别不平衡(SMOTE、类别权重)
- 检查是否过拟合(训练与测试性能对比)
- 使用 joblib 或 pickle 保存模型
评论
支持 Markdown