机器学习与数据挖掘——数据预处理

article/2025/11/10 5:06:00

如果有兴趣了解更多相关内容,欢迎来我的个人网站看看:瞳孔空间

一:关于数据预处理

在工程实践中,我们得到的数据会存在有缺失值、重复值等,在使用之前需要进行数据预处理。数据预处理没有标准的流程,通常针对不同的任务和数据集属性的不同而不同。数据预处理的常用流程为:去除唯一属性、处理缺失值、属性编码、数据标准化正则化、特征选择、主成分分析。

数据预处理的意义:

  • 真实世界中的数据存在脏数据:
    • 不完备(Incompleteness):缺少属性值,缺少某种感兴趣的属性,或者仅包含聚集数据
    • 误差:测量误差和收集误差,难以处理
    • 噪音(Noise):存在错误或者不属于取值范围。包含错误或者孤立点/离群点(outlier)
    • 不一致(Inconsistency):编号或者名称存在差异
  • 数据质量的多维度量
    • 一个广为认可的多维度量观点:
      • 精确性(Accuracy)
      • 完整性(Completeness)
      • 一致性(Consistency)
      • 时效性(Timelines)
      • 可信度(Believability)
      • 可解释性(Interpretability)
    • 跟数据本身的含义相关的
      • 内在的、上下文的、表象的以及可访问性
  • 实际领域有很多复杂的数据,数据来自许多不同的来源和不同形式

数据预处理的重要性:

  • 没有高质量的数据,就没有高质量的挖掘结果
    • 高质量的决策必须依赖高质量的数据
    • 数据仓库需要对高质量的数据进行一致地集成
    • 低质量的数据VS算法性能
  • 数据预处理将是构建数据仓库或者进行数据挖掘的工作中占工作量最大的一个步骤

数据预处理的主要任务:

  • 数据清理(Data Cleaning):填写空缺的值,平滑噪声数据,识别、删除孤立点,解决不一致性
  • 数据集成(Data Integration):集成多个数据库、数据立方体或文件
  • 数据变换(Data Transformation):规范化(Normalization)、聚集(Aggregation)、数据离散化(Data Discretization)
  • 数据归约(Data Reduction):得到数据集的压缩表示并得到相同或相近的结果

在这里插入图片描述

二:数据清理

数据清理的基本概念:数据清理一般指对数据通用性的处理,旨在提高数据质量,与分析任务关联不大。

数据清理任务:

  • 填充空缺值
  • 识别离群点和平滑噪声数据
  • 纠正不一致的数据
  • 解决数据集成造成的冗余
  • 数据脱敏

引起空缺值的原因

  • 数据并不总是完整的。数据库表中,很多条记录的对应字段没有相应值,比如销售表中的顾客收入。
  • 设备异常
  • 与其他已有数据不一致而被删除
  • 因为误解而没有被输入的数据
  • 在输入时,有些数据应为得不到重视而没有被输入
  • 对数据的改变没有进行日志记载

空缺值的填充方法:

  • 忽略元组:当类标号缺少时通常这么做(假定挖掘任务设计分类或描述),当每个属性缺少值的百分比变化很大时,它的效果非常差
  • 人工填写空缺值:工作量大,可行性低
  • 填充:
    • 用一个全局变量填充空缺值:比如使用unknown或者∞
    • 使用属性的平均值填充空缺值
    • 使用与给定元组属同一类的所有样本的平均值
    • 使用最可能的值填充空缺值:使用像Bayesian公式,knn或判定树这样的基于推断的方法

噪声数据与其他数据问题:

  • 噪声:一个测量变量中的随机错误或偏差
  • 引起不正确属性值的原因
    • 数据收集工具的问题
    • 数据输入错误
    • 数据传输错误技术限制
    • 命名规则的不一致
  • 其它需要数据清理的数据问题
    • 重复记录
    • 不完整的数据不一致的数据

噪声数据的处理方式:

  • 回归(Regression):通过让数据适应回归函数来平滑数据
  • 聚类(Clustering):监测并且去除孤立点
  • 计算机和人工检查结合:计算机检测可疑数据,然后对它们进行人工判断

噪声数据的处理方式——聚类:聚类将类似的值聚成簇,落在簇集合之外的值被视为离群点
在这里插入图片描述

三:数据集成

数据集成的基本概念

  • 定义:将多个数据源中的数据整合到一个一致的存储中
  • 模式集成:整合不同数据源中的元数据

