4.1 数据清洗
数据清洗主要是删除原始数据集中的无关数据、重复数据、平滑噪声数据,筛选掉与挖掘主题无关的数据,处理缺失值、异常值等
4.1.1 缺失值处理
方法有三类:删除记录、数据插补和不处理
- 拉格朗日插值法:拟合一个过n个点的n-1次多项式
- 牛顿插值法:求n个点的所有阶差商公式
在Python的Scipy库中只提供了拉格朗日插值法的函数。要使用牛顿插值法要自行编写
#拉格朗日插值代码
import pandas as pd
from scipy.interpolte import lagrange
#自定义列向量插值函数
def ployinterp_column(s,n,k=5):
y = s[list(range(n-k,n))+list(range(n+1,n+1+k))]
y = y[y.notnull()]
return lagrange(y.index,list(y))(n)
data = pd.read_excel(inputfile)
#逐个判断是否需要插值
for i in data.columns:
for j in range(len(data)):
if (data[i].isnull())[j]:
data[i][j] = polyinterp_column(data[i],j)
import numpy as np
#自己写的拉格朗日插值函数
def lag_insert(x,y,xi):
l = np.zeros(shape=len(x),)
for i in range(len(x)):
l[i] = 1
for j in range(len(x)):
if i!=j:
l[i] = l[i]*(xi-x[j])/(x[i]-x[j])
else:
pass
L = 0
for i in range(len(x)):
L += y[i]*l[i]
return L
4.1.2 异常值处理
4.2 数据集成
数据集成是将多个数据源合并存放在一个一致的数据存储(如数据仓库)中的过程。
要考虑实体识别问题和属性冗余问题
4.3 数据变换
主要是对数据进行规范化处理
4.3.1 简单函数变换
常用的变换包括平方、开方、取对数、差分运算等。简单的函数变换常用来将不具有正态分布的数据变换成具有正态分布的数据。
4.3.2 规范化
- 最小-最大规范化
- 零-均值规范化
- 小数定标规范化
4.3.3 连续属性离散化
某些分类算法(如ID3算法、Aprior算法)要求数据是分类属性形式。这样,常常需要将连续属性变换成分类属性,即连续属性离散化。
常用的离散化方法有等宽法、等频法和(一维)聚类
4.3.4 属性构造
为了提取更有用的信息,挖掘更深层次的模式,提高挖掘结果的精度。我们需要利用已有的属性集构造出新的属性,并加入到现有的属性集合中。
4.3.5 小波变换
小波变换可以把非平稳信号分解为表达不同层次、不同频带信息的数据序列,即小波系数。选取适当的小波系数,即完成了信号的特征提取
#利用小波分析进行特征分析
from scipy.io import loadmat
inputfile = '../data/leleccum.mat' #提取自matlab的信号文件
mat = loadmat(inputfile)
signal = mat['leleccum'][0]
import pywt#PyWavelets信号处理库
coeffs = pywt.wavedec(signal,'bior3.7',level=5)
4.4 数据规约
4.4.1 属性规约
主成分分析步骤:
- 数据矩阵按列进行中心标准化
- 求相关系数矩阵R
- 求R的特征方程的特征根
- 确定主成分的个数,一般取80%
- 计算相应的单位特征向量
#主成分分析
import pandas as pd
data = pd.read_excel(inputfile)
from sklearn.decomposition import PCA
pca = PCA(n_components = None)#n_components取None或默认时,保留所有成分
pca.fit(data)
print(pca.components_)#返回模型的各个特征向量
print(pca.explained_variance_ratio)#返回各个成分各自的方差百分比
4.4.2 数值规约
是指通过选择替代的、较小的数据来减少数据量。