2.4 数据准备基础
Scikit-learn 数据准备基础教程:NumPy/Pandas兼容性与线性回归入门
本教程详细介绍Scikit-learn数据准备基础,涵盖NumPy数组和Pandas DataFrame与Scikit-learn的兼容性、数据类型处理要求,并通过一个简单线性回归模型示例,帮助初学者快速上手机器学习。
推荐工具
数据准备基础:为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数据准备的基础:
- 确保数据以NumPy数组格式提供,兼容Scikit-learn模型。
- 正确处理数值型和类别型数据,使用编码技术优化输入。
- 通过一个线性回归示例,实践了从数据准备到模型训练和评估的全过程。
作为初学者,现在你可以尝试使用自己的数据集,应用这些技巧构建更多复杂模型。记住,数据质量是机器学习成功的关键,花时间在数据准备上总能带来回报。
开发工具推荐