数据集成的处理方法:

  • 实体识别(Entity ldentification/Term Recognition)问题:匹配来自不同数据源的现实世界的实体
  • 检测并解决数据值的冲突(Value Conflict)
    • 对现实世界中的同一实体,来自不同数据源的属性值可能是不同的
    • 可能的原因:不同的数据表示,不同的度量等

集成多个数据库时,常出现冗余(Redundancy)数据

  • 对象识别:同一属性或对象在不同的数据库中会有不同的字段名
  • 可导出数据:一个属性可以由另外一个表导出,如“年薪=工资*12”

数据集成时处理冗余数据:
在这里插入图片描述

四:数据变换

数据变换(Data Transformation)策略:

  • 光滑(Smoothing):分箱、回归、聚类等技术
  • 特征构造(Feature Construction):新特征生成
  • 聚集(Aggregation):对数据进行汇总或聚集
  • 概念分层(Concept Hierarchy Generation):如:country-province -city
  • 规范化(Normalization):将数据按比例缩放,使之落入一个小的特定区间
  • 离散化(Discretization):数值属性用区间标签或概念标签替换

4.1:规范化

数据变换——规范化/标准化:

  • 作用: 对属性值进行规范化常用于涉及神经网络或距离度量的分类算法和聚类算法中。比如使用神经网络向后传播算法进行分类挖掘时,对训练元组中度量每个属性的输入值进行规范化有助于加快学习阶段的速度。对于基于距离度量相异度的方法,数据规范化可以让所有的属性具有相同的权重。
  • 常用方法:
    • 简单的标准化
    • 最小-最大规范化
    • z-score规范化
    • 小数定标规范化
      在这里插入图片描述

4.2:离散化

数据变换——离散化:

  • 将连续属性变换成分类属性,即连续属性离散化
    • 一些DM算法要求数据是分类属性形式,如ID3算法、Apriori算法等
  • 离散化的过程
    • 涉及两个子任务:
      • 决定需要多少个分类量及确定如何将连续
      • 属性值映射到这些分类值
  • 常用的离散化方法
    • 无监督方法:分箱法、直方图、基于聚类/相关分析的方法
    • 监督方法:离散化的决策树方法、概念分层

五:数据归约

5.1:基本概念

数据归约是指在尽可能保持数据原貌的前提下,最大限度地精简数据量(完成该任务的必要前提是理解挖掘任务和熟悉数据本身内容)。

数据归约主要有两个途径:属性选择和数据采样,分别针对原始数据集中的属性和记录。

假定在公司的数据仓库选择了数据用于分析,这样数据集将非常大。在海量数据上进行复杂的数据分析扣挖掘将需要很长时间,使得这种分析不现实或不可行。数据归约技术可以用来得到数据集的归约表示,它小得多,但仍接近地保持原数据的完整性。这样,在归约后的数据集上挖掘将更有效,并产生相同(或几乎相同)的分析结果。

数据归约的策略:

  • 数据立方体聚集:聚集操作用于数据方中的数据。
  • 维归约:可以检测并删除不相关、弱相关或冗余的属性或维。
  • 数据压缩:使用编码机制压缩数据集。
  • 数值归约:用替代的、较小的数据表示替换或估计数据,如参数模型(只需要存放校型参数,而不是实际数据)或非参数方法,如聚类、选样和使用直方图。
  • 离散化和概念分层生产:属性的原始值用区间值或较高层的概念替换,概念分层允许挖掘多个抽象层上的数据,是数据挖掘的一种强有力的工具。

5.2:归约分类

5.2.1:特征归约

特征归约是从原有的特征中删除不重要或不相关的特征,或者通过对特征进行重组来减少特征的个数。其原则是在保留、甚至提高原有判别能力的同时减少特征向量的维度。特征归约算法的输入是一组特征,输出是它的一个子集。在领域知识缺乏的情况下进行特征归约时一般包括3个步骤:

  • 搜索过程:在特征空间中搜索特征子集,每个子集称为一个状态由选中的特征构成。
  • 评估过程:输入一个状态,通过评估函数或预先设定的阈值输出一个评估值搜索算法的目的是使评估值达到最优。
  • 分类过程:使用最终的特征集完成最后的算法。

特征归约处理的效果:

  • 更少的数据,提高挖掘效率
  • 更高的数据挖掘处理精度
  • 简单的数据挖掘处理结果
  • 更少的特征

5.2.2:样本归约

样本都是已知的,通常数目很大,质量或高或低,或者有或者没有关于实际问题的先验知识。

