html
理解机器学习中的数据分割和特征缩放
目录
- 数据分割:训练集和测试集
- 什么是测试集?
- 什么是训练集?
- 典型的分割比例
- 使用scikit-learn实现数据分割
- 特征缩放:标准化和归一化
- 为何进行特征缩放?
- 标准化与归一化
- 推荐的方法
- 使用scikit-learn实现特征缩放
- 步骤总结
- 结论
数据分割:训练集和测试集
什么是测试集?
测试集是数据集中保留用于评估机器学习模型性能的子集。通过向模型提供这些保留的数据,您可以评估它对新的、未见过的数据的预测准确性,从而了解模型在实际应用中的表现。
什么是训练集?h3>
相反,训练集是用于训练模型的数据部分。模型在这部分数据中学习模式、关系和结构,以便对新的数据进行预测或分类。
典型的分割比例
常见的做法是将数据分为80%用于训练和20%用于测试。这个比例在为模型提供足够学习的数据和保留足够的数据以稳健地评估其性能之间提供了平衡。
使用scikit-learn实现数据分割
以下是使用scikit-learn的train_test_split
函数进行数据分割的分步指南:
- 导入必要的库
1
from sklearn.model_selection import train_test_split
- 准备您的数据
假设您的特征存储在X
中,目标变量存储在Y
中:
12
X = data.drop('target', axis=1) # FeaturesY = data['target'] # Target variable
- 分割数据
123
X_train, X_test, Y_train, Y_test = train_test_split( X, Y, test_size=0.2, random_state=42)
- test_size=0.2:将20%的数据用于测试。
- random_state=42:通过控制洗牌过程确保可重复性。使用固定的
random_state
意味着每次运行代码时都会得到相同的分割,这对于一致的模型评估至关重要。
- 验证分割
您可以检查每个集合中的记录数量:
12
print(len(X_train)) # 应该是总数据的80%print(len(X_test)) # 应该是总数据的20%
特征缩放:标准化和归一化
为何进行特征缩放?
机器学习算法在数值输入特征处于可比较的尺度时表现更好。具有较大范围的特征可能会不成比例地影响模型,导致性能不佳。特征缩放标准化了特征的范围,提升了模型的效率和准确性。
标准化与归一化
- 标准化:
- 公式:\( z = \frac{(X - \mu)}{\sigma} \)
- 将数据转换为具有均值为0和标准差为1。
- 适用于具有高斯(正态)分布的特征。
- 广泛使用且通常有效,即使数据并非完全正态。
- 归一化:
- 公式:\( X_{norm} = \frac{(X - X_{min})}{(X_{max} - X_{min})} \)
- 将数据缩放到固定范围,通常为0到1。
- 当数据遵循已知分布或需要界限时最佳使用。
推荐的方法
通常建议在进行特征缩放之前先分割数据。这种做法确保缩放参数(如均值和标准差)仅从训练数据中得出,防止数据泄漏,并确保测试数据保持作为真实的保留集。
使用scikit-learn实现特征缩放
- 导入StandardScaler
1
from sklearn.preprocessing import StandardScaler
- 初始化缩放器
1
scaler = StandardScaler()
- 拟合并转换训练数据
1
X_train_scaled = scaler.fit_transform(X_train)
- 转换测试数据
1
X_test_scaled = scaler.transform(X_test)
- 重要:仅在训练数据上拟合缩放器。然后对测试数据应用相同的转换。这确保测试数据被一致地缩放,而不会将测试集的信息引入训练过程中。
- 处理分类变量
如果您的数据集中包含以数值编码的分类变量(例如,0,1,2),请避免对这些列应用缩放,因为这可能会扭曲其含义。确保只有连续的数值特征进行缩放。
步骤总结
- 导入数据:将您的数据集加载到合适的格式中(例如,pandas DataFrame)。
- 分割数据:将数据集分为特征(
X
)和目标(Y
),然后进行80/20的训练-测试分割。
- 处理缺失数据:通过插补或移除处理数据中的任何缺口。
- 特征选择:移除不相关或冗余的特征以提高模型性能。
- 编码数据:在必要时将分类变量转换为数值格式。
- 特征缩放:应用标准化或归一化,以确保所有特征对模型的贡献相同。
结论
适当的数据准备是成功的机器学习项目的基石。通过仔细地分割数据和应用适当的特征缩放,您为构建既准确又可靠的模型奠定了基础。随着您继续探索机器学习,这些基础实践将在应对更复杂的挑战时为您提供帮助。
敬请期待我们的下一篇文章,我们将深入探讨预处理技术和构建稳健的机器学习模型的其他关键方面。