机器学习完整流程详解

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))

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

相关推荐
@小匠4 小时前
Read Frog:一款开源的 AI 驱动浏览器语言学习扩展
人工智能·学习
山间小僧5 小时前
「AI学习笔记」RNN
机器学习·aigc·ai编程
网教盟人才服务平台7 小时前
“方班预备班盾立方人才培养计划”正式启动!
大数据·人工智能
芯智工坊7 小时前
第15章 Mosquitto生产环境部署实践
人工智能·mqtt·开源
菜菜艾7 小时前
基于llama.cpp部署私有大模型
linux·运维·服务器·人工智能·ai·云计算·ai编程
TDengine (老段)7 小时前
TDengine IDMP 可视化 —— 分享
大数据·数据库·人工智能·时序数据库·tdengine·涛思数据·时序数据
小真zzz8 小时前
搜极星:第三方多平台中立GEO洞察专家全面解析
人工智能·搜索引擎·seo·geo·中立·第三方平台
GreenTea8 小时前
从 Claw-Code 看 AI 驱动的大型项目开发:2 人 + 10 个自治 Agent 如何产出 48K 行 Rust 代码
前端·人工智能·后端
火山引擎开发者社区8 小时前
秒级创建实例,火山引擎 Milvus Serverless 让 AI Agent 开发更快更省
人工智能