数据挖掘(二)数据预处理

前言

基于国防科技大学 丁兆云老师的《数据挖掘》
数据挖掘
数据挖掘(一)数据类型与统计

2、数据预处理

在这里插入图片描述

2.1数据清理

缺失值处理:

from sklearn.impute import SimpleImputer# 创建一个SimpleImputer对象,指定缺失值的处理策略(如均值、中位数、众数等)
imputer = SimpleImputer(strategy='mean')  # 可以替换为'median'、'most_frequent'或'constant'# 假设X是包含缺失值的特征矩阵
X = [[1, 2], [np.nan, 3], [7, 6]]# 使用fit_transform方法对特征矩阵进行缺失值处理
X_imputed = imputer.fit_transform(X)# 输出处理后的特征矩阵
print(X_imputed)

离群值处理:

一般使用基于统计方法的离群值处理:(配合箱线图)

  • 标准差方法(Standard Deviation Method):通过计算数据的均值和标准差,将超过一定标准差阈值的值识别为离群值,并进行处理。
  • 百分位数方法(Percentile Method):基于数据的百分位数,将超过一定百分位数阈值的值识别为离群值,并进行处理。

其它方法还有基于聚类方法的离群值处理,基于监督学习方法的离群值处理等等

2.2 数据集成:

数据集成(Data Integration)是将来自不同来源的数据合并到一个一致的数据集中的过程。在数据集成中,目标是将具有不同结构和格式的数据源整合成一个统一的视图,以便更好地进行数据分析和建模。

在数据集成过程中,可以采用以下方法:

  1. 数据合并(Data Concatenation):将相同结构的数据源按行或列进行合并。例如,使用Pandas库可以使用concat函数或merge函数来合并DataFrame对象。
  2. 数据追加(Data Appending):将不同结构的数据源按行追加到一个数据集中。这通常用于添加新的记录。同样,Pandas库提供了append函数来实现数据追加。
  3. 数据连接(Data Joining):根据特定的键(Key)将不同数据源中的记录连接起来。这类似于数据库中的表连接操作。Pandas库中的merge函数提供了灵活的数据连接功能。
  4. 数据匹配(Data Matching):通过相似性匹配的方法将数据源中的记录进行关联。这可以使用文本匹配、字符串匹配或其他相似性度量来实现。
  5. 实体解析(Entity Resolution):通过识别和解决不同数据源中的相同实体(例如人名、公司名等)来进行数据集成。这可以使用姓名解析、实体链接等方法来实现。

容易出现的问题:数据冗余

解决方案:相关性分析和协方差分析

相关性分析(离散型):

在这里插入图片描述

连续型:

在这里插入图片描述

在这里插入图片描述

协方差只能测量线性关系,不能完全描述两个变量之间的非线性关系。此外,协方差的数值大小受到变量单位的影响,因此通常使用标准化的相关系数(如皮尔逊相关系数)来更准确地衡量变量之间的相关性。

2.3 数据规约:

数据规约(Data Reduction)是数据挖掘和分析中的一个重要步骤,旨在减少数据集的维度或数量,同时保留关键信息,以提高计算效率和模型性能。

2.3.1降维:

在数据分析和机器学习任务中,降维(Dimensionality Reduction)是一种常用的数据规约技术,它通过减少特征的维度来处理高维数据。

在这里插入图片描述

主成分分析(Principal Component Analysis,PCA)是一种常用的降维方法和统计技术,用于将高维数据集转换为低维表示,同时保留数据中的主要信息。PCA的目标是通过线性变换将原始特征空间映射到新的特征空间,使得新的特征具有最大的方差。

以下是PCA的基本步骤:

  1. 标准化数据:首先,对原始数据进行标准化处理,使得每个特征具有零均值和单位方差。这是为了确保不同特征的尺度不会对PCA的结果产生不合理的影响。
  2. 计算协方差矩阵:通过计算标准化后的数据的协方差矩阵,来衡量不同特征之间的相关性。协方差矩阵的元素表示了不同特征之间的协方差。
  3. 计算特征值和特征向量:对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。特征值表示了新特征空间中的方差,特征向量表示了原始特征空间到新特征空间的映射关系。
  4. 选择主成分:按照特征值的大小降序排列,选择最大的k个特征值对应的特征向量作为主成分,其中k是希望保留的维度。
  5. 构建投影矩阵:将选择的主成分作为列向量,构建投影矩阵。通过将原始数据与投影矩阵相乘,可以将数据映射到新的低维特征空间。
