🎯 学习目标

  • 理解机器学习项目完整流程
  • 掌握各阶段的关键任务
  • 学会识别和避免常见陷阱
  • 了解最佳实践

🔄 完整工作流程

ML工作流程
图:机器学习项目是一个迭代过程

📊 第一阶段:问题定义

明确业务问题

  • 业务目标:要解决什么业务问题?
  • 成功指标:如何衡量成功?
  • 数据可用性:有什么数据可用?
  • 约束条件:时间、资源、合规等限制
💡

好的问题定义是成功的一半。不要急于动手写代码,先花时间理解业务需求。

🗃️ 第二阶段:数据收集与探索

import pandas as pd import numpy as np # 加载数据 df = pd.read_csv('data.csv') # 数据概览 print(df.head()) print(df.info()) print(df.describe()) # 检查缺失值 print(df.isnull().sum()) # 检查数据分布 print(df['target'].value_counts()) # 可视化探索 import matplotlib.pyplot as plt import seaborn as sns # 相关性分析 plt.figure(figsize=(12, 8)) sns.heatmap(df.corr(), annot=True, cmap='coolwarm') plt.show()

🔧 第三阶段:特征工程

特征选择

from sklearn.feature_selection import ( SelectKBest, f_classif, mutual_info_classif ) # 选择最相关的K个特征 selector = SelectKBest( score_func=f_classif, k=10 ) X_selected = selector.fit_transform(X, y) # 查看选中的特征 selected_features = X.columns[ selector.get_support() ]

特征构建

# 创建新特征 df['feature_ratio'] = df['A'] / df['B'] df['feature_sum'] = df['A'] + df['B'] + df['C'] # 时间特征 df['year'] = df['date'].dt.year df['month'] = df['date'].dt.month df['day_of_week'] = df['date'].dt.dayofweek # 文本特征 df['text_length'] = df['text'].str.len() df['word_count'] = df['text'].str.split().str.len()

🤖 第四阶段:模型选择与训练

from sklearn.linear_model import LogisticRegression from sklearn.ensemble import RandomForestClassifier from sklearn.svm import SVC from sklearn.model_selection import cross_val_score # 候选模型 models = { 'Logistic Regression': LogisticRegression(), 'Random Forest': RandomForestClassifier(), 'SVM': SVC() } # 交叉验证比较 for name, model in models.items(): scores = cross_val_score(model, X_train, y_train, cv=5) print(f"{name}: {scores.mean():.3f} (+/- {scores.std():.3f})")

📈 第五阶段:模型评估

分类指标

from sklearn.metrics import ( accuracy_score, precision_score, recall_score, f1_score, classification_report, confusion_matrix ) # 计算各项指标 print(f"准确率: {accuracy_score(y_test, y_pred)}") print(f"精确率: {precision_score(y_test, y_pred)}") print(f"召回率: {recall_score(y_test, y_pred)}") print(f"F1分数: {f1_score(y_test, y_pred)}") # 详细报告 print(classification_report(y_test, y_pred)) # 混淆矩阵 print(confusion_matrix(y_test, y_pred))

回归指标

from sklearn.metrics import ( mean_squared_error, mean_absolute_error, r2_score ) # 计算各项指标 print(f"MSE: {mean_squared_error(y_test, y_pred)}") print(f"RMSE: {np.sqrt(mean_squared_error(y_test, y_pred))}") print(f"MAE: {mean_absolute_error(y_test, y_pred)}") print(f"R²: {r2_score(y_test, y_pred)}")

🚀 第六阶段:模型部署

import joblib # 保存模型 joblib.dump(model, 'model.joblib') joblib.dump(scaler, 'scaler.joblib') # 加载模型 loaded_model = joblib.load('model.joblib') loaded_scaler = joblib.load('scaler.joblib') # 预测新数据 def predict_new(data): scaled = loaded_scaler.transform(data) return loaded_model.predict(scaled)

📝 本节小结

  • • 机器学习项目有标准工作流程
  • • 问题定义是最重要但常被忽视的环节
  • • 数据质量和特征工程决定模型上限
  • • 持续监控和迭代是生产环境的关键