数据挖掘期末复习
背诵部分:数据预处理概念、数据清洗概念、异常值产生的原因及处理方法、离群点检测常用的方法、规范化的概念以及具体的方法、数据归约的概念及方法、离群点的成因及类型
第一章 - 数据挖掘基础
数据挖掘的基本任务:分类与预测、聚类分析、关联规则、时序模式、偏差检测、智能推荐
数据挖掘的建模过程:目标定义、数据采集、数据整理、构建模型、模型评价、模型发布(部署、重构)
数据取样
抽取数据的标准:相关性、可靠性、有效性
抽样的方式:随机抽样、等距抽样、分层抽样、按起始顺序抽样、分类抽样
第二章 - python数据分析简介
列表/元组(list/tuple)
相关函数记忆
列表/元组的相关函数
区别:可变和不可变
com(a, b) # 比较两个列表/元组的元素
len(a) # 元素个数
max(a) # 最大值
min(a) # 最小值
sum(a) # 求和
sorted(a) # 升序排序(reverse = True)
列表相关的方法
a.append()
a.count()
a.extend([1,2,3])
a.index(1)
a.insert(1,2) # 将2插入到下标为1的位置
a.pop(1)
Python数据分析工具(重点)
数据挖掘相关拓展库
NumPy # 提供数组支持以及相应的高效的处理函数
SciPy # 提供矩阵支持以及矩阵相关的数值计算模块
Matplotlib # 强大的数据可视化工具、作图库
pandas # 强大灵活的数据分析和探索工具(重点考察的库)
StatsModels # 统计建模和计量经济学,包括描述统计、统计模型估计和推断
scikit-learn # 支持回归、分类、聚类等强大的机器学习库
Keras # 深度学习库,用于建立神经网络以及深度学习模型
Gensim # 用来做文本主题模型的库,文本挖掘可能会用到
pandas库 - 强大灵活的数据分析和探索工具
读入和写入excel 表格需要预先下载这两个库
pandas的功能非常强大,支持类似SQL的数据增、删、查、改,并且带有丰富的数据处理函数;支持时间序列分析功能;支持灵活处理缺失数据等等
pip install xlrd # 为Python添加读取excel的功能
pip install xlwt # 为Python添加写入excel的功能
pandas使用实例
imoprt pandas as pd
import numpy as np
s = pd.Series([1,2,3], index=['a', 'b','c'])
d = pd.DataFrame([[1,2,3],[4,5,6]], column=['a','b','c'])
d2 = pd.DataFrame(s)
d.head()
d.describe() # 数据基本统计量
# describe查看数据的基本情况
# 包括count、mean、std、min、25%、50%、75%、max 四分位数
pd.read_excel('path.xls')
pd.read_csv('ppath.csv',encoding='utf-8')
scikit-learn - 支持回归、分类、聚类等强大的机器学习库
这是一个与机器学习相关的库,是python下的强大的机器学习工具包,他提供完整的机器学习工具箱,包括数据预处理、分类、回归、聚类、预测、模型分析等。
创建机器学习模型示例
from sklearn.linear_model import LinearRegression
model = LinearRegression()
from sklearn import datasets # 导入数据集
iris = datasets.load_iris() # 加载数据集
from sklearn import svm # 导入svm模型
clf = svm.LinearSVC() # 建立线性SVM分类器
clf.fit(iris.data, iris.target) # 用数据训练模型
模型提供的相关接口
model.fit(X) # 监督模型训练
model.fit(X,y) # 非监督模型训练
# 监督模型提供以下接口
model.predict(X_new) # 预测新样本
model.predict_proba(X_new) # 预测概率,只对某些模型有用,比如LR(线性回归模型)
model.score() # 模型的的得分情况 score越高,fit越好
# 非监督模型提供以下接口
model.transform() # 从数据中新学到的基空间
model.fit_transform() # 从数据中学到新的基并将这个数据按照这组基进行转换
第三章 - 数据探索
缺失值分析
缺失值产生的原因:
有些信息暂时无法获取
有些信息是不给遗漏的
属性值不存在
缺失值产生的影响
数据挖掘建模将丢失大量的有用信息
数据挖掘模型所表现出来的不确定性更加显著,模型中蕴含的规律更难把握
包含空值的数据会使建模过程陷入混乱,导致不可靠的输出
缺失值的分析
-
使用简单的统计分析:
获取缺失值的属性的个数
获取每个属性的未缺失数、缺失数与缺失率
-
缺失值处理:
删除存在缺失值的记录
对可能值进行插补 - 重要处理方式
不进行处理
异常值分析
异常值分析是检验数据是否有录入错误,是否含有不合常理的数据。
异常值是指样本中的个别值,其数值明显偏离其他的观测值。异常值也称为离群点,异常值分析也称为离群点分析。
简单统计量分析
计算最大值和最小值,判断这个变量的取值是否超出了合理范围
3 segma原则(服从正态分布)
在此原则下,异常值被定义未一组测定值中与平均值得偏差超过3倍标准差的值。属于极个别的小概率事件
如果数据不服从正态分布,也可以用远离平均值的标准差倍数来描述
箱型图分析(绘制箱型图是重点)
箱型图提供了识别异常值的一个标准:异常值通常被定义为小于QL - 1.5IQR或大于QU + 1.5IQR的值,QL是下四方位数,QU是上四方位数,IQR是四分位数间距 (上四方位数与下四方位数之差)
绘制箱型图代码示例
import matplotlib.pyplot as plt
plt.figure()
p = data.boxplot(return_type='dict') # 画箱型图,直接使用DataFrame中的方法
统计量分析 集中趋势和离中趋势
统计量分析 - 用统计指标对定量数据进行统计描述,常用集中趋势和离中趋势两个方面进行分析。
集中趋势度量
- 均值
- 中位数
- 众数
离中趋势度量
- 极差 - 最大值 - 最小值
- 标准差 - 数据偏离均值的程度
- 变异系数 - 变异系数度量标准差相对于均值的离中趋势 CV = s / x * 100%
- 四分位数间距 IQR:上四方位数QU与下四方位数QL之差
代码示例
statistics.loc['range'] = statistics.loc['max'] - statistics.loc['min'] # 极差
statistics.loc['var'] = statistics.loc['std'] / statistics.loc['mean'] # 变异系数
statistics.loc['dis'] = statistics.loc['75%'] - statistics.loc['25%'] # 四分位数间距
贡献度分析
贡献度分析又称帕累托分析,他的原理是帕累托法则,又称二八定律。 同样的投入放在不同的地方会产生不同的效益。例如,一个公司80%的利润常常来自于20%最畅销的产品
相关性分析
分析连续变量之间线性相关程度的强弱,并用适当的统计指标表示出来的过程称为相关分析
常用的分析方法:
-
直接绘制散点图 - 判断两个变量是否具有线性相关关系最直观的方法是直接绘制散点图
-
绘制散点图矩阵 - 需要同时考察多个变量间的相关关系,利用散点图矩阵来同时绘制各变量间的散点图,在进行多元线性回归时显得尤为重要
-
计算相关系数
为了更加准确的描述变量间的线性相关程度,可以通过相关系数的计算来进行相关分析,在二元变量的相关分析过程中,比较常用的有Pearson相关系数、Spearman秩相关系数和判定系数
Pearson相关系数(要求连续变量的取值服从正态分布)
公式
相关系数r的取值范围:-1 ≤ r ≤ 1
r > 0为正相关关系,r < 0为负相关关系
|r| = 0表示不存在线性关系
|r| = 1表示完全线性关系
根据系数的绝对值大小可分为:极弱线性相关或不存在线性相关、低度线性相关、显著线性相关、高度线性相关
区间:[0, 0.3],[0.3, 0.5],[0.5, 0.8],[0.8, 1]
Spearman秩相关系数(不服从正态分布的变量、分类或等级变量之间的关联性)
公式
研究表明在正态分布假定下,Spearman秩相关系数与Pearson相关系数 在效率上是等价的,对于连续测量数据,更适合用Pearson相关系数来进行分析。
判定系数
就是相关系数的平方,用来衡量回归方程对y的解释程度,取值范围在 [0, 1] ,越接近于1,表明x与y之间的i相关性越强
相关系数代码示例
import pandas as pd
data = pd.read_excel('xx.xls', index = 'date') # 读取数据,指定date列为索引列
data.corr() # 相关系数矩阵,给出了任意两个特征之间的相关系数
data.corr()['xxxx'] # 只显示xxxx与其他特征的相关系数
data['百合酱蒸凤爪'].corr(data['xxxx']) # 计算百合酱蒸凤爪与xxxx的相关系数
Python中主要数据探索函数
基本统计特征函数
mean()
var() # 计算样本的方差
std() # 标准差
corr() # Spearman秩(Pearson)相关系数矩阵 是否符合正态分布
# 可选参数method = [Pearson(默认), Kendall, Spearman]
D.corr(method='pearson') # D是DataFrame 结果为相关系数矩阵
S1.corr(S2, method='Spearman')
cov() # 协方差矩阵
skew() # 偏度(三阶矩)
kurt() # 峰度(四阶距)
describe() # 基本统计量描述
统计绘图函数(很可能会考察)
plot() # 绘制线性二维图,折线图
pie() # 绘制饼图
hist() # 绘制二维条形直方图
boxplot() # 绘制样本数据的箱型图
# 使用格式
D.boxplot()
D.plot(kind='box')
plot(logy=True) # 绘制y轴的对数图形
plot(yerr=error) # 绘制误差条形图
箱型图绘制示例1
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
x = np.random.randn(1000) # 1000个服从正态分布的随机数
D = pd.DataFrame([x, x+1]).T # 构建两列的DataFrame
D.plot(kind='box')
plt.show()
箱型图示例2
from matplotlib.pyplot as plt
sks = data['sks']
fig = plt.figure((5, 8))
plt.boxplot(sks, # 处理后的数据
patch_artist=True,
labels=['时长'], # 设置x轴标签
boxprops={'facecolor':'lightblue'} # 设置填充颜色
)
plt.grid(axis='y') # 显示y坐标的底线
plt.show()
plt.close()
第四章 - 数据预处理
数据预处理的主要内容包括数据清洗、数据集成、数据变换和数据归约
数据清洗
数据清洗主要是删除原始数据集中的无关数据、重复数据,平滑噪声数据,筛选掉与挖掘主题无关的数据,处理缺失值、异常值等。
缺失值处理
处理缺失值的方法可分为3类:删除记录、数据插补和不处理
数据插补方法:
- 均值/中位数/众数插补
- 使用固定值 - 将缺失的属性值用一个常量替换,通常是人设定的合理的有科学依据的值
- 最近临插补 - 在记录中找到与缺失样本最接近的样本的该属性值插补
- 回归方法 - 使用已知数据和其他有关的其他变量的数据建立拟合模型来预测缺失的属性值
- 插值法 - 利用已知点建立合适的插值函数f(x),未知值由对应点x求出的函数值f(x)来近似替代
回归方法与插值法的区别:回归方法的拟合模型近似经过所有点,插值法的插值函数完全经过所有点
常用的插值法
- 拉格朗日插值 - 使用缺失值前后各5个未缺失的数据参与建模
- 牛顿插值法
其他的插值方法:
- Hermite插值
- 分段插值
- 样条插值法
拉格朗日插值法:
对于空间上已知的n个点,可以找到一个n-1次多项式,使此多项式曲线经过这n个点
牛顿插值法:
牛顿插值法也是多项式插值,但采用了另一种构造插值多项式的方法,与朗格朗日插值法相比,具有承袭性和易于变动节点的特点
异常值处理
在数据预处理中,异常值是否剔除需是具体情况而定,因为有些异常值可能蕴含着有用的信息。
异常值处理方法:
- 删除含有异常值的记录 - 将含有异常值的记录删除
- 视为缺失值 - 利用缺失值处理的方法进行处理
- 平均值修正 - 可用前后两个观测值的平均值修正该异常值
- 不处理 - 直接在具有异常值的数据集上进行挖掘建模
数据集成 - 数据变换(大题)
数据集成
数据挖掘需要的数据往往分布在不同的数据源中,数据集成就是将多个数据源合并存放在一个一致的数据存储位置(如数据仓库)中的过程
数据集成往往导致数据冗余:
- 同一属性多次出现
- 同一属性命名不一致导致重复
解决方法:
- 相关分析检测(相关系数度量)
数据变换
数据变换主要是对数据进行规范化处理,将数据转换成”适当的”形式,以适用于挖掘任务及算法的需要。
简单函数变换
简单函数变换是对原始数据进行某些数学函数变换,常用的包括平方、开方、取对数、差分运算等
简单函数变换常用来将不具有正态分布的数据变换成具有正态分布的数据;
在时间序列分析中,有时简单的对数变换或者差分运算就可以将非平稳序列转换成平稳序列
规范化
数据标准化处理是数据挖掘的一项基础工作。为了消除指标之间的量纲和取值范围差异的影响,需要进行标准化处理,将数据按照比例进行缩放,便于进行综合分析
规范化的一些方法:
- 最小-最大规范化 - 也称为离差标准化,将数值映射到 [0, 1] 之间
- 零-均值规范化 - 也叫标准差标准化,经过处理后的数据的均值为0,标准差为1
- 小数定标规范化 - 通过移动属性值的小数位数,将属性值映射到 [-1, 1]之间,移动的小数位数取决于属性值绝对值的最大值。
Python实现代码示例
(data - data.min()) / (data.max() - data.min()) # 最小-最大规范化
(data - data.mean()) / data.std() # 零-均值规范化
data / 10 ** np.ceil(np.log10(data.abs().max())) # 小数定标规范化
连续属性离散化
常用的离散化方法:等宽法、等频法和一维聚类(需要先进行排序)
等宽法:区间的宽度相同(对离群点比较敏感)
将属性的至于分成相同宽度的区间,区间的个数由数据本身的特点决定或者用户指定,类似于制作频率分布表
等频法:区间内数据的个数相同(可能将相同的值分到不同的区间内)
将相同数量的记录放进每个区间
基于聚类分析的方法:
一维聚类方法包括两个步骤:首先将连续属性的值用聚类算法进行聚类,然后再将聚类得到的簇进行处理,合并到一个簇的连续属性值做同一标记
数据归约
数据归约产生更小且保持原数据完整性的新数据,在归约后的数据集上进行分析和挖掘将提高效率
数据归约的意义:
降低无效、错误数据对建模的影响,提高建模的准确性
少量且具有代表性的数据将大幅缩减数据挖掘所需的时间
减低储存数据的成本
属性归约 - PCA主成分分析
属性归约通过属性合并创建新属性维数,或者通过直接删除不相关的属性来减少数据维数
属性归约的目标是寻找最小的属性子集并确保新数据子集的概率分布尽可能接近原来数据集的概率分布
属性归约常用方法:
- 合并属性 - 将一些旧属性合并为新属性
- 逐步向前选择 - 设置空属性集,每次选择最优的属性添加到当前属性子集
- 逐步向后删除 - 每次都选择最差的属性并将其从当前属性子集中消去
- 决策树归纳 - 利用决策树的归纳方法对初始数据进行分类归纳学习
- 主成分分析 - 用较少的变量去解释原始数据中的大部分变量,将许多相关性很高的变量转换成彼此相互独立或不不相关的变量 - PCA
主成分分析
主成分分析是一种用于连续属性的数据降维方法,它构造了原始数据的一个正交变换,新空间的基底去除了原始空间基底下数据的相关性,只需使用少数新变量就能够解释原始数据中的大部分变量。
PCA主成分分析的计算步骤:
- 构造矩阵m行p列(m是观测值个数,p是属性个数)
- 按列进行中心归一化(降低数据的量纲和取值区域差异)
- 计算相关系数矩阵R r = (ki + kj) / (ki^2 + kj^2)
- 求R的特征方程det(R - …E) = 0 的特征根 lambda1≥lambda2≥ … ≥lambda n >0
- 确定主成分的个数m:m/p ≥ alpha 一般取80%
- 计算m个相应的单位特征向量 beta1 = beta p1,beta2 = beta p2 , beta m = beta pm
- 计算主成分: Z = beta * X
参数说明
- n_components - PCA算法中所要保留的主成分个数n,就是保留下来的特征个数n
- copy - 表示是否在运行算法时,将原始训练数据复制一份
- whiten - 白化,使得每个特征具有相同的方差
主成分分析代码示例
# 导入数据data
data = pd.read_excel(inputfile, header=None) # 读入数据并且忽略首行索引数据
from sklearn.decomposition import PCA
pca = PCA()
pca.fit(data)
pca.components_ # 返回模型的各个特征向量
pca.explained_variance_ratio_ # 返回各个成分各自的方差百分比
Python主要数据预处理函数
interpolate # 一维、高维数据插值
f = scipy.interpolate.lagrange(X, y)
unique # 去除数据中的重复元素,得到单值元素列表,他是对象的方法名
isnull # 判断是否空值
notnull # 判断是否非空值
PCA # 对指标变量矩阵进行主成分分析
random #生成随机矩阵
第五章 - 挖掘建模(关联规则)
关联规则
常用关联规则算法:Apriori、FP-Tree、Eclat算法、灰色关联法
Apriori算法
Apriori算法的主要思想是找出存在于事务数据集中最大的频繁项集,再利用得到的最大频繁项集与预先设定的最小置信度阈值生成强关联规则
性质
频繁项集的所有非空子集也必须是频繁项集。根据该性质可以得出:向不是频繁项集I的项集中添加事务A,新的项集一定也不是频繁项集(在算法中用于剔除多余的项)
Apriori算法实现的两个过程(大题)
- 寻找最大k项频繁集(连接,剪枝) (最小支持度)
- 由频繁集产生关联规则 (对比最小置信度)
找出关联规则
1.找出最大k项频繁集
- 找到所有的1项候选集C1
- 比较最小支持度,得到1项频繁集L1
- 扫描事务,连接L1和L1得到候选2项集C2,计算支持度,通过 性质筛选候选集
- 比较最小支持度,得到2项频繁集L2
- 重复上面两步直到不通过支持度检验
2.计算置信度,得到满足置信度的关联规则
时序模式
应用时间序列分析的目的就是给定一个已被观测了的时间序列,预测该序列的未来值
时间序列算法
常用的时间序列模型:
- 平滑法
- 趋势拟合法
- 组合模型
- AR模型 - 自相关系数拖尾 偏自相关系数p阶截尾 与前p期的序列值有关
- MA模型 - 自相关性系数q阶截尾 偏自相关系数拖尾 与前q期的随机扰动有关
- ARMA模型 - 平稳时间序列建模 自相关系数p阶拖尾 偏自相关系数q阶拖尾
- ARIMA模型 - 非平稳时间序列分析
- ARCH模型 - 适用于序列具有异方差性并且异方差函数短期自相关
- GARCH模型及其衍生模型 - 称为广义ARCH模型,是ARCH模型的拓展。更能反映实际序列中的长期记忆性、信息的非对称性
时间序列的预处理
-
平稳性检验
对序列平稳性检验有两种方法:一种是根据时序图和自相关图的特征做出判断的图检验(带有主观性);一种是构造检验统计量进行检验的方法,目前最常用的是单位根检验
-
纯随机性检验
纯随机性检验也称白噪声检验,一般是构造检验统计量来检验序列的纯随机性。常用的统计量有Q统计量和LB统计量,由样本各延迟期数的自相关系数可以计算得到检验统计量,然后计算得到对应的p值,如果p值明显大于显著性水平,则表示不能拒绝纯随机的原假设
离群点检测
什么是离群点?离群点是一个数据对象,它显著不同于其他数据对象,好像它是被不同的机制产生的一样
离群点检测是数据挖掘中重要的一部分,它的任务是发现与大部分其他对象不同的对象。在一些应用中,罕见的数据可能蕴含着更大的研究价值
离群点的成因及类型
主要成因:
数据来源于不同的类,自然变异,数据测量,收集误差
离群点的类型:
数据范围 - 全局离群点和局部离群点
数据类型 - 数值型离群点和分类型离群点
属性个数 - 一维离群点和多维离群点
离群点检测方法
- 基于统计 - 构建一个概率模型,并计算对象符合该模型的概率,把具有低概率的对象视为离群点
- 基于邻近度 - 可以再数据对象之间定义邻近性度量,把远离大部分点的对象视为离群点
- 基于密度 - 离群点是低密度区域中的对象
- 基于聚类 - 1.利用聚类检测利群点的方法丢弃远离其他簇的小簇。2.更系统的方法,首先聚类所有对象,然后评估对象属于簇的程度(离群点得分)
基于模型的离群点检测方法
一元正态分布中的离群点检测(3倍标准差)
混合模型的离群点检测
基于聚类的离群点检测方法
丢弃远离其他簇的小簇
基于原型的聚类
第六章 - 财政收入影响因素
灰色预测
概念
灰色预测法是一种对含有不确定因素的系统进行预测的方法(部分信息不明确,部分信息未知的小样本,贫信息不确定问题)
使用方法
在建立灰色预测模型之前,需先对原始时间序列进行数据处理,经过数据处理后的时间序列即称为生成列。灰色系统常用的数据处理方式有累加和累减两种,还有均值,极比。常用的灰色模型为GM(1,1)
常见的几种灰生成类型:
- 累加生成算子
- 逆累加生成算子
- 均值生成算子
- 极比生成算子
优点
不需要大量的样本,样本不需要有规律性分布,计算工作量小,预测精度高、模型可检验、参数估计方法简单、对小数据集有很好的预测效果;
缺点
对原始数据序列的光滑度要求很高,在原始数据列光滑性较差的情况下灰色预测模型的预测精度不高,甚至通不过检验,结果只能放弃使用灰色模型进行预测
SVR算法(支持向量回归)
SVR是在做拟合的时候,次啊用了支持向量的思想,来对数据进行回归分析。
由于支持向量机拥有完善的理论基础和良好的特性,人们对其进行了广泛的研究和应用,涉及分类、回归、聚类、时间序列分析、异常值检测等诸多方面
相关代码
from skleran.svm import LinearSVR
linearsvr = LinearSVR()
linearsvr.fit(x_train, y_train)
# 预测并还原结果
x = linearsvr.predict(x) * data_std + data_mean
实战篇:推荐系统
协同过滤
实现步骤
- 收集用户偏好
- 找到相似的用户或物品
- 计算推荐
相似度计算
- 欧几里得距离
- 皮尔逊相关系数(推荐使用)
- Cosine 相似度
基于用户的协同过滤(UserCF) - 并不流行
性能:适用于用户数较少的场景
找到相似的用户
难题:
对于一个新用户,很难找到邻居用户
对于一个物品所有最近的邻居都在其上没有多少打分
不流行的原因:
稀疏问题
数百万的用户计算
人是善变的
基于物品的协同过滤(ItemCF)
性能:适用于物品数明显小于用户数的场合
优势:
计算性能高,通常用户数量远远大于物品数量
可预先计算保留,物品并不善变