from sklearn.decomposition import PCA
import numpy as np# 创建一个示例数据集
X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])# 创建PCA对象,并指定降维后的维度为2
pca = PCA(n_components=2)# 对数据集进行PCA降维
X_reduced = pca.fit_transform(X)
# 获取每个主成分的贡献率
variance_ratio = pca.explained_variance_ratio_# 计算累积贡献率
cumulative_variance_ratio = np.cumsum(variance_ratio)# 输出每个主成分的贡献率和累积贡献率
for i, ratio in enumerate(variance_ratio):print(f"Component {i+1}: {ratio:.4f}")print("Cumulative Contribution Rate:")
print(cumulative_variance_ratio)
# 输出降维后的数据
print(X_reduced)

一般取累积贡献比达到85%到95%

2.3.2 降数据(降采样):

下面介绍两种常见的降采样方法:

  1. 随机抽样(Random Sampling):从原始数据集中随机选择一部分样本作为降采样后的数据集。这种方法简单快速,但可能会导致抽样后的数据集不够代表性。
import numpy as np# 创建一个示例数据集
X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])# 随机抽样,降采样至2个样本
num_samples = 2
random_indices = np.random.choice(X.shape[0], size=num_samples, replace=False)
X_reduced = X[random_indices]# 输出降采样后的数据
print(X_reduced)
  1. 分层抽样(Stratified Sampling):保持原始数据集中不同类别样本的比例,从每个类别中抽取一定数量的样本作为降采样后的数据集。这种方法可以保持类别分布的均衡性。
from sklearn.model_selection import train_test_split# 创建一个示例数据集和标签
X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
y = np.array([0, 1, 0, 1])# 分层抽样,保持类别比例,降采样至2个样本
num_samples = 2
X_reduced, _, y_reduced, _ = train_test_split(X, y, train_size=num_samples, stratify=y, random_state=42)# 输出降采样后的数据和标签
print(X_reduced)
print(y_reduced)

2.3.3 数据压缩

2.4 数据转换与离散化:

2.4.1 规范化在这里插入图片描述

最小-最大规范化(Min-Max Normalization):
最小-最大规范化将数据线性地映射到一个指定的范围(通常是[0, 1]或[-1, 1])。公式如下:

X_norm = (X - X_min) / (X_max - X_min)

其中,X为原始数据,X_min和X_max分别为原始数据的最小值和最大值。

import numpy as np# 创建一个示例数据集
X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 最小-最大规范化
X_min = np.min(X, axis=0)
X_max = np.max(X, axis=0)
X_norm = (X - X_min) / (X_max - X_min)# 输出规范化后的数据
print(X_norm)

Z-Score规范化(Standardization):
Z-Score规范化将数据转换为均值为0、标准差为1的分布。公式如下:

X_norm = (X - mean) / std

其中,X为原始数据,mean为原始数据的均值,std为原始数据的标准差。

import numpy as np# 创建一个示例数据集
X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# Z-Score规范化
mean = np.mean(X, axis=0)
std = np.std(X, axis=0)
X_norm = (X - mean) / std# 输出规范化后的数据
print(X_norm)

2.4.2 离散化
在这里插入图片描述

等宽离散化(Equal Width Discretization):
等宽离散化将数据的值范围分成相等宽度的区间。具体步骤如下:

  • 确定要划分的区间个数(例如,n个区间)。
  • 计算数据的最小值(min_value)和最大值(max_value)。
  • 计算每个区间的宽度(width):width = (max_value - min_value) / n。
  • 将数据根据区间宽度映射到相应的区间。
