一、数据前期探索
-
数据质量分析:
是数据预处理的前提
主要任务:检查原始数据中是否存在脏数据
脏数据:不符合要求,以及不能直接进行相应分析的数据。包括:缺失值,异常值,不一致的值,重复数据,含有特殊符号的数据。
1、缺失值处理方式:删除存在缺失值的记录; 对可能值进行插补; 不处理。
2、异常值(离群点)处理方式:
简单统计量分析(判断变量取值是否超出范围);
原则:如果数据服从正态分布,在 原则下,异常值被定义为一组测定值中与平均值的偏差超过3倍标准差的值。
如果数据不服从正态分布,可以用远离平均值的多少倍标准差来描述。
箱型图分析:以四分位数和四分为距为基础判断异常值
3、一致性分析
不一致数据的产生主要发生在数据集成的过程中,由于数据来自于不同的数据源等导致。
-
数据特征分析:
1、分布分析:
定量数据:绘制频率分布直方图
定性数据:根据变量的分类来分组,绘制饼图和条形图
2、对比分析:绝对数比较、相对数比较
3、统计量分析:分析集中趋势、离中趋势
集中趋势度量:均值、中位数、众数
离中趋势度量:极差、标准差、变异系数、四分位数间距
4、周期性分析
5、贡献度分析
6、相关性分析:绘制散点图、计算相关系数
二、数据预处理
1、数据清洗
删除原始数据集中的无关数据、重复数据、平滑噪声数据、筛选掉与挖掘主题无关的数据、处理缺失值、异常值等。
缺失值:
三种处理方法:删除记录、数据插补、不处理
插补方法:拉格朗日插值法(Scipy库中提供了函数 ):对于平面上已知的 n 个点,可以找到一个 n-1 次多项式,使此多项式曲线通过这 n 个点(无两点在一条直线上)。将缺失的函数值对应的点 x 带入多项式求得近似值。
data[u'a']=None #置为空值
data=data[data.notnull()] #剔除空值
if(data[i].isnull())[j] #判断是否为空值
API REFERENCE: https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.lagrange.html#scipy.interpolate.lagrange
异常值:(箱型图,data.boxplot( ))
处理方法:删除记录、平均值修正、不处理
2、数据集成
将多个数据源合并存放在一个一致的数据存储(如数据仓库)中的过程。
冗余属性识别:部分可以通过相关分析检测
单位不统一、同名异义、异名同义这几中情况的集成。
3、数据变换
对数据进行规范化处理、以转换成适用于挖掘任务及算法的形式。
简单函数变换:
包括平方、开方、取对数、差分运算等。常用来将不具有正态分布的数据变换成具有正态分布的数据。
在时间序列分析中,差分运算有时可以将非平稳序列转换成平稳序列。
规范化(归一化):对于基于距离的挖掘算法尤为重要
为消除指标之间的量纲和取值范围差异的影响,将数据按照比例缩放,使之落入一个特定的区域,便于综合分析。
1)、最小-最大规范化:即离差标准化,对原始数据的线性变换,将数值映射到 [0,1] 之间。
2)、 零-均值规范化:即标准差标准化,经过处理的数据的均值为0,标准差为1,最为常用。
3)、小数定标规范化:通过移动属性值的小数位数,将属性值映射到 [-1,1] 之间,移动的小数位数取决于属性值绝对值的最大值。
连续属性离散化:常应用于分类算法(ID3算法、Apriori 算法)
分类算法要求数据是分类属性形式,常常需要将连续属性变换成分类属性,即连续属性离散化。
过程:确定分类数 -> 将连续属性值映射到这些分类值
方法:等宽法、等频法、基于聚类分析的方法(如 K-Means 算法)
属性构造:
为提取更有用的信息,挖掘更深层次的模式,提高挖掘结果的精度,需要利用已有属性构造出新属性,并加入到现有的属性集合中。
小波变换:
小波变换在时域和频域都有表征信号局部特征的能力。
选取适当的小波系数,即完成了信号的特征提取。(Scipy 提供了一些信号处理函数,PyWavelets 是一个非常好的信号处理库)
4、数据规约
数据规约产生更小但保持原数据完整性的新数据集,使得在规约后的数据集上进行分析和挖掘更有效率,降低存储数据的成本。
属性归约:(常用方法包括决策树、主成分分析)
通过属性合并来创建新属性维数,或通过删除不相关属性来减少数据维数。
目标:寻找出最小的属性子集并确保新数据子集的概率分布尽可能接近原来数据集的概率分布。
决策树归纳:直接删除不相关属性
主成分分析(Scikit_learn中的PCA函数):用于连续属性的数据降维方法。在应用中,通常是选出比原始变量个数少,能解释大部分数据中的变量的几个新变量,即主成分,来代替原始变量进行建模。
主成分分析 API REFERENCE:
from sklearn.decomposition import PCA
pca=PCA(3) #选取 n_components=3
pca.fit(data)
pca.components_ #返回模型的各个特征向量
pca.explained_variance_ratio_ #返回各个成分各自的方差百分比
low_d=pca.transform(data) #降低维度
pd.DataFrame(low_d).to_excel(outputfile) #保存结果
pca.inverse_transform(low_d) #必要时可以复原数据
相关系数矩阵:
data.corr( ) #相关系数矩阵
data.corr( )[u'白灼生菜'] #只显示白灼生菜与其他菜式的相关系数
data[u'a'].corr(data[u'b']) #计算 a 与 b 的相关系数
去除重复元素:
data.unique()
数值归约:
通过选择替代的、较小的数据来减少数据量
方法:直方图、聚类、抽样、参数回归
三、挖掘建模
算法名称 | 具体算法 | 适用条件 | 算法描述 | 算法目的 |
---|---|---|---|---|
回归分析 | Logistic 回归 | 因变量一般有 1 和 0 两种取值 (Logistic) |
研究的是当 y 取 “是” 发生的概率p与自变量 x 的关系。 用 和自变量列出线性回归方程,估计出模型中的回归系数。 |
rlr.get_support() 1.可以获取特征筛选结果,用筛选后的特征数据来训练模型 2.确定预测属性与其他变量间的定量关系 |
决策树 | ID3 算法 | 只能处理离散属性,对于连续型的属性,在分类前需要对其进行离散化(ID3) | 在决策树的各级节点上,使用信息增益作为判断标准进行属性的选择,使得在每个非叶节点上进行测试时,都能获得最大的类别分类增益,使分类后数据集的熵最小,树的平均深度较小。 信息增益越大,不确定性越小 |
分类 预测、规则提取 |
人工神经网络 ANN | BP 神经网络 | 根据给定的训练样本,调整人工神经网络的参数以使网络输出接近于一直的样本类标记或其他形式的因变量。 | 按误差逆传播算法训练的多层前馈网络 BP 算法的学习过程由 信号的正向传播 和 误差的逆向传播 组成。信号正向传播与误差逆向传播的各层权矩阵的修改过程,是周而复始进行的。权值不断修改的过程,也就是网络学习(训练)的过程。 |
神经网络的拟合能力很强,易出现过拟合。 防止过拟合的方法:随机地让部分神经网络节点休眠。 |
1.1、分类(有监督的学习)
主要是预测分类标号(离散属性)。构造一个分类模型,输入样本的属性值,输出对应的类别,将每个样本映射到预先定义好的类别。分类模型建立在已有类标记的数据集上,计算模型在已有样本上的准确率。
1.2、预测
主要是建立连续值函数模型,预测给定自变量对应的因变量的值。
常用分类与预测算法:
回归分析
决策树
人工神经网络
贝叶斯网络
支持乡两级
聚类(无监督的学习)
无监督的学习事先没有任何训练样本,而是直接对数据进行建模