机器学习完整流程详解

1. 数据加载 (Data Loading)

目的:将原始数据加载到Python环境中,准备进行分析和处理

常用方法

python 复制代码
# 从CSV文件加载
import pandas as pd
data = pd.read_csv('dataset.csv')

# Scikit-learn内置数据集
from sklearn import datasets
iris = datasets.load_iris()  # 加载鸢尾花数据集
digits = datasets.load_digits()  # 加载手写数字数据集

# 其他格式
# data = pd.read_excel('dataset.xlsx')  # Excel文件
# data = pd.read_json('dataset.json')  # JSON文件

关键点

  • 检查数据是否加载正确:data.head(), data.shape
  • 了解数据的基本结构:特征、标签的分布

2. 数据探索 (Exploratory Data Analysis, EDA)

目的:理解数据特征、发现模式、识别问题

常用操作

python 复制代码
# 基本统计信息
print(data.describe())

# 检查缺失值
print(data.isnull().sum())

# 可视化探索
import matplotlib.pyplot as plt
import seaborn as sns

# 特征分布直方图
data.hist(figsize=(12, 8))
plt.show()

# 特征间关系
sns.pairplot(data, hue='target_column')  # 分类问题时特别有用
plt.show()

关键点

  • 识别异常值、缺失值
  • 理解特征之间的关系
  • 发现数据不平衡等问题

3. 数据划分 (Data Splitting)

目的:将数据分为训练集和测试集,有时还包括验证集

常用方法

python 复制代码
from sklearn.model_selection import train_test_split

# 假设X是特征,y是标签
X = data.drop('target_column', axis=1)  # 特征
y = data['target_column']  # 标签

# 划分数据集 (80%训练,20%测试)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, 
    test_size=0.2, 
    random_state=42  # 随机种子确保可重复性
)

关键点

  • 保持数据分布一致性(使用stratify=y处理不平衡数据)
  • 测试集大小通常为20-30%
  • 随机种子(random_state)确保结果可重现

4. 数据预处理 (Data Preprocessing)

目的:将原始数据转换为更适合机器学习模型的格式

常见操作

特征缩放

python 复制代码
from sklearn.preprocessing import StandardScaler, MinMaxScaler

scaler = StandardScaler()  # 标准化 (均值0,方差1)
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)  # 注意:使用训练集的参数转换测试集

处理缺失值

python 复制代码
from sklearn.impute import SimpleImputer

imputer = SimpleImputer(strategy='mean')  # 也可以用'median'或'most_frequent'
X_train_imputed = imputer.fit_transform(X_train)
X_test_imputed = imputer.transform(X_test)

分类特征编码

python 复制代码
from sklearn.preprocessing import OneHotEncoder

encoder = OneHotEncoder(handle_unknown='ignore')
X_train_encoded = encoder.fit_transform(X_train[categorical_cols])
X_test_encoded = encoder.transform(X_test[categorical_cols])

关键点

  • 所有预处理都应先拟合(fit)训练数据,然后转换(transform)测试数据
  • 预处理步骤可以组合使用Pipeline

5. 模型训练 (Model Training)

目的:使用训练数据学习特征与标签之间的关系

基本模式

python 复制代码
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier

# 创建模型实例
model = LogisticRegression()
# 或 model = RandomForestClassifier(n_estimators=100)

# 训练模型
model.fit(X_train_preprocessed, y_train)

关键点

  • 不同算法有不同的超参数需要设置
  • 训练前确保数据已经正确预处理
  • 可以使用交叉验证评估训练效果

6. 模型评估 (Model Evaluation)

目的:评估模型在未见过的数据上的表现

常用方法

分类问题

python 复制代码
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix, classification_report

y_pred = model.predict(X_test_preprocessed)

# 准确率
print("Accuracy:", accuracy_score(y_test, y_pred))

# 混淆矩阵
print(confusion_matrix(y_test, y_pred))

# 分类报告
print(classification_report(y_test, y_pred))

回归问题

python 复制代码
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score

y_pred = model.predict(X_test_preprocessed)

print("MSE:", mean_squared_error(y_test, y_pred))
print("R² Score:", r2_score(y_test, y_pred))

关键点

  • 永远在测试集上评估最终模型性能
  • 根据问题类型选择合适的评估指标
  • 好的模型应该在训练集和测试集上表现均衡

完整示例流程(鸢尾花数据集)

python 复制代码
# 1. 加载数据
from sklearn.datasets import load_iris
iris = load_iris()
X, y = iris.data, iris.target

# 2. 数据探索
print("特征名称:", iris.feature_names)
print("类别名称:", iris.target_names)
print("数据形状:", X.shape)

# 3. 数据划分
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 4. 数据预处理
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 5. 模型训练
from sklearn.linear_model import LogisticRegression
model = LogisticRegression(max_iter=200)
model.fit(X_train_scaled, y_train)

# 6. 模型评估
from sklearn.metrics import classification_report
y_pred = model.predict(X_test_scaled)
print(classification_report(y_test, y_pred))

这个流程是机器学习项目的基础框架。随着你的进步,你会学习到更高级的技术,如特征工程、超参数调优、模型集成等,但这些都是在掌握了这个基本流程之后的事情。

相关推荐
wa的一声哭了2 小时前
Deep Learning Optimizer | Adam、AdamW
人工智能·深度学习·神经网络·机器学习·自然语言处理·transformer·pytest
算法与编程之美2 小时前
探索flatten的其他参数用法及对报错异常进行修正
人工智能·pytorch·python·深度学习·机器学习
IT_陈寒2 小时前
5种JavaScript性能优化技巧:从V8引擎原理到实战提速200%
前端·人工智能·后端
N0nename2 小时前
Inception V3--J9
人工智能·深度学习·计算机视觉
做运维的阿瑞2 小时前
GPU即服务:Linux与云原生如何联手开启AI算力“自来水“时代
linux·人工智能·云原生
Ykkk_2 小时前
小土堆pytorch
人工智能·pytorch·python
FriendshipT2 小时前
图像分割:PyTorch从零开始实现SegFormer语义分割
人工智能·pytorch·python·深度学习·目标检测·语义分割·实例分割
my烂笔头3 小时前
cv领域接地气的方向
人工智能·深度学习·计算机视觉
LaughingZhu4 小时前
Product Hunt 每日热榜 | 2025-10-03
人工智能·经验分享·搜索引擎·产品运营