做网站的公司什么动力,一个网站页面设计多少钱,wordpress无法登录,大同工程造价信息网前言
基于国防科技大学 丁兆云老师的《数据挖掘》 数据挖掘 数据挖掘#xff08;一#xff09;数据类型与统计
2、数据预处理 2.1数据清理
缺失值处理#xff1a;
from sklearn.impute import SimpleImputer# 创建一个SimpleImputer对象#xff0c;指定缺失值的处理策略…前言
基于国防科技大学 丁兆云老师的《数据挖掘》 数据挖掘 数据挖掘一数据类型与统计
2、数据预处理 2.1数据清理
缺失值处理
from sklearn.impute import SimpleImputer# 创建一个SimpleImputer对象指定缺失值的处理策略如均值、中位数、众数等
imputer SimpleImputer(strategymean) # 可以替换为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是将来自不同来源的数据合并到一个一致的数据集中的过程。在数据集成中目标是将具有不同结构和格式的数据源整合成一个统一的视图以便更好地进行数据分析和建模。
在数据集成过程中可以采用以下方法
数据合并Data Concatenation将相同结构的数据源按行或列进行合并。例如使用Pandas库可以使用concat函数或merge函数来合并DataFrame对象。数据追加Data Appending将不同结构的数据源按行追加到一个数据集中。这通常用于添加新的记录。同样Pandas库提供了append函数来实现数据追加。数据连接Data Joining根据特定的键Key将不同数据源中的记录连接起来。这类似于数据库中的表连接操作。Pandas库中的merge函数提供了灵活的数据连接功能。数据匹配Data Matching通过相似性匹配的方法将数据源中的记录进行关联。这可以使用文本匹配、字符串匹配或其他相似性度量来实现。实体解析Entity Resolution通过识别和解决不同数据源中的相同实体例如人名、公司名等来进行数据集成。这可以使用姓名解析、实体链接等方法来实现。
容易出现的问题数据冗余
解决方案相关性分析和协方差分析
相关性分析离散型 连续型 协方差只能测量线性关系不能完全描述两个变量之间的非线性关系。此外协方差的数值大小受到变量单位的影响因此通常使用标准化的相关系数如皮尔逊相关系数来更准确地衡量变量之间的相关性。
2.3 数据规约
数据规约Data Reduction是数据挖掘和分析中的一个重要步骤旨在减少数据集的维度或数量同时保留关键信息以提高计算效率和模型性能。
2.3.1降维
在数据分析和机器学习任务中降维Dimensionality Reduction是一种常用的数据规约技术它通过减少特征的维度来处理高维数据。 主成分分析Principal Component AnalysisPCA是一种常用的降维方法和统计技术用于将高维数据集转换为低维表示同时保留数据中的主要信息。PCA的目标是通过线性变换将原始特征空间映射到新的特征空间使得新的特征具有最大的方差。
以下是PCA的基本步骤
标准化数据首先对原始数据进行标准化处理使得每个特征具有零均值和单位方差。这是为了确保不同特征的尺度不会对PCA的结果产生不合理的影响。计算协方差矩阵通过计算标准化后的数据的协方差矩阵来衡量不同特征之间的相关性。协方差矩阵的元素表示了不同特征之间的协方差。计算特征值和特征向量对协方差矩阵进行特征值分解得到特征值和对应的特征向量。特征值表示了新特征空间中的方差特征向量表示了原始特征空间到新特征空间的映射关系。选择主成分按照特征值的大小降序排列选择最大的k个特征值对应的特征向量作为主成分其中k是希望保留的维度。构建投影矩阵将选择的主成分作为列向量构建投影矩阵。通过将原始数据与投影矩阵相乘可以将数据映射到新的低维特征空间。
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_components2)# 对数据集进行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(fComponent {i1}: {ratio:.4f})print(Cumulative Contribution Rate:)
print(cumulative_variance_ratio)
# 输出降维后的数据
print(X_reduced)一般取累积贡献比达到85%到95%
2.3.2 降数据降采样
下面介绍两种常见的降采样方法
随机抽样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], sizenum_samples, replaceFalse)
X_reduced X[random_indices]# 输出降采样后的数据
print(X_reduced)分层抽样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_sizenum_samples, stratifyy, random_state42)# 输出降采样后的数据和标签
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, axis0)
X_max np.max(X, axis0)
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, axis0)
std np.std(X, axis0)
X_norm (X - mean) / std# 输出规范化后的数据
print(X_norm)2.4.2 离散化
等宽离散化Equal Width Discretization 等宽离散化将数据的值范围分成相等宽度的区间。具体步骤如下
确定要划分的区间个数例如n个区间。计算数据的最小值min_value和最大值max_value。计算每个区间的宽度widthwidth (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等。该方法需要根据数据的分布和特点进行参数调整和簇数的选择。