Scikit-learn 中文教程

第二部分:Scikit-learn 核心基础
第 3 章 Scikit-learn 核心设计与 API 体系
第 4 章 数据集模块与数据划分
第三部分:数据预处理与特征工程
第 5 章 数据预处理核心模块(sklearn.preprocessing)
第 6 章 特征工程:提取、选择与构建
第四部分:模型评估与验证
第 7 章 模型评估指标(按任务类型划分)
第 8 章 模型验证与超参数调优
第五部分:Scikit-learn 核心算法模块
第 9 章 有监督学习:分类算法
第 10 章 有监督学习:回归算法
第 11 章 无监督学习:聚类与密度算法
第 12 章 半监督学习与其他常用算法
第八部分:性能优化与问题解决
第 18 章 Scikit-learn 性能优化
第 19 章 Scikit-learn 常见问题与解决方案

4.2 外部数据集加载与适配

Scikit-learn 数据加载:从 CSV、数据库到自定义数据集完整指南

Scikit-learn 中文教程

本教程章节讲解如何使用 Scikit-learn 加载和适配外部数据集,包括从 CSV/Excel、数据库(MySQL/PostgreSQL)加载数据,并构建符合 Scikit-learn 输入规范的自定义数据集。

推荐工具
PyCharm专业版开发必备

功能强大的Python IDE,提供智能代码补全、代码分析、调试和测试工具,提高Python开发效率。特别适合处理列表等数据结构的开发工作。

了解更多

外部数据集加载与适配

在机器学习项目中,数据加载是第一步,也是最关键的一步。Scikit-learn 库要求输入数据必须是二维特征矩阵(n_samples, n_features)和一维标签向量。本章将详细介绍如何从外部源加载数据,并适配到 Scikit-learn 的规范格式。我们将覆盖从 CSV/Excel、数据库以及自定义数据集的构建。

1. 从 CSV/Excel 加载数据(使用 Pandas 和 Scikit-learn 适配)

CSV 和 Excel 是常见的数据存储格式,我们可以使用 Pandas 库轻松读取它们,然后转换为 Scikit-learn 兼容的格式。

步骤:

  1. 安装必要的库(如果未安装):

    • 确保已安装 pandasscikit-learn
    • 安装方法:pip install pandas scikit-learn
  2. 读取数据

    • 使用 Pandas 的 read_csv() 函数读取 CSV 文件。
    • 使用 read_excel() 函数读取 Excel 文件。
  3. 适配到 Scikit-learn

    • 分离特征和标签:假设数据集最后一列是标签,其余是特征。
    • 特征矩阵(X)和标签向量(y)必须是 NumPy 数组或类似数组。

示例代码:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split

# 从 CSV 文件加载数据
data_csv = pd.read_csv('your_data.csv')

# 从 Excel 文件加载数据
data_excel = pd.read_excel('your_data.xlsx')

# 假设数据框中有 'feature1', 'feature2', ..., 'label' 列
# 分离特征和标签
X = data_csv[['feature1', 'feature2']].values  # 转换为 NumPy 数组
y = data_csv['label'].values

# 或者,如果标签列是最后一列
X = data_csv.iloc[:, :-1].values  # 所有行,除最后一列
Y = data_csv.iloc[:, -1].values  # 最后一列作为标签

# 现在 X 和 y 符合 Scikit-learn 输入规范
print(f'特征矩阵形状: {X.shape}')
print(f'标签向量形状: {y.shape}')

注意事项

  • 确保数据没有缺失值,可以使用 fillna() 方法处理。
  • 如果标签是类别数据,可能需要编码为数值(如使用 sklearn.preprocessing.LabelEncoder)。

2. 从数据库加载数据(MySQL/PostgreSQL → DataFrame → 特征/标签分离)

对于存储在数据库中的数据,我们可以使用 SQL 查询和 Pandas 来加载,然后进行适配。

步骤:

  1. 安装数据库驱动(如果需要):

    • 对于 MySQL:pip install mysql-connector-pythonpip install pymysql
    • 对于 PostgreSQL:pip install psycopg2
  2. 连接到数据库:使用 SQLAlchemy 或直接使用 Pandas 的 read_sql_query() 函数。

  3. 执行查询并转换为 DataFrame

  4. 分离特征和标签,类似 CSV/Excel 方法。

示例代码:

import pandas as pd
from sqlalchemy import create_engine  # 可选,用于连接数据库

# 连接到 MySQL 数据库(示例)
mysql_engine = create_engine('mysql+mysqlconnector://user:password@host/database')

# 执行查询并加载到 DataFrame
query = "SELECT feature1, feature2, label FROM your_table"
data_db = pd.read_sql_query(query, mysql_engine)

# 对于 PostgreSQL,类似
# postgres_engine = create_engine('postgresql://user:password@host/database')
# data_db = pd.read_sql_query(query, postgres_engine)

# 分离特征和标签
X = data_db[['feature1', 'feature2']].values
y = data_db['label'].values

print(f'从数据库加载的特征矩阵形状: {X.shape}')
print(f'标签向量形状: {y.shape}')

建议

  • 如果数据量大,考虑分批加载或优化查询以避免内存问题。
  • 确保数据库连接安全和权限正确。

3. 自定义数据集构建(符合 Scikit-learn 输入规范)

有时候,数据来自非标准源,或者需要手动创建数据集,例如从文本文件或模拟生成数据。关键是确保数据格式符合 Scikit-learn 的要求。

步骤:

  1. 收集或生成数据:可以使用 NumPy 或列表手动创建数据。
  2. 组织数据:特征矩阵应为二维数组(n_samples, n_features),标签向量为一维数组(n_samples)。
  3. 可选预处理:如标准化或编码。

示例代码:

import numpy as np

# 创建自定义数据集:假设有 100 个样本,每个样本有 2 个特征和 1 个标签
# 生成随机数据
np.random.seed(42)  # 为了可重复性
X_custom = np.random.rand(100, 2)  # 特征矩阵:100 行 2 列
y_custom = np.random.randint(0, 2, size=100)  # 标签向量:100 个 0 或 1

# 或者,从列表中构建
X_list = [[1, 2], [3, 4], [5, 6]]  # 列表的列表
y_list = [0, 1, 0]

# 转换为 NumPy 数组(Scikit-learn 推荐使用数组)
X_array = np.array(X_list)
y_array = np.array(y_list)

print(f'自定义特征矩阵形状: {X_custom.shape}')
print(f'自定义标签向量形状: {y_custom.shape}')

重要点

  • Scikit-learn 兼容任何类似数组的结构(如 NumPy 数组、Pandas DataFrame 的 .values)。
  • 确保标签是一维的,特征矩阵是二维的。

总结

在本章中,我们学习了如何从外部数据集加载数据并适配到 Scikit-learn 的输入规范。无论是从 CSV/Excel、数据库还是自定义构建,关键步骤都是使用 Pandas 或 NumPy 来管理和转换数据。记住:特征矩阵(X)应为二维,标签向量(y)为一维。这确保了数据可以直接用于 Scikit-learn 的模型训练和评估。

下一步:在加载数据后,通常需要进行数据预处理,如处理缺失值、特征缩放或编码,这将在后续章节中介绍。

开发工具推荐
Python开发者工具包

包含虚拟环境管理、代码格式化、依赖管理、测试框架等Python开发全流程工具,提高开发效率。特别适合处理复杂数据结构和算法。

获取工具包