import numpy as np# 创建一个示例数据集
X = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])# 等宽离散化
n_bins = 3
width = (np.max(X) - np.min(X)) / n_bins
bins = np.arange(np.min(X), np.max(X) + width, width)
X_discretized = np.digitize(X, bins)# 输出离散化后的数据
print(X_discretized)

等频离散化(Equal Frequency Discretization):
等频离散化将数据划分为相同数量的区间,每个区间包含相同数量的数据。具体步骤如下:

  • 确定要划分的区间个数(例如,n个区间)。
  • 计算每个区间的数据数量(每个区间应包含总数据数量除以区间个数的数据)。
  • 将数据按照值的大小排序。
  • 按照区间的数据数量依次划分数据。
import numpy as np# 创建一个示例数据集
X = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])# 等频离散化
n_bins = 3
bin_size = len(X) // n_bins
sorted_X = np.sort(X)
bins = [sorted_X[i * bin_size] for i in range(1, n_bins)]
X_discretized = np.digitize(X, bins)# 输出离散化后的数据
print(X_discretized)

聚类离散化(Cluster Discretization):
聚类离散化使用聚类算法将数据划分为不同的簇,每个簇作为一个离散化的值。常用的聚类算法包括K-Means、DBSCAN等。该方法需要根据数据的分布和特点进行参数调整和簇数的选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/324124.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络编程——Socket——模拟用户登录

功能一:模拟用户登录 功能二:实现客户发送登录用户信息,服务器端显示登录信息并响应给客户端登录成功 这里设置的用户登录信息为:admin,123456 实现: 1.首先,服务端创建并启动服务器&#x…

Android 14 变更及适配攻略

准备工作 首先将我们项目中的 targetSdkVersion和compileSdkVersion 升至 34。 影响Android 14上所有应用 1.最低可安装的目标 API 级别 从 Android 14 开始,targetSdkVersion 低于 23 的应用无法安装。要求应用满足这些最低目标 API 级别要求有助于提高用户的安…

单调栈:(C++)

在题目的要求中,存在先进后出(即在前面的数据需要遍历到后面的某一数据时才能确定计算值)单调栈在一部分解题场景中避免了暴力解法的高时间复杂度问题,但是在做题过程中视情况而定,有些题目的最优解不一定使用单调栈&a…

AI图书推荐:ChatGPT全面指南—用AI帮你更健康、更富有、更智慧

你是否在努力改善你的健康? 你是否长期遭受财务困难? 你想丰富你的思想、身体和灵魂吗? 如果是这样,那么这本书就是为你准备的。 《ChatGPT全面指南—用AI帮你更健康、更富有、更智慧》(CHATGPT Chronicles AQuick…

Java入门基础学习笔记4——开发Helloworld入门程序

Java程序开发的三个步骤: 1)编写代码 2)编译代码 3)运行代码 注意事项: 第一个java程序建议使用记事本来编写。 建议代码文件名全英文、首字母大写、满足驼峰模式,源代码文件的后缀必须是.java 注意&a…

netty配置SSL、netty配置https(开发)

netty配置SSL、netty配置https(开发) 我们在开发下使用ssl,所用的证书将不被客户端信任。 转自:https://lingkang.top/archives/netty-pei-zhi-ssl 方案一 快速。使用netty提供的临时签发证书 private static SslContext sslC…

小程序(三)

