当前位置: 首页 > news >正文

机器学习完整流程详解

1. 数据加载 (Data Loading)

目的:将原始数据加载到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)

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

常用操作

# 基本统计信息
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)

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

常用方法

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)

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

常见操作

特征缩放

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

处理缺失值

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

分类特征编码

from sklearn.preprocessing import OneHotEncoderencoder = 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)

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

基本模式

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)

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

常用方法

分类问题

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix, classification_reporty_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))

回归问题

from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_scorey_pred = model.predict(X_test_preprocessed)print("MSE:", mean_squared_error(y_test, y_pred))
print("R² Score:", r2_score(y_test, y_pred))

关键点

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

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

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

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

 

http://www.dtcms.com/a/449769.html

相关文章:

  • 计算机网络(六):网络层(功能概述、异构网络互联、路由与转发、拥塞控制)
  • 理解C++20的革命特性——协程引用之——利用协程做一个迷你的Echo Server
  • PDF文件翻译新方法:轻松多语言转换!
  • 网站建设 开源外包做网站公司
  • 济南网站推广公司php网站建设平台搭建
  • 【Linux 系统】文件系统与软硬件连接
  • AI大事记10:从对抗到创造——生成对抗网络 (GANs)
  • 珠海网站建设技术支持wordpress卸载 数据库
  • 力扣169.多数元素
  • 网络层————IP协议
  • 优化算法研究Rastrigin函数
  • php网站开发框架登陆网站空间的后台
  • 四川住房与城乡建设厅网站卡尺 东莞网站建设
  • 【代码随想录day 35】 力扣 494. 目标和
  • 【Qt】网络编程
  • Go语言:高效简洁的现代编程语言
  • 云南公司网站建设做企业网站 需要用服务器吗
  • 网上做公益的网站医疗网站 seo怎么做
  • 重庆有的设计网站企业移动端建设与网站建设
  • 【深度学习04】PyTorch:损失函数、优化器、模型微调、保存与加载
  • 定远建设局官方网站app应用程序开发公司
  • Coze源码分析-资源库-编辑知识库-后端源码-基础设施/存储层
  • JVM栈溢出和堆溢出哪个先满?
  • 宁波网站制作价格阿里云域名申请注册
  • 景山网站建设衡阳市做网站
  • 哈尔滨网站建设q479185700惠四川建设网中标候选人公示
  • 深圳网站设计价格广安网站建设哪家好
  • Selenium(Python)创建Chrome浏览器实例
  • Robot Framework 7.0 报告解析
  • MySQL `SELECT` 查询优化:原理 + 案例 + 实战总结