首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
1.1 为何选择机器学习
1.1.1 机器学习能够解决的问题
1.1.2 熟悉任务和数据
1.2 为何选择Python
1.3 scikit-learn
1.4 必要的库和工具
1.4.1 Jupyter Notebook
1.4.2 NumPy
1.4.3 SciPy
1.4.4 matplotlib
1.4.5 pandas
1.4.6 mglearn
1.5 Python 2 与Python 3 的对比
1.7 第 一个应用:鸢尾花分类
1.7.1 初识数据
1.7.2 衡量模型是否成功:训练数据与测试数据
1.7.3 要事第 一:观察数据
1.7.4 构建第 一个模型:k 近邻算法
1.7.5 做出预测
1.7.6 评估模型
2.1 分类与回归
2.2 泛化、过拟合与欠拟合
2.3 监督学习算法
2.3.1 一些样本数据集
2.3.2 k 近邻
2.3.3 线性模型
2.3.4 朴素贝叶斯分类器
2.3.5 决策树
2.3.6 决策树集成
2.3.7 核支持向量机
2.3.8 神经网络(深度学习)
2.4 分类器的不确定度估计
2.4.1 决策函数
2.4.2 预测概率
2.4.3 多分类问题的不确定度
3.1 无监督学习的类型
3.2 无监督学习的挑战
3.3 预处理与缩放
3.3.1 不同类型的预处理
3.3.2 应用数据变换
3.3.3 对训练数据和测试数据进行相同的缩放
3.3.4 预处理对监督学习的作用
3.4 降维、特征提取与流形学习
3.4.1 主成分分析
3.4.2 非负矩阵分解
3.4.3 用t-SNE 进行流形学习
3.5 聚类
3.5.1 k 均值聚类
3.5.2 凝聚聚类
3.5.3 DBSCAN
3.5.4 聚类算法的对比与评估
3.5.5 聚类方法小结
当前位置:
首页>>
技术小册>>
Python机器学习基础教程(上)
小册名称:Python机器学习基础教程(上)
### 3.3 预处理与缩放 在机器学习项目中,数据预处理是至关重要的一步,它直接影响到模型训练的效率、准确性以及泛化能力。预处理包括但不限于数据清洗、特征选择、特征工程、数据标准化(归一化)、缩放等多个环节。本章将聚焦于数据预处理中的缩放技术,探讨其在Python中使用机器学习库(如scikit-learn)时的应用与实践。 #### 3.3.1 为什么要进行预处理与缩放? 在机器学习领域,不同特征的量纲和尺度差异可能导致模型训练过程中的诸多问题。例如,在梯度下降等优化算法中,特征值范围差异大可能导致梯度在更新时步长不一致,从而影响收敛速度和稳定性。此外,某些算法(如K-近邻算法、支持向量机等)对特征的尺度高度敏感,不进行适当的缩放处理可能会导致模型性能下降。 因此,数据预处理与缩放的目的在于: - **消除量纲影响**:确保不同量纲的特征能够公平地参与模型训练。 - **提高模型收敛速度**:通过调整特征尺度,使模型在训练时能够更快地找到最优解。 - **提升模型性能**:确保模型能够更准确地捕捉数据中的真实模式,提高预测或分类的准确性。 #### 3.3.2 常见的缩放方法 ##### 3.3.2.1 最小-最大标准化(Min-Max Scaling) 最小-最大标准化,也称为归一化,是将特征缩放到一个小的特定区间,通常是[0, 1]。其计算公式为: \[ X_{\text{norm}} = \frac{X - X_{\text{min}}}{X_{\text{max}} - X_{\text{min}}} \] 其中,\(X_{\text{norm}}\) 是归一化后的值,\(X\) 是原始值,\(X_{\text{min}}\) 和 \(X_{\text{max}}\) 分别是特征的最小值和最大值。 在Python中,可以使用scikit-learn库中的`MinMaxScaler`类来实现: ```python from sklearn.preprocessing import MinMaxScaler # 假设X是你的特征数据 scaler = MinMaxScaler() X_scaled = scaler.fit_transform(X) ``` ##### 3.3.2.2 Z-score 标准化 Z-score标准化,也称为标准化或去均值标准化,是将特征调整为均值为0,标准差为1的分布。其计算公式为: \[ X_{\text{std}} = \frac{X - \mu}{\sigma} \] 其中,\(X_{\text{std}}\) 是标准化后的值,\(X\) 是原始值,\(\mu\) 是特征的均值,\(\sigma\) 是特征的标准差。 在scikit-learn中,`StandardScaler`类用于实现Z-score标准化: ```python from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_scaled = scaler.fit_transform(X) ``` ##### 3.3.2.3 MaxAbsScaler `MaxAbsScaler`通过除以每个特征的最大绝对值来缩放数据,使得所有特征的最大绝对值归一化到1。这种方法在处理稀疏数据时特别有用,因为它不会改变数据中的0值。 ```python from sklearn.preprocessing import MaxAbsScaler scaler = MaxAbsScaler() X_scaled = scaler.fit_transform(X) ``` ##### 3.3.2.4 RobustScaler `RobustScaler`通过使用中位数和四分位距(IQR,即第三四分位数与第一四分位数之差)来缩放数据,使得数据更加稳健,对异常值不敏感。这种方法特别适用于包含许多异常值的数据集。 ```python from sklearn.preprocessing import RobustScaler scaler = RobustScaler() X_scaled = scaler.fit_transform(X) ``` #### 3.3.3 缩放方法的选择 选择哪种缩放方法取决于具体的应用场景和数据特性。例如: - 当数据集中存在异常值,且这些异常值可能是有意义的(如金融领域的极端交易值),则应选择对异常值不敏感的缩放方法,如RobustScaler。 - 如果目标是让数据分布在特定区间(如[0, 1]),则最小-最大标准化是一个好选择。 - 当模型对特征的尺度敏感时(如SVM、KNN),通常需要进行缩放处理,但具体选择哪种缩放方法需根据数据特点决定。 - 对于大多数基于梯度的优化算法(如神经网络、逻辑回归的梯度下降优化),Z-score标准化是一个常用的预处理步骤,因为它可以帮助模型更快地收敛。 #### 3.3.4 注意事项 - 在应用缩放方法时,应始终注意保持训练集和测试集(或验证集)缩放参数的一致性,以避免数据泄露问题。通常,我们会使用训练集数据来拟合缩放器(即计算均值、标准差等参数),然后将这些参数应用到测试集上。 - 缩放处理应在数据分割为训练集和测试集之后进行,以确保模型评估的公正性。 - 并非所有情况都需要进行缩放处理。在某些情况下,原始数据的尺度可能已经足够适合模型训练,或者缩放处理可能会引入不必要的噪声。 #### 3.3.5 实践案例 假设我们有一个关于房价预测的数据集,其中包含房屋面积、房间数、地理位置等多个特征。在构建机器学习模型之前,我们需要对这些特征进行预处理,包括缩放处理。以下是一个简化的实践案例: ```python # 加载数据(这里假设数据已经以DataFrame形式加载到变量X和y中) # ... # 数据分割(假设X_train, X_test, y_train, y_test已经分割好) # ... # 选择缩放方法,这里以Z-score标准化为例 from sklearn.preprocessing import StandardScaler scaler = StandardScaler() # 对训练集进行拟合和转换 X_train_scaled = scaler.fit_transform(X_train) # 对测试集进行转换(注意使用训练集得到的参数) X_test_scaled = scaler.transform(X_test) # 接下来,可以使用X_train_scaled和X_test_scaled来训练和评估模型 # ... ``` 通过上述步骤,我们成功地对房价预测数据集中的特征进行了缩放处理,为后续的模型训练奠定了坚实的基础。
上一篇:
3.2 无监督学习的挑战
下一篇:
3.3.1 不同类型的预处理
该分类下的相关小册推荐:
Python数据分析与挖掘实战(下)
Python编程轻松进阶(四)
机器学习算法原理与实战
实战Python网络爬虫
Python合辑13-面向对象编程案例(上)
Python编程轻松进阶(一)
Python面试指南
Python合辑12-面向对象
Python高并发编程与实战
Python编程轻松进阶(三)
剑指Python(磨刀不误砍柴工)
Python神经网络入门与实践