样本归约就是从数据集中选出一个有代表性的样本的子集。子集大小的确定要考虑计算成本、存储要求、估计量的精度以及其它一些与算法和数据特性有关的因素。

初始数据集中最大和最关键的维度数就是样本的数目,也就是数据表中的记录数。数据挖掘处理的初始数据集描述了一个极大的总体,对数据的分析只基于样本的一个子集。获得数据的子集后,用它来提供整个数据集的一些信息,这个子集通常叫做估计量,它的质量依赖于所选子集中的元素。取样过程总会造成取样误差,取样误差对所有的方法和策略来讲都是固有的、不可避免的,当子集的规模变大时,取样误差一般会降低。一个完整的数据集在理论上是不存在取样误差的。与针对整个数据集的数据挖掘比较起来,样本归约具有以下一个或多个优点:减少成本、速度更快、范围更广,有时甚至能获得更高的精度。

5.2.3:特征值归约

特征值归约是特征值离散化技术,它将连续型特征的值离散化,使之成为少量的区间,每个区间映射到一个离散符号。这种技术的好处在于简化了数据描述,并易于理解数据和最终的挖掘结果。

特征值归约可以是有参的,也可以是无参的。有参方法使用一个模型来评估数据,只需存放参数,而不需要存放实际数据;

  • 有参的特征值归约有以下两种:
    • 回归:线性回归和多元回归
    • 对数线性模型:近似离散多维概率分布
  • 无参的特征值归约有3种:
    • 直方图:采用分箱近似数据分布,其中V-最优和MaxDiff直方图是最精确和最实用的
    • 聚类:将数据元组视为对象,将对象划分为群或聚类,使得在一个聚类中的对象“类似”而与其他聚类中的对象“不类似”在数据归约时用数据的聚类代替实际数据
    • 选样:用数据的较小随机样本表示大的数据集,如简单选择n个样本(类似样本归约)、聚类选样和分层选样等

http://chatgpt.dhexx.cn/article/SSSobX8C.shtml

相关文章

数据分析——数据预处理

内容来源:课程《智能信息处理技术》、周志华《机器学习》 数据预处理 点击 数据预处理各步骤梳理 查看全图 什么是数据预处理 现实世界中数据大体上都是不完整,不一致的脏数据,无法直接进行数据挖掘,或挖掘结果差强人意。为了…

数据挖掘—数据预处理

文章目录 数据预处理1 数据清洗缺失值处理异常值处理 2 数据集成实体识别冗余属性识别数据变换简单函数变换规范化连续属性离散化 属性构造 3 数据规约属性归约数值归约 Python主要数据预处理函数 数据预处理 数据预处理的过程 数据预处理的目的: 1)提…

python数据预处理

Ⅰ.数据源 Ⅱ.导入库 import pandas as pd import numpy as np from scipy import stats import matplotlib.pyplot as plt import seaborn as sns from sklearn.preprocessing import MinMaxScaler, StandardScaler# 避免画图时无法显示中文(中文部分以正方格显示…

python数据预处理_Python数据预处理

1.缺失值处理 1.1缺失值查看 在Python中直接调用info()方法就会返回每一列的缺失情况。 Python中缺失值一般用NaN表示,从用info()方法的结果来看,地区、销量跟销售额这三列是12个非null值,其他的都是13个非null值,说明这三列分别有…

机器学习——数据的预处理(总结大全)

目录 数据清洗 1、重复观测处理 ​2、缺失值处理 删除法 替换法 插补法 3、异常值处理 删减特征 1. 去除唯一属性 数据查看 特征缩放 一、为什么要特征数据缩放? 二、特征缩放常用的方法 1、归一化(Normalization) 2、标准化(Standardization) 相同点及…

js中鼠标事件mouseover、mouseenter和mouseleave、mouseout的区别

mouseover:当鼠标移入元素或其子元素都会触发事件,所以有一个重复触发,冒泡过程。对应的移除事件是mouseout mouseenter:当鼠标移除元素本身(不包含元素的子元素)会触发事件,也就是不会冒泡,对应…

mouseover和mouseenter的异同

引言 在自己动手练习一些项目实例的时候,发现mouseover和mouseenter这俩事件功能有点相似,但应用场景却不同。 所以想整篇博客梳理梳理 mouseover和mouseenter的不同点: 不同点有两方面: 事件的触发时机是否支持冒泡 一、事件…

JS——mouseover和mouseenter的区别

