首页
技术小册
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.1 不同类型的预处理 在Python进行机器学习项目时,数据预处理是不可或缺的一步,它直接影响着模型训练的效果和效率。数据预处理可以视为将数据“清洗”和转换为模型能够高效处理的格式的过程。本章节将深入探讨不同类型的预处理技术,包括数据清洗、特征选择、特征缩放、编码转换以及缺失值处理等,旨在为读者提供一套全面的数据预处理策略。 #### 3.3.1.1 数据清洗 **1. 去除重复值** 数据集中可能包含完全相同的记录,这些重复数据不仅会增加计算成本,还可能误导模型学习。在Python中,可以使用Pandas库的`drop_duplicates()`方法轻松去除重复行。 ```python import pandas as pd # 假设df是包含重复行的DataFrame df_cleaned = df.drop_duplicates() ``` **2. 异常值处理** 异常值(或称离群点)是那些与其他观测值显著不同的数据点。它们可能是由于测量错误、数据录入错误或极端事件产生的。处理异常值的方法包括删除、替换(如使用中位数、均值或插值法)或将其视为缺失值处理。 ```python # 使用IQR(四分位距)法识别并处理异常值 Q1 = df['column_name'].quantile(0.25) Q3 = df['column_name'].quantile(0.75) IQR = Q3 - Q1 lower_bound = Q1 - 1.5 * IQR upper_bound = Q3 + 1.5 * IQR df = df[(df['column_name'] >= lower_bound) & (df['column_name'] <= upper_bound)] ``` #### 3.3.1.2 特征选择 特征选择是从原始特征集中选择出对模型预测最有用的特征的过程,旨在减少模型复杂度和提高模型性能。常见的特征选择方法包括过滤法、包装法和嵌入法。 **过滤法**:基于统计测试选择特征,如卡方检验、相关系数等。 ```python from sklearn.feature_selection import SelectKBest, chi2 # 假设X为特征矩阵,y为目标变量 X_new = SelectKBest(chi2, k=2).fit_transform(X, y) ``` **包装法**:通过模型性能评估来选择特征,如递归特征消除(RFE)。 ```python from sklearn.feature_selection import RFE from sklearn.linear_model import LogisticRegression # 创建一个逻辑回归模型作为评估器 model = LogisticRegression() rfe = RFE(estimator=model, n_features_to_select=5) fit = rfe.fit(X, y) print("Selected features: ", fit.support_) ``` **嵌入法**:在模型训练过程中自动完成特征选择,如决策树或随机森林中的特征重要性。 ```python from sklearn.ensemble import RandomForestClassifier rf = RandomForestClassifier(n_estimators=100) rf.fit(X, y) importances = rf.feature_importances_ # 可以根据importances选择特征 ``` #### 3.3.1.3 特征缩放 特征缩放是将数据按比例缩放,使之落入一个小的特定区间,如0到1或-1到1。这对于很多机器学习算法(尤其是基于距离的算法,如K-NN、K-means和SVM)至关重要,因为它们对特征的尺度非常敏感。 **标准化(Z-score标准化)**:将特征值减去均值后除以标准差,使数据分布符合标准正态分布。 ```python from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_scaled = scaler.fit_transform(X) ``` **归一化(Min-Max Scaling)**:将特征值缩放到给定的最小值和最大值之间(通常是0和1)。 ```python from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() X_scaled = scaler.fit_transform(X) ``` #### 3.3.1.4 编码转换 机器学习算法通常要求输入是数值型数据,而实际应用中数据往往包含大量的类别型(分类)数据。因此,需要进行编码转换,将类别型数据转换为数值型数据。 **标签编码(Label Encoding)**:将分类数据中的每个类别映射到一个唯一的整数。但这种方法假设了类别之间存在顺序关系,这在大多数情况下是不成立的。 ```python from sklearn.preprocessing import LabelEncoder le = LabelEncoder() X['categorical_column'] = le.fit_transform(X['categorical_column']) ``` **独热编码(One-Hot Encoding)**:为每个类别创建一个新的二进制列,只有对应类别的列值为1,其余为0。这种方法避免了类别顺序的假设问题。 ```python from sklearn.preprocessing import OneHotEncoder encoder = OneHotEncoder(sparse=False) X_encoded = encoder.fit_transform(X[['categorical_column']]) # 注意:这可能需要将X转换为二维数组 ``` #### 3.3.1.5 缺失值处理 数据集中缺失值的存在是常见的问题,必须妥善处理以避免模型训练时的错误或偏差。处理缺失值的方法包括删除含有缺失值的记录、填充缺失值(如使用均值、中位数、众数或预测值填充)以及插值法(如线性插值、多项式插值)。 ```python # 删除含有缺失值的行 df_cleaned = df.dropna() # 填充缺失值 df['column_with_missing'].fillna(df['column_with_missing'].mean(), inplace=True) # 使用插值法(以线性插值为例) df['column_with_missing'].interpolate(method='linear', inplace=True) ``` ### 结语 数据预处理是机器学习项目中至关重要的一步,它决定了模型能够学习到何种程度的信息,并直接影响模型的最终性能。本章介绍了数据清洗、特征选择、特征缩放、编码转换以及缺失值处理等不同类型的预处理技术,每种技术都有其适用的场景和优缺点。在实际应用中,往往需要结合项目需求和数据特性,综合运用多种预处理技术,以达到最佳的数据处理效果。希望本章内容能为读者在Python机器学习项目中实施有效的数据预处理提供有力支持。
上一篇:
3.3 预处理与缩放
下一篇:
3.3.2 应用数据变换
该分类下的相关小册推荐:
Python数据分析与挖掘实战(上)
Python合辑14-面向对象编程案例(下)
Python合辑10-函数
Python与办公-玩转Excel
Python数据分析与挖掘实战(下)
剑指Python(磨刀不误砍柴工)
Python编程轻松进阶(四)
Python合辑6-字典专题
Python爬虫入门与实战开发(上)
Python与办公-玩转PDF
Python高性能编程与实战
Python合辑9-判断和循环