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 常见问题与解决方案

2.4 数据准备基础

Scikit-learn 数据准备基础教程:NumPy/Pandas兼容性与线性回归入门

Scikit-learn 中文教程

本教程详细介绍Scikit-learn数据准备基础,涵盖NumPy数组和Pandas DataFrame与Scikit-learn的兼容性、数据类型处理要求,并通过一个简单线性回归模型示例,帮助初学者快速上手机器学习。

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

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

了解更多

数据准备基础:为Scikit-learn模型准备数据

在机器学习项目中,数据准备是构建有效模型的第一步。Scikit-learn作为Python中强大的机器学习库,对输入数据有特定要求。本教程将引导你理解数据准备的基本概念,包括数据格式、类型处理,并亲手实现你的第一个Scikit-learn模型。

NumPy数组与Pandas DataFrame:Scikit-learn的数据兼容性

Scikit-learn中的模型通常期望数据以NumPy数组的形式输入。NumPy数组是用于数值计算的标准Python库,高效且易于操作。如果你从Pandas DataFrame开始(Pandas是数据处理和分析的流行库),可以轻松转换为NumPy数组。

关键要点:

  • Scikit-learn模型接受二维数组,其中行代表样本,列代表特征。
  • 使用Pandas DataFrame时,通过.values属性或.to_numpy()方法获取NumPy数组。

示例:

import pandas as pd
import numpy as np

# 创建一个简单的Pandas DataFrame
df = pd.DataFrame({
    '特征1': [1, 2, 3, 4],
    '特征2': [5, 6, 7, 8]
})

# 转换为NumPy数组
X_numpy = df.values  # 输出:array([[1, 5], [2, 6], [3, 7], [4, 8]])

这确保了数据与Scikit-learn的兼容性,为后续建模打下基础。

数据类型规范:数值型与类别型数据处理要求

机器学习模型通常处理数值型数据,但实际数据常包含类别型变量。正确处理数据类型是提高模型性能的关键。

数值型数据处理

  • 数值型数据应保持为浮点数或整数形式,避免缺失值。
  • 建议进行标准化或归一化,以提升模型收敛速度和精度。Scikit-learn提供StandardScaler等工具。

类别型数据处理

  • 类别型数据不能直接用于数值模型,需要进行编码。
  • 标签编码:使用LabelEncoder为每个类别分配一个整数。
  • 独热编码:使用OneHotEncoder为每个类别创建二进制列,避免顺序错误。

示例:处理类别型数据

from sklearn.preprocessing import LabelEncoder, OneHotEncoder

# 假设有一个类别列表
colors = ['red', 'blue', 'green', 'blue']

# 标签编码
le = LabelEncoder()
encoded_labels = le.fit_transform(colors)  # 输出:array([0, 1, 2, 1])

# 独热编码
# 注意:独热编码通常用于特征列,需要先转换为二维数组
ohe = OneHotEncoder(sparse_output=False)
ohe_encoded = ohe.fit_transform(encoded_labels.reshape(-1, 1))
print(ohe_encoded)  # 输出:array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.], [0., 1., 0.]])

小试牛刀:第一个Scikit-learn简单模型(线性回归)

线性回归是入门机器学习的经典模型,用于预测连续数值目标。下面通过一个完整示例,展示如何使用准备好的数据训练模型。

完整代码示例

# 导入所需库
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# 步骤1:准备数据
# 假设我们有一个简单的数据集:特征X和目标y
X = np.array([[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]])  # 特征:二维数组,5个样本,每个样本2个特征
y = np.array([3, 5, 7, 9, 11])  # 目标变量:一维数组,对应每个样本的输出值

# 步骤2:划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 步骤3:创建和训练线性回归模型
model = LinearRegression()
model.fit(X_train, y_train)

# 步骤4:进行预测并评估模型
predictions = model.predict(X_test)
mse = mean_squared_error(y_test, predictions)
print(f"预测值: {predictions}")
print(f"均方误差 (MSE): {mse:.2f}")  # 输出较小的MSE表示模型拟合较好

# 步骤5:查看模型参数
print(f"模型系数: {model.coef_}")  # 显示特征权重
print(f"截距: {model.intercept_}")  # 显示截距项

解释说明

  • 数据准备:我们使用NumPy数组作为输入,确保格式正确。
  • 模型训练fit()方法用于训练模型,基于训练数据学习特征与目标之间的关系。
  • 评估:均方误差(MSE)是衡量预测误差的常见指标,值越低越好。
  • 参数解读:系数表示每个特征对目标的影响程度,截距是基础值。

总结

通过本教程,你学习了Scikit-learn数据准备的基础:

  1. 确保数据以NumPy数组格式提供,兼容Scikit-learn模型。
  2. 正确处理数值型和类别型数据,使用编码技术优化输入。
  3. 通过一个线性回归示例,实践了从数据准备到模型训练和评估的全过程。

作为初学者,现在你可以尝试使用自己的数据集,应用这些技巧构建更多复杂模型。记住,数据质量是机器学习成功的关键,花时间在数据准备上总能带来回报。

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

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

获取工具包