区别举例补充 区别 mouseover:鼠标移入事件所绑定的元素或其子元素时,都会触发该事件。(具有冒泡特性) mouseenter:只有鼠标移入事件所绑定的元素时,才会触发该事件。(不具有冒泡特性) 举例 mouseover&a…

mouseenter和mouseover的区别

mouseover:当鼠标移入目标元素或者移入目标元素的子元素,都会触发该事件。所以有一个重复触发,冒泡的过程。对应的一出事件mouseout。 mouseenter:当鼠标移入目标元素时(不包括子元素),会触发该…

jQuery学习:mouseenter与mouseover区别

mouseenter:只有移入当前元素才会触发&#xff0c;对应mouseleave hover使用的是mouseenter与mouseleave mouseover&#xff1a;在移入子元素时也会触发&#xff0c;对应mouseout <div id"div1">div1<div id"div2">div2</div></div&…

mouseentermouseleave

mouseenter&mouseleave 简介 mouseenter当指针设备&#xff08;通常是鼠标&#xff09;移动到连接了侦听器的元素上时&#xff0c;会触发该事件。 mouseover 当指针设备&#xff08;通常是鼠标&#xff09;移动到附加了侦听器的元素或其子项之一上时&#xff0c;会触发该事…

mouseenter

这几天做下拉菜单&#xff0c;一直想实现鼠标停留在以及菜单即可显示二级菜单并可以浏览二级菜单的功能&#xff0c;最初走了很多弯路。 dropdown 写在是用Bootstrap.js …

mouseenter与mouseover的区别

这是两个事件类型&#xff0c;都是表示鼠标经过触发事件。 还有对应的mouseleave和mouseout&#xff0c;表示鼠标移开触发事件 区别是&#xff1a;mouseenter、mouseleave 不触发冒泡事件 mouseover、mouseout 会触发冒泡事件 首先事件触发后会产生两个阶段&#xff0c;一个是…

简单了解mouseover与mouseenter的使用场景

我们知道鼠标经过和离开的事件有俩种&#xff1a; mouseenter与mouseover&#xff0c;那么这里俩个事件有什么区别呢&#xff1f; mouseenter&#xff1a;给谁注册的事件&#xff0c;就必须经过谁&#xff0c;才能触发该事件 简单来说mouseenter不能冒泡&#xff0c;也就是说经…

mouseenter鼠标事件

mouseenter鼠标事件 1.当鼠标移动到元素上时就会触发mouseenter事件 2.类似mouseover&#xff0c;它们两者之间的差别是 mouseover鼠标经过自身盒子会触发&#xff0c;经过子盒子还会触发。mouseenter只会经过自身盒子触发 这样的原因就是 mouseenter不会冒泡。 <!DOCTYP…

mouseenter和mouseleave与mouseover和mouseout的区别

一、mouseenter&#xff08;指针穿过&#xff0c;子集不执行&#xff09; 当鼠标指针穿过&#xff08;进入&#xff09;被选元素时&#xff0c;会发生 mouseenter 事件。 mouseenter() 方法触发 mouseenter 事件&#xff0c;或添加当发生 mouseenter 事件时运行的函数。 注意…

mouseenter、mouseleave、mouseover和mouseout的区别

mouseenter(进入)、mouseleave、mouseover(覆盖)和mouseout是常用来判断鼠标移出和移入的事件句柄&#xff0c;虽然功能上差不多&#xff0c;但是细节却有不同的地方。 <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>随…

mouseover事件和mouseenter事件以及mouseleave事件和mouseout事件的区别

1.mouseover事件与mouseenter事件 mouseover事件&#xff1a;不论鼠标指针穿过被选元素或其子元素&#xff0c;都会触发 mouseover 事件。 mouseenter事件&#xff1a;只有在鼠标指针穿过被选元素时&#xff0c;才会触发 mouseenter 事件。 2.mouseout事件与mouseleave事件 …

Git - 教程(廖雪峰)

史上最浅显易懂的Git教程&#xff01; 为什么要编写这个教程&#xff1f;因为我在学习Git的过程中&#xff0c;买过书&#xff0c;也在网上Google了一堆Git相关的文章和教程&#xff0c;但令人失望的是&#xff0c;这些教程不是难得令人发指&#xff0c;就是简单得一笔带过&am…

廖雪峰git学习(3)分支管理【待续】

创建与合并分支 创建分支 git checkout -b dev #创建并切换到分支dev相当于以下两条 git branch dev #创建分支dev git checkout dev #切换到分支dev git branch #可查看当分支 合并分支 git merge dev #将dev分支与master分支合并 删除分支 git branch -d dev#删除dev分支