1.数据归约的概念
1.1 数据归约
数据规约方法类似数据集的压缩,它通过维度的减少或者数据量的减少,来达到降低数据规模的目的。
- 数据归约策略概述
- 维度归约
- 数量归约
2 数据归约策略
对于小型或中型数据集,一般的数据预处理步骤已经足够。但对真正大型数据集来讲,在应用数据挖掘技术以前,更可能采取一个中间的、额外的步骤-数据归约。
- 计算时间:较简单的数据,即经过数据归约后的结果,可减少数据挖掘消耗的时间。
- 预测/描述精度:估量了数据归纳和概括为模型的好坏。
- 数据挖掘模型的描述:简单的描述通常来自数据归约,这样模型能得到更好理解。
- 数据归约的策略:维归约、数量归约
1、维归约减少所考虑的随机变量或属性的个数。代表方法为小波变换、主成分分析、属性集选择。
2、数量规约用替代的、较小的数据表示形式替换原数据。代表方法为线性回归等。
3 维度归约
3.1 维归约-小波变换的应用
- 字符串压缩在整合数据源的过程中,很可能会出现这些情况:
1、有丰富的理论和调优的算法
2、典型的有损压缩
3、但是只有有限的操作是可行的 - 音频/视频的压缩
1、通常是有损压缩,逐步细化
2、有时候小片段的信号可重构,而不需要重建整个信号
小波变换的应用如下图所示:
3.2 主成分分析
主成分分析(Principal Component Analysis,PCA), 是一种统计方法。通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。
3.3 主成分分析案例——生成随机数据并可视化**
3.4 主成分分析案例——不降维**
观察投影后的三个维度的方差分布。
3.5 主成分分析案例——降维**
3.6 属性选择
属性选择也称为特征选择,特征选择时通过删除不相关或冗余的属性来减少维度与数据量。其目的是:定位最小属性集,使得数据的概率分布尽可能接近使用所有属性得到的原分布,简单说,就是从全部属性中选取一个特征属性子集,使构造出来的模型更好。
- 特征集选择的步骤一般是:建立子集集合、构造评价函数、构建停止准则、验证有效性。
- 选择特征集的方式一般有:序列向前、序列向后、序列前后组合、决策树方式
4 数量归约
4.1 参数化归约
参数化数据归约可以用回归模型与对数线性模型来实现。
4.2 非参数归约
非参数化数据归约包括直方图、抽样、数据立方体聚集等方法。
-直方图方法就是分箱。
-抽样。通过选取随机样本(子集),实现用小数据代表大数据的过程。
-数据立方体聚集。数据立方体聚集帮助我们从低粒度的数据分析聚合成汇总粒度的数据分析
5. 完整代码
5.1 代码结构
5.2 代码
# *-* coding:utf-8
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn.datasets import make_blobs
from sklearn.decomposition import PCA
np.seterr(invalid='ignore')
# X为样本特征,Y为样本簇类别, 共1000个样本,每个样本3个特征,共4个簇
X, y = make_blobs(n_samples=10000, n_features=3,
centers=[[3, 3, 3], [0, 0, 0], [1, 1, 1], [2, 2, 2]],
cluster_std=[0.2, 0.1, 0.2, 0.2],
random_state=9)
# 1. 生成随机数并可视化
def generate_blobs():
fig = plt.figure()
plt.subplot(111)
Axes3D(fig, rect=[0, 0, 1, 1], elev=30, azim=20)
plt.scatter(X[:, 0], X[:, 1], X[:, 2], marker='o')
plt.show()
# 2. 不降维,制作投影,看数据的方差分布
def pca_none():
pca = PCA(n_components=3)
pca.fit(X)
print(pca.explained_variance_ratio_)
print(pca.explained_variance_)
# 3. 降维度
def pca():
pca = PCA(n_components=2)
pca.fit(X)
print(pca.explained_variance_ratio_)
print(pca.explained_variance_)
# 降维后展示
X_new = pca.transform(X)
plt.scatter(X_new[:, 0], X_new[:, 1], marker='o')
plt.show()
def main():
generate_blobs()
#pca()
def main():
generate_blobs()
#pca()
if __name__ == '__main__':
main()