十三、自定义组件 (二)数据方法声明位置 在js文件中 A、数据声明位置:data中 B、方法声明位置methods中,这点和普通页面不同! Component({/*** 组件的属性列表*/properties: {},/*** 组件的初始数据*/data: {isCh…

TCP 连接,一端断电和进程崩溃有什么区别?

TCP 连接,一端断电和进程崩溃有什么区别? 前言主机崩溃进程崩溃有数据传输的场景客户端主机宕机,又迅速重启客户端主机宕机,一直没有重启 总结 前言 有的小伙伴在面试腾讯的时候,遇到了这么个问题: 这个属…

cocos中的meta文件有什么用?如何生成?

cocos中的.meta文件有什么用?如何生成? 1. .meta文件有什么用? Cocos Creator 会为 assets 目录下的每一个文件和目录生成一个同名的 meta 文件 示例 {"ver": "4.0.23", // 版本"importer": "typescr…

基于ESP32和ESP8266的物联网开发过程(二)

在做这个项目前,也做了一些调研。项目的初衷是想要用于智能家居。我比较了小米IoT、阿里云、ESPHOME、巴沙云、点灯科技和ONENET等几个平台。最终选择了Onenet,部分原因是之前用过它的多协议版本,但现在这个版本已经下线了。 小米IoT的公测名…

Linux - make与makefile

文章目录 什么是make和makefile如何使用依赖关系 和 依赖方法伪目标 写个程序-进度条换行和回车的区别 什么是make和makefile make是一个命令 makefile是一个文件 这就是make和makefile的本质 make和 ll , pwd ,su 一样都是命令 makefile和 test , test.c 一样都是…

GPT+Python近红外光谱数据分析

原文链接:GPTPython近红外光谱数据分析https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247603913&idx1&sn6eb8fd6f1abcdd8160815997a13eb03d&chksmfa82172ecdf59e389a860547a238bb86c7f38ae3baa14e97c7490a52ef2a2c206f88d503a5eb&token…

【WPF学习笔记(一)】WPF应用程序的组成及Window类介绍

WPF应用程序的组成及Window类介绍 WPF应用程序的组成及Window类介绍前言正文1、WPF介绍1.1 什么是WPF1.2 WPF的特点1.3 WPF的控件分类 2、XAML介绍2.1 XAML的定义2.2 XAML的特点2.3 XAML的命名空间 3、WPF应用程序组成3.1 App.config3.2 App.xaml3.3 App.xaml.cs3.4 MainWindow…

分布式存储CephFS最佳实践

文章来源于知乎文章: 分布式存储CephFS最佳实践 背景 近日,一朋友说他们企业内部想落地CephFS,让我帮忙写一份能落地的CephFS最佳实践。然后就顺便把文章整理到了这里。因能力水平以及认知有限,如有错漏烦请指正。 简介 CephF…

IP 地理定位神话与事实

ip地理定位是一项技术,用于通过访问设备的ip地址来获取地理位置信息,例如国家、城市、经纬度等。该技术广泛应用于网站内容自定义、广告定位、网络安全和用户分析等领域。它通过与包含ip地址和地理位置映射的大型数据库进行查询来工作,但在准…

聊聊测试团队管理

管理测试团队是一个复杂但至关重要的任务,它不仅关乎于保证软件产品的质量,还涉及到团队建设、流程优化、技能提升等多个方面。以下是一些关键策略,可以帮助您有效地管理测试团队,比如“持续培训和技术支持,明确目标&a…

99、技巧-下一个排列

这个问题要求生成一个数组的下一个排列。所谓“下一个排列”指的是,在所有数字相同但顺序不同的排列中,找出数字序列中刚好比当前序列大的下一个序列。如果当前序列已经是这些排列中的最大值,则下一个排列应该是最小的排列。 思路解释 要解…

QML 本地存储(Setting,sqlite)

Qt hello - 专注于Qt的技术分享平台 QML 原生的储存方有两种: 1,Settings 跟QWidget 中的QSettings 一样,可以简单的存储一些配置。 2,Sqlite sqlite数据库。可以存储一些复杂的数据。 一,Settings 我们以一个按钮的位…

【机器学习300问】81、什么是动量梯度下降算法?

动量梯度下降算法(Momentum)是利用指数加权移动平均的思想来实现梯度下降的算法。让我们先来回顾一下基础的梯度下降方法以及看看它有哪些不足之处。接着引出动量梯度下降算法,在理解了它的原理后看看它是如何规避之前方法的不足的。 如果不知…

Spring如何控制Bean的加载顺序

前言 正常情况下,Spring 容器加载 Bean 的顺序是不确定的,那么我们如果需要按顺序加载 Bean 时应如何操作?本文将详细讲述我们如何才能控制 Bean 的加载顺序。 场景 我创建了 4 个 Class 文件,分别命名为 FirstInitialization Se…