Python数据分析与挖掘实战

该python数据分析与挖掘实战内容是统计科内容与人工智能生成内容的结合,可作结构性参考

第一章:数据挖掘基础

1.1餐饮业的困惑

一个信息化系统可以为企业搜集各种有用的,可以用于数据挖掘分析的数据。 所谓信息化系统,即特指“企业对客户的服务周期内具备持续搜集相关数据的能力”的系统。

我们以餐饮业为例,这样的一套信息化系统可以分为:

①理解客户关系的管理系统-个性化客户分群,包含客户的行为,价值观(喜好和需求),价值及潜在价值。

②前厅管理系统-快速完成点菜流程

③后厨管理系统-实现后厨与前厅的无缝衔接

④财务管理系统-销售统计与分析,包含销售信息,财务报表,客户流量,产品分析。

⑤物资管理系统-融采购管理

这样①~⑤的信息化系统涉及一个企业和顾客从接触开始的,良性活动周期的所有过程(接触→认识→使用→反馈→回头)

那么可以认为这样一套信息化流程走下来的数据是很有效的了。关键就看我们应该怎么使用它。

1.2数据挖掘的基本任务

以下的基本任务每一个都很重要,都会分章节阐述其内涵,因此要时刻牢记:

①分类与预测

②聚类分析

③关联规则

④时序模式

⑤偏差检测

⑥智能推荐

1.3数据挖掘建模过程

1.3.1目标定义

通过各部门交流访谈得到问题导向,任务理解,指标确认。了解相关领域的有关情况,熟悉背景知识,弄清用户需求。

[这一块其实是数据挖掘建模的重中之重,因为不论是数据预处理,数据清洗,还是最重头技术的数据分析,数据挖掘,数据建模,在原生的方向端都不能错,我们的误判,我们模型的改正,我们数据的重新收集,这些在技术端繁琐的工作背后,其实都是在业务端欠下的债]

[对这一块的理解,一个道理非常清晰,那就是“设身处地”。你只有真正的是一名顾客,你才能扮演一名顾客,你才能知道一名顾客想要的是什么]

1.3.2数据采集

原料采购,客户及外部数据收集。抽取数据的标准:相关性,可靠性,有效性

这三个性质也是很重要的,我们抽取数据,第一个是确认样本框,第二个就是确认在样本中抽取什么类型的数据。

而不管是哪一个方面的尝试,要想提升成功概率,都需要积累大量的经验。

1.3.2.1抽样方法

1.3.2.1.1随机抽样

即按一个比例对原始数据进行随机的抽取

[我如果要用这种抽样法,那要么是因为这份数据的先验信息很少,要么是因为先验告诉我这份数据会很平均]

1.3.2.1.2等距抽样

也是按照某个比例,但是根据这个比例,对数据进行等距分组,然后按照每个距选择对应的组

[我如果要用这个抽样法,那一定是因为数据排列地很规整]

示例代码:

1.3.2.1.3分层抽样

先对数据分成不同层次,不同层次内部有不同的选取比例

[我如果要用这种,那一定是因为我已经知道一些具有显著相关或因果的概念了]

1.3.2.1.4按起始顺序抽样

从输入数据集的起始处开始,也是给定一个抽取的比例

[我如果要用,那这数据解构一定有一个单向行的指标或要素,比如时间]

1.3.2.1.5分类抽样

直接依据某个属性确定抽取的样本

[我如果要用,那看来我很确定这里有一个分类标准]‘

1.3.3数据整理

数据探索。实际上就是需求数据的分布,以及看看数据是否有超乎寻常的点。虽然在大样本尺度下,大家都是正态分布,但是局限尺度里的分布还是各不相同的。我们有参数可以进行检验,总比最后要搞成非参数检验来得好。更何况,有能确凿参数的机会,对于我们预测来说帮助实在很大。

数据清洗,内容很大,效力很高,但是是数据预处理部分。

数据变换,内容很大,效力很高,但是是数据预处理部分。

1.3.4构建模型

模式发现→构建模型→验证模型

1.3.5模型评价

设定评价标准(业务端就需要知道的东西),多模型对比(如果你业务熟透也许就不用这个),模型优化(也是业务上可以弥补的)

1.3.6模型发布

模型部署→模型重构[就算你再怎么有业务经验,巴菲特也猜不到股市下一刻到底怎么走,我们的社会是一个大的混沌模型,今天是,昨天是,明天也是。涉及生物的模型也许正因为作为微观的人这个单元太过“巨大”而导致它本身也不具备被观察的完美可靠性(像物理那样)]

1.4常用数据挖掘工具

SAS EM(sas)

IBM SPSS Modeler(spss)

SQL Server(sql)

Python(python!)

WEKA(java)

KNIME(java)

RapidMiner(java)

TipDM开源数据挖掘建模平台(python!)

第二章:Python数据分析简介

2.1搭建python开发平台

2.2python使用入门

以上两个,是个想要学习数据挖掘的人都要会了吧!

2.3数据分析工具

numpy-提供数组支持以及相应的高效的处理函数(python本体做不了数组)

scipy-提供矩阵支持及矩阵相关的数值计算模块(依赖于numpy)

matplotlib-强大的数据可视化工具,作图库(类比matlab)

pandas-强大灵活的数据分析和探索工具(数据分析主力)

statsmodels-统计建模和计量经济学,包括描述统计,统计模型估计和推断

scikit-learn-支持回归,分类,聚类等强大的机器学习库

keras-深度学习库,用于建立神经网络以及深度学习模型

gensim-用来做文本主题模型的库,文本挖掘可能会用到

[课件里的推荐,稍微了解就好,实际使用时肯定还要安装更多的包]

第三章:数据探索

3.1数据质量分析

是数据预处理的前提,且是分析有效性和准确性的基础。主要任务是检测数据中是否有脏数据(缺失,异常,不一致的值,重复数据,特殊符号数据)

3.1.1缺失值分析

具有缺失值,要么是调查设计有问题,要么就是调查情绪不好,调查者不是很配合。

对缺失值的分析,就是看数据是否存在空白未填的部分。

3.1.2异常值分析

异常值是指样本中的个别值,离群点。

3.1.2.1简单统计量分析

先对变量进行描述性统计,再在其中看不合理的数据。所谓界定不合理数据,比如用箱形图。用QQ图。用散点图,来看数据点的分布。

3.1.2.23σ原则

数据存在正态分布时,异常值通常被设定为在μ±3σ之外的数据,因为在其之外的数据存在概率只有0.003,属于极个别的小概率事件,可以被标定为异常值。

3.1.2.3箱型图分析

首先了解一下箱型图的数理结构:QL-下四分位数(在其之“下”还有四分之一的数据),QU-上四分位数(在其之“上”还有四分之一的数据)。IQR=|QU-QL|。

那么在箱型图中,异常值被通常设定为:小于QL-1.5IQR或者大于QU+1.5IQR。

现在来用语言描述看,箱型图在图上的表现形式:

箱型图,表现为一个类弹簧结构,上下有各自的一个横杠代表最值(上下界),然后其中间有一个矩形,靠上界的边就是QU,靠下界的边就是QL,矩形中(不一定是中点)有一横杠,代表其中位数的位置,有一+号代表其均值的位置。

由于箱型图具有一定鲁棒性,在识别异常值时具有一定的优越性。

3.1.3一致性分析

数据出现不一致性,就是同一个类型的数据出现了矛盾的数据,主要产生于数据集成阶段,基本是由于记录数据时产生的人为错误。

3.2数据特征分析

3.2.1分布分析

揭示数据的分布特征和类型。即了解数据是否对称,并发现可疑值。主要是对【定量】和【定类】数据进行对应的【描述性分析】。

3.2.1.1对于定量数据

选择“组数”和“组宽”,一般按照如下步骤进行:求极差(最大值-最小值),决定组距(由数据特征决定,一般是5或者10或者按照位数增加0,比如50或100)和组数(极差/组距≈四舍五入),决定分点,列出频率分布表,绘制频率分布直方图。

3.2.1.2对于定性数据

常常根据变量的分类类型确定数据数量,然后绘制饼图和条形图

3.2.2对比分析

把两个相互联系的指标进行比较,主要是【绝对数比较】和【相对数比较】

3.2.2.1绝对数比较

所谓绝对数就是绝对的数值,数据直接展现出来的数值

利用绝对数进行比较,从而寻找差异(就是简单的基本数值比大小)

3.2.2.2相对数比较

【因此这里有必要了解各种相对数的定义】

结构相对数:在一总体内部分数值和全部数值的比较(就是在总体中的占比,代表性,重要程度)

比例相对数:总体内不同的部分之间的比较,不同部分自然就是总体的组成部分(在总体内矛盾对抗的个体之间的关系,各自对抗的力道)

比较相对数:同一时期两个性质相同的指标数值进行比较(类比控制变量法)

强度相对数:将两个性质不同但有一定联系的总量指标对比,表示某个现象的密度,强度,或者普遍程度。(元/人,人/平方公里)

计划完成程度相对数:将实际完成数与计划数进行对比,用以说明计划完成程度。(进度条)

动态相对数:同一指标不同时期的发展速度,增长速度。(以“xx速度”作为主体,以“增长”或“减小”作为主题,来评判速度有所降低或升高)

3.2.3统计量分析

3.2.3.1集中趋势度量

均值,中位数,众数

3.2.3.2离中趋势度量

极差,标准差,变异系数

3.2.4周期性分析

判断某个变量是否随时间有周期性变化的分析,这个时间跨度可从年度开始,到月度,周度,甚至到天,小时。

3.2.5贡献度分析

帕累托分析,28定律,80%利润来自于20%最畅销的产品。

使用帕累托图,对涉及影响80%的品类进行加强,80%以外的减弱

3.2.6相关性分析

分析连续变量之间线性相关程度的强弱,并用适当的统计指标表示出来。

3.2.6.1方法1:直接绘制散点图

观察两个变量构成的所有点是否构成一道直线(或可以看作在一道直线左右均匀分布)。构成直线则线性相关,而线性相关亦分正负。如果构成的是曲线则是非线性相关,如果什么都不构成则称不相关。

3.2.6.2方法2:绘制散点图矩阵

上面的散点图是二元数据用得最多的,但如果数据是多元的,使用散点图矩阵才合理

了解散点图矩阵:散点图矩阵分两个部分组成,其对角线的直方图和上下三角的散点图。

其中对角线上的直方图表示各特类数据变量的分布。上下三角的散点图表示对角线各类数据两两之间的关系。如在矩阵中的13散点图就是数据11直方图和数据33直方图两类数据的散点图。

3.2.6.3方法3:计算相关系数

除了可以直接用图看,为了更加准确地得到相关性,还可以使用相关系数来得到相关性。

在二元变量分析中,比较常用的有Pearson相关系数,Spearman秩相关系数和判定系数

3.2.6.3.1Pearson相关系数

前提:连续变量取值服从正态分布

计算公式:eq?r%3D%5Cfrac%7B%5Csum_%7Bi%3D1%7D%5E%7Bn%7D%28x_%7Bi%7D-%5Cbar%7Bx%7D%29%28y_%7Bi%7D-%5Cbar%7By%7D%29%7D%7B%5Csqrt%7B%5Csum_%7Bi%3D1%7D%5E%7Bn%7D%28x_%7Bi%7D-%5Cbar%7Bx%7D%29%5E%7B2%7D%28y_%7Bi%7D-%5Cbar%7By%7D%29%5E%7B2%7D%7D%7D

其中相关系数r的范围-1≤r≤1

当r>0时表示正相关关系,r<0时表示负相关

当r=0时表示不存在线性相关,r=1则完全线性相关

其中

|r|≤0.3表示极弱线性相关,或不存在相关关系

0.3<|r|≤0.5表示低度线性相关

0.5<|r|≤0.8表示显著线性相关

|r|>0.8表示高度线性相关

3.2.6.3.2Spearman秩相关系数

可处理Pearson无法解决的非正态分布数据

计算公式:eq?r_%7Bs%7D%3D1-%5Cfrac%7B6%5Csum_%7Bi%3D1%7D%5E%7Bn%7D%28R_%7Bi%7D-Q_%7Bi%7D%29%5E%7B2%7D%7D%7Bn%28n%5E%7B2%7D-1%29%7D

对两变量(x,y)成对的取值分别按照从小到大(或从大到小)的顺序编排,其中Ri表示变量xi的秩次,Qi表叔yi的秩次,Ri-Qi为xi,yi的秩次之差

一个变量相同的取值必须要有相同的秩次,所以相同的变量的秩次就是排序所在位置的平均值即

Q_%7Bi%7D%28min%28x_%7Bi%7D..x_%7Bi+k%7D%29%29%7D%7Bk+1%7D

只要两个变量具有严格单调的函数关系它就是完全Spearman相关的,而不分析它的线性性。

3.2.6.3.3使用相关系数的规定

上述相关系数在实际运用中都要对其进行假设检验,使用t检验检验其显著性以确定其相关程度。

研究表明S秩相关和P相关在正态假定下效率是等价的。对于连续测量数据,P相关性能更好。

3.2.6.3.4判定系数

就是r²,用于衡量回归方程对y的解释程度,当r²越接近1,表示x与y之间相关性越强,越接近0,表示两变量间几乎没有直线相关关系

3.3Python主要数据探索函数

3.3.1基本统计特征函数

统计特征函数可用于计算如均值,方差等数学特征。能反映数据的整体分布,以下是pandas主要统计特征函数:

sum(),mean(),var(),std(),corr()Spearman相关系数矩阵,cov()协方差矩阵,skew()样本值的偏度,kurt()样本值的峰度,describe()样本的基本描述

3.3.2拓展统计特征函数

3.3.2.1pandas累计计算统计特征函数

cumsum()依次给出前1,2,...,n个数的和

cumprod()依次给出前n个数的积

cummax()前n最大值

cummin()前n最小值

3.3.2.2pandas滚动计算统计特征函数

rolling_(为前缀):

sum(),mean(),var(),std(),corr(),cov(),skew(),kurt()

3.3.3统计绘图函数

plot()绘制线性二维图,折线图

pie()绘制饼图

hist()绘制二维条形直方图,可显示数据的分配情形

boxplot()绘制样本数据的箱型图

plot(logy=True)绘制y轴得对数图形

plot(yerr=error)绘制误差条形图

第四章:数据预处理

数据预处理的主要内容包括数据清洗,数据集成,数据变换和数据归约。

4.1数据清洗

数据清洗用于删除原始数据集中的物管数据,重复数据,平滑噪声数据,筛选掉与挖掘主题无关的数据,处理缺失值,异常值等。

4.1.1缺失值处理

缺失值处理方法:删除记录,数据插补,不处理。

4.1.1.1数据插补

均值,中位数,众数插补-使用属性取值的平均数,中位数,众数进行插补。

使用固定值-用一个常量替换,该敞亮通常是经验得数

最近邻插补-找到与缺失样本最接近的样本的属性值插补

回归方法-根据已有数据和与其有关的其他变量的数据,建立拟合模型预测缺失值

插值法-利用已知点建立合适的插值函数,对应点xi属性值由f(xi)近似替代

4.1.1.2删除记录

是最简单最有效的方法(若缺失值的属性记录不重要),不处理是最摆烂的

4.1.1.3着重介绍的插值方法:

目前已知的插值法有:拉格朗日插值,牛顿插值,hermite插值,分段插值,样条插值等。

这里着重介绍的是拉格朗日插值和牛顿插值。

4.1.1.3.1拉格朗日插值法:

已知n个点,对应于n-1次多项式(该多项式能够过这n个点)

eq?y%3Da_%7B0%7D+a_%7B1%7Dx+a_%7B2%7Dx%5E%7B2%7D+...+a_%7Bn-1%7Dx%5E%7Bn-1%7D

将n个点的坐标代入该式,得到n个方程。解得:

eq?y%3D%5Csum_%7Bi%3D0%7D%5E%7Bn%7Dy_%7Bi%7D%28%5Cprod_%7Bj%3D0%2Cj%5Cneq%20i%7D%5E%7Bn%7D%5Cfrac%7Bx-x_%7Bj%7D%7D%7Bx_%7Bi%7D-x_%7Bj%7D%7D%29

其中eq?y_%7Bi%7D%3Da_%7B0%7D+a_%7B1%7Dx_%7Bi%7D+a_%7B2%7Dx_%7Bi%7D%5E%7B2%7D+...+a_%7Bn-1%7Dx_%7Bi%7D%5E%7Bn-1%7D

将缺失值对应的点x代入到y式中即可得缺失值的近似值L(x)

4.1.1.3.2牛顿插值法:

在区间[a,b]上,f(x)关于xi的零阶差商定义:

eq?f%5Bxi%5D%3Df%28xi%29

关于xi,xj的一阶差商定义:

eq?f%5Bx_%7Bi%7D%2Cx_%7Bj%7D%5D%3D%5Cfrac%7Bf%28x_%7Bj%7D%29-f%28x_%7Bi%7D%29%7D%7Bx_%7Bj%7D-x_%7Bi%7D%7D

进而k阶差商定义:

eq?f%5Bx_%7B0%7D%2Cx_%7B1%7D%2Cx_%7B2%7D...x_%7Bk%7D%5D%3D%5Cfrac%7Bf%5Bx_%7B1%7D%2Cx_%7B1%7D%2Cx_%7B2%7D...x_%7Bk%7D%5D-f%5Bx_%7B0%7D%2Cx_%7B1%7D%2Cx_%7B2%7D...x_%7Bk-1%7D%5D%7D%7Bx_%7Bk%7D-x_%7B0%7D%7D

则牛顿插值多项式表示为:

eq?N_%7Bn%7D%28x%29%3Df%5Bx_%7B0%7D%5Dw_%7B0%7D%28x%29+f%5Bx_%7B0%7D%2Cx_%7B1%7D%5Dw_%7B1%7D%28x%29+...f%5Bx_%7B0%7D%2Cx_%7B1%7D%2C...%2Cx_%7Bn%7D%5Dw_%7Bn%7D%28x%29

其中,牛顿插值的余项:

eq?R_%7Bn%7D%28x%29%3Df%5Bx%2Cx_%7B0%7D%2Cx_%7B1%7D%2C...%2Cx_%7Bn%7D%5Dw_%7Bn+1%7D%28x%29

其中,w(x):

eq?w_%7B0%7D%28x%29%3D1%2Cw_%7Bk%7D%28x%29%3D%28x-x_%7B0%7D%29%28x-x_%7B1%7D%29...%28x-x_%7Bk-1%7D%29

对于区间[a,b]上任意一点x,有:

eq?f%28x%29%3DN_%7Bn%7D%28x%29+R_%7Bn%7D%28x%29

4.1.2异常值处理

4.1.2.1常用异常值处理方法:

删除含有异常值的记录-直接删除

视为缺失值-使用缺失值方法

平均值修正-可用前后两个观测值的平均值修正该异常值

不处理-直接在异常值的数据集上进行挖掘建模

4.2数据集成

数据挖掘需要的数据往往在不同的数据源中,此时就需要数据集成,即将多个数据源合并存放在一个一致的数据存储位置(数据仓库)中

4.2.1实体识别

实体识别,是从不同数据源中识别出现实世界的实体,目的是统一数据源的矛盾之处。

常见的实体识别如下:

4.2.1.1同名异义

数据源A中和数据源B中相同的属性ID,实际上代表的是菜品编号和订单编号,描述的是不同的实体

4.2.1.2异名同义

数据源A中select-data和数据源B中的select-dt不同名,但都是描述销售日期的

4.2.1.3单位不统一

虽然描述同一个实体,但是一个用国际单位,一个用中国传统单位,比如500克和一斤。

检测和解决这些“冲突”就是实体识别的任务

4.2.2冗余属性识别

数据集成往往导致数据冗余,例如:

同一属性多次出现,同一属性命名不一致

冗余属性的“识别”可以用相关分析检测,给定两个数值型的属性A和属性B,用相关系数度量一个属性在多大程度上蕴含另一个属性。(详见3.2.6)

4.2.3数据变换

数据变换主要对数据进行规范化处理,将数据转换为“适当的”形式,以适用于任务。

4.2.3.1简单函数变换

即对原始数据进行某些数学函数变换,例如平方,开方,取对数,差分运算等。

该变换常用来将不具有正态分布的数据变换成具有正态分布的数据。例如在时间序列分析中,使用简单的对数或差分运算就可以将非平稳序列转换为平稳序列。在数据挖掘中,对某些跨度大的数据进行对数运算,可以进行数据的“压缩化”。

4.2.3.2规范化

数据规范化,即数据标准化(归一化)。不同评价指标往往具有不同量纲,数值间差别很大。为了消除量纲和取值范围的影响,需要进行标准化处理。

规范化对于基于距离的挖掘算法尤为重要。

4.2.3.2.1最小-最大规范化

也称为离差标准化,是对原始数据的线性变换,将数值映射在【0,1】之间,转化公式如下:

eq?x%5E%7B*%7D%3D%5Cfrac%7Bx-min%7D%7Bmax-min%7D

这种方法,是消除量纲和取值范围影响最简单的方法,但是缺点是如果数值中有很大的数值,规范化后,除该值外的各值会接近于0且差别不大,所以如果后来遇到的数值超过了【min,max】,会引起系统错误。

4.2.3.2.2零-均值规范化

也叫标准差标准化,经过处理的数据均值为0,标准差为1。公式如下:

eq?x%5E%7B*%7D%3D%5Cfrac%7Bx-%5Cbar%7Bx%7D%7D%7B%5Csigma%20%7D

其中,xbar为原始数据的均值,σ为原始数据的标准差,这是当前用的最多的归一化方法。

4.2.3.2.3小数定标规范化

通过移动属性值的小数位数,将属性值映射到【-1,1】之间,移动的小数位数取决于属性值绝对值的最大值,转化公式如下:

eq?x%5E%7B*%7D%3D%5Cfrac%7Bx%7D%7B10%5E%7Bk%7D%7D

其中,k就是能够将最大值正好映射到【-1,1】的最小值。

4.2.3.3连续属性离散化

一些数据挖掘算法,特别是某些分类算法,如ID3,Apriori等,要求数据是分类属性形式,所以常常需要将连续属性变换成分类属性,即连续属性离散化。

离散化就是将连续属性取值范围中划分若干个离散的区间,用不同的符号或整数值代表落于该区间的连续属性值

常用方法有:等宽法,等频法,(一维)聚类

4.2.3.3.1等宽法

将连续属性值域分成具有相同宽度的区间,区间个数由数据本身特色决定,类似于制作频率分布表。

4.2.3.3.2等频法

将相同数量的记录放进每个区间。

其中,等宽法容易导致区间不均匀的问题,等频法则容易将相同(类型)的数据值分到不同的区间。

4.2.3.3.3基于聚类分析的方法

一维聚类包括两个步骤,首先将连续属性的值用聚类算法(如K-means算法)进行聚类,然后再将聚类得到的簇进行处理,合并到一个簇的连续属性值做一个标记。它需要用户根据数据特点指定簇的个数。这个方法相对科学,最常用。

4.2.4属性构造

在数据挖掘过程中,为了帮助用户提取更有用的信息,挖掘更深层次的模式,提高挖掘结果的精度,需要利用已有的属性集构造新的属性,并加入到现有的属性集中。

例如,原本的电价属性只有供入电量和供出电量,但是经过用户时会有损耗,使得供入供出不等价,所以我们可以通过供入和供出电量构造以用户为单位的线损率,来评价观察是否一个用户存在窃漏电行为(即线损率异常过高)

4.2.5小波变换

小波变换是一种新型的数据分析工具。时年兴起的信号分析手段。

4.2.5.1基于小波变换的特征提取方法的说明

4.2.5.1.1基于小波变换的多尺度空间能量分布特征提取方法

各尺度空间内的平滑信号和细节信号能提供原始信号的时频局域信息,特别是能提供不同频段上信号的构成信息。把不同分解尺度上的信号的能量求解出来,就可以将这些能量尺度顺序排列形成特征向量,以供识别。

4.2.5.1.2基于小波变换的多尺度空间中模极大值特征提取方法

利用小波变换的信号局域化分析能力,求解小波变换的模极大值特性来检测信号的局部奇异性,将小波变换模极大值的尺度参数s,平移参数t及其幅值作为目标的特征量

4.2.5.1.3基于小波包变换的特征提取方法

利用小波分解,可将时域随机信号序列映射为尺度域各子空间内的随机系数序列,按小波包分解得到的最佳子空间内随机系数序列的不确定性程度最低,将最佳子空间的熵值及最佳子空间在完整二叉树中的位置参数作为特征量,可以用于目标识别。

4.2.5.1.4基于适应性小波神经网络的特征提取方法

可以把信号通过分析小波你和表示,进行特征提取

4.2.5.2小波基函数

eq?%5Cpsi%20%28t%29,即小波基函数,是一种具有局部支集的函数,平均值为0,满足eq?%5Cpsi%20%280%29%3D%5Cint%20%5Cpsi%20%28t%29dt%3D0

常用的小波基函数有Haar小波基,db系列小波基等。

4.2.5.3小波变换

对小波基函数进行伸缩和平移变换,如式:

eq?%5Cpsi%20_%7Ba%2Cb%7D%28t%29%3D%5Cfrac%7B1%7D%7B%5Csqrt%7B%5Cleft%20%7C%20a%20%5Cright%20%7C%7D%7D%3D%5Cpsi%28%5Cfrac%7Bt-b%7D%7Ba%7D%29

其中a为伸缩因子,b为平移因子

任意函数f(t)的连续小波变换(CWT)为式:

eq?W_%7Bf%7D%28a%2Cb%29%3D%5Cleft%20%7C%20a%20%5Cright%20%7C%5E%7B-%5Cfrac%7B1%7D%7B2%7D%7D%5Cint%20f%28t%29%5Cpsi%20%28%5Cfrac%7Bt-b%7D%7Ba%7D%29dt

所以说,连续小波变换是f(t)→Wf(a,b)的映射。

对小波基函数增加约束条件eq?C_%7B%5Cpsi%20%7D%3D%5Cint%20%5Cfrac%7B%5Cleft%20%7C%5Cpsi%20%28t%29%20%5Cright%20%7C%5E%7B2%7D%7D%7Bt%7Ddt%3C%5Cinfty

就可以由Wf(a,b)逆变换得到f(t),其逆变换为式:

eq?f%28t%29%3D%5Cfrac%7B1%7D%7BC_%7B%5Cpsi%20%7D%7D%5Cint%20%5Cint%20%5Cfrac%7B1%7D%7Ba%5E%7B2%7D%7DW_%7Bf%7D%28a%2Cb%29%5Cpsi%20%28%5Cfrac%7Bt-b%7D%7Ba%7D%29dadb

4.2.5.4基于小波变换的多尺度空间能量分布特征提取方法(介绍)

应用小波分析技术,可以把信号在各频率波段中的特征提取出来,基于小波变换的多尺度空间能量分布特征提取方法是对信号进行频带分析,再分别计算所得的各个频带的能量作为特征向量。

信号f(t)的二进小波分解可表示为式:

eq?f%28t%29%3DA%5E%7Bj%7D+%5Csum%20D%5E%7Bj%7D

其中,A是近似信号,为低频部分。D是细节信号,为高频部分。

信号的总能量为式:

eq?E%3DEA_%7Bj%7D+%5Csum%20ED_%7Bj%7D

选择第j层的近似信号和各层的细节信号的能量作为特征,构造特征向量,即

eq?F%3D%5BEA_%7Bj%7D%2CED_%7B1%7D%2CED_%7B2%7D%2C...%2CED_%7Bj%7D%5D

利用小波变换可以对声波信号进行特征提取,提取出可以代表声波信号的向量数据,即完成从声波信号到特征向量数据的变换。

在Python中,SciPy本身提供了一些信号处理函数。而更好的信号处理库是PyWavelets,我们可以使用PyWavelets库进行小波变换,提取特征等工作。

pip install PyWavelets

import pywt
import numpy as np

# 示例信号f(t),这里我们创建一个合成信号
t = np.linspace(0, 1, 200, endpoint=False)
f_t = np.sin(2 * np.pi * 5 * t) + np.sin(2 * np.pi * 10 * t)

# 选择小波基和分解层级
wavelet = 'db1'  # 使用Daubechies小波基
level = 3  # 分解层级

# 进行二进小波分解
coeffs = pywt.wavedec(f_t, wavelet, level=level)

# 计算近似信号和细节信号的能量
energies = []
for coeff in coeffs:
    energy = np.sum(coeff ** 2)
    energies.append(energy)

# 特征向量是近似信号和各层细节信号的能量
feature_vector = np.array(energies)

# 打印特征向量
print("特征向量(近似信号和各层细节信号的能量):")
print(feature_vector)

4.3数据归约

在大数据集上进行复杂的数据分析和挖掘需要很长时间。数据归约就是产生更小且保持原数据完整性的新数据集。归约后将提高效率。

4.3.1属性归约

属性归约是通过属性合并从而创建新的属性维度。或者直接删除不相关的属性来减少数据维数。

反正是压缩数据维数

4.3.1.1属性归约使用方法

4.3.1.1.1合并属性

将旧属性合并为新属性

[A1,A2...An,B1,B2...Bm,C1,C2,Cy]

[A,B,C]

4.3.1.1.2逐步向前选择

从空属性集合开始,以原属性集合作为参考,选择当前最优属性添加到属性子集中

[A1,A2,...,A7]

[]→[A1]→[A1,A3]→[A1,A3,A7]

4.3.1.1.3逐步向后删除

和向前完全相反

4.3.1.1.4决策树归纳

利用决策树归纳方法对初始数据进行分类归纳学习。没有出现在决策树上的属性就是无关属性。可以删除。

4.3.1.1.5主成分分析

用较少的变量去解释原始数据中的大部分变量,即将许多相关性很高的变量转化成彼此相互独立或不相关的变量。

4.3.1.2主成分分析

主成分分析(PCA)是一种广泛应用于连续属性数据降维的技术。以下是PCA的计算步骤,以及如何在Python中利用scikit-learn库实现这一过程的专业描述:

1.初始化数据矩阵:设定原始变量X1, X2, …, Xp的n次观测数据矩阵,记为X。该矩阵的结构可表示为:

X = \begin{pmatrix} x_{11} & x_{12} & \cdots & x_{1p} \\ x_{21} & x_{22} & \cdots & x_{2p} \\ \vdots & \vdots & \ddots & \vdots \\ x_{n1} & x_{n2} & \cdots & x_{np} \end{pmatrix}

2.数据标准化:对数据矩阵进行中心标准化处理。此步骤旨在消除不同量纲和量级的影响,使得各变量在分析中具有同等的重要性。标准化后的数据矩阵仍记为X。

3.计算相关系数矩阵:基于标准化后的数据矩阵,求解相关系数矩阵R,其表达式为:

R = \frac{1}{n-1}XX^T

Python中实现主成分分析的示例流程:

from sklearn.decomposition import PCA

# 初始化PCA模型
pca = PCA(n_components=None, copy=True, whiten=False)

# 参数解释:
# n_components:指定保留的主成分个数,即降维后的特征维度。
# copy:布尔值,指示是否复制原始数据。
# whiten:布尔值,是否进行白化处理,使得各特征具有相同的方差。

# 拟合数据
pca.fit(data)

# 获取模型的特征向量
components = pca.components_

# 获取各主成分的方差解释比例
explained_variance_ratio = pca.explained_variance_ratio_

4.3.2数值归约

数据归约有两种主要的方法,有参数方法和无参数方法。其中有参数方法讲求一个数据的模型来评估数据,这样保存时,只需要保存一个模型就能说明。无参数方法就是需要存放实际数据,不过是根据一些方法使用较少的数据来代表所有数据。

4.3.2.1直方图

使用直方图,就是说,直方图可以用来表示一个类数值的多少,也可以表示在一个范围内数值的多少。如在一个案例中,直方图可以显示从22-30这八个数字各出现了多少个。也可以显示22~30这个范围内出现了多少数字(即通过范围规定压缩数据维度)。

4.3.2.2聚类

聚类技术将数据元组视为对象,将对象划分为簇,规则是使一个簇中的元素彼此相似而与其他簇中的对象相异。

4.3.2.3抽样

用比原始数据小得多的随机样本(数据中的子集)来表示原始数据。操作方法如下:

4.3.2.3.1s个样本无放回简单随机抽样

从数据集D中n个元组中抽取s个样本,被抽取的概率均为1/N

4.3.2.3.2s个样本有放回简单随机抽样

不同于43231的是,抽取记录之后又放回

4.3.2.3.3聚类抽样

将D中数据放入m个不同的簇,得到s个簇的简单随机抽样。

4.3.2.3.4分层抽样

先分层,再随机抽样

4.3.2.4参数回归

对数线性模型:

eq?lnm%3D%5Cbeta%20_%7B0%7D+%5Cbeta%20_%7B1%7Dx_%7B1%7D+...+%5Cbeta%20_%7Bk%7Dx_%7Bk%7D

4.4Python主要数据预处理函数

interpolate - 插值函数

scipy.interpolate 是SciPy库的一个子模块,它提供了多种插值方法,适用于一维和多维数据的插值。以下是使用该模块的示例:

from scipy.interpolate import interp1d, splrep, splev

# 对于一维数据插值
f = interp1d(x, y, kind='linear')  # 线性插值
f = interp1d(x, y, kind='cubic')   # 三次样条插值

# 对于样条插值
tck = splrep(x, y)
y_new = splev(x_new, tck)
unique - 去重函数

numpy.unique 是NumPy库的一个函数,用于找出数组中的唯一元素并返回排序后的结果。

import numpy as np

unique_elements = np.unique(D)
isnull 和 notnull - 空值检测

这两个函数用于检测Pandas DataFrame或Series中的空值。

import pandas as pd

# 检测空值
null_values = D.isnull()

# 检测非空值
non_null_values = D.notnull()
random - 随机数生成

numpy.random 是NumPy库的一个子模块,提供了生成各种随机数的函数。

import numpy as np

# 生成均匀分布的随机矩阵
uniform_matrix = np.random.rand(k, m, n)

# 生成标准正态分布的随机矩阵
normal_matrix = np.random.randn(k, m, n)
PCA - 主成分分析

主成分分析(PCA)是一种统计方法,它通过正交变换将一组可能相关的变量转换为一组线性不相关的变量,称为主成分。

from sklearn.decomposition import PCA

# 初始化PCA模型
model = PCA(n_components=None)  # n_components可以指定主成分的数量

# 对数据D进行主成分分析训练
model.fit(D)

# 获取模型的各个特征向量
components = model.components_

# 获取各个成分各自的方差百分比
explained_variance_ratio = model.explained_variance_ratio_

# 获取累计方差百分比
cumulative_explained_variance = np.cumsum(explained_variance_ratio)

第五章:挖掘建模

5.1分类与预测

分类与预测是预测问题的两种主要类型。分类主要是预测分类标号(离散属性),而预测主要是建立连续值函数模型,预测给定自变量对应的因变量的值。

5.1.1实现过程

5.1.1.1分类

构造一个分类模型,输入属性值,输出对应类别。它建立在已有类标记的数据集上(有最初的例子才能有类分),也就是属于有监督学习。

5.1.1.2预测

通过两个或两个变量以上的依赖函数模型,进行预测或控制。

5.1.1.3实现过程

有两步。第一步,学习步,归纳分析“训练样本集”得到分类规则。第二步,分类步,用已知“测试样本集”评估分类规则的准确度,若可接受,则使用该模型对未知类标号待测样本进行预测。

上述为“分类模型”的实现过程。实际上“预测模型”的实现过程大同小异。

5.1.2常用的分类与预测算法

回归分析(最常用),决策树,人工神经网络(最前沿),贝叶斯网络(模糊最有效),支持向量机(被替代)

5.1.3回归分析

回归分析,按照研究方法研究的范围大致如该图:

ca00ca0965cf43e2af471fc1887fec48.jpg

 常用的回归模型:线性回归,非线性回归,Logistic回归,岭回归,主成分回归。

自因变量之间呈现直线关系,使用线性回归。

自因变量之间呈现出某种曲线关系,建立非线性回归模型。

logistic回归属于概率型非线性回归,分为二分类和多分类。对于二分类,有“是,否”两个取值,记为1,0。

5.1.3.1Logistic函数

一个二分类,记1概率为p,0概率为1-p。其优势比为p/(1-p)【odds】。

logistic变换:eq?logit%28p%29%3Dln%28%5Cfrac%7Bp%7D%7B1-p%7D%29(优势比取对数)

令logit(p)=z,则

eq?p%3D%5Cfrac%7B1%7D%7B1+e%5E%7B-z%7D%7D(这即是logistic函数)

5.1.3.2Logistic回归模型

logistic回归模型为式:

eq?ln%28%5Cfrac%7Bp%7D%7B1-p%7D%29%3D%5Cbeta%20_%7B0%7D+%5Cbeta%20_%7B1%7Dx_%7B1%7D+...+%5Cbeta%20_%7Bp%7Dx_%7Bp%7D+%5Cvarepsilon

其中β0是指自变量全部为0时,y=1与y=0之比的自然对数(ln)。

β1是指,xi变化时,xi=1与xi=0相比,y=1优势比的对数值。

5.1.3.3logistic回归建模步骤

根据目的,分析设置指标变量(因变量和自变量),收集数据,根据数据对特征(变量)再次进行筛选。

y取1的概率是p=P(y=1|x),取0的概率是1-p。用logit(p)和自变量列出线性回归方程。然后用数据拟合估计出β,得到logistic回归模型。

对模型进行检验,最基本的有正确率和混淆矩阵,以及ROC曲线,KS值等。

对正确的模型进行模型的应用。

5.1.4决策树

ID3算法→C4.5→CART算法

5.1.4.1ID3算法简介及基本原理

基于信息熵选择最佳测试属性。选择当前样本集中具有最大信息增益值的属性作为测试属性。样本集划分依据测试属性的值进行。

设S是s个数据的集合,类别属性个数为m,每个单元记为Ci,si则是类Ci的样本数。则总的信息熵为式:

eq?I%28s_%7B1%7D%2Cs_%7B2%7D%2Cs_%7B3%7D...%2Cs_%7Bm%7D%29%3D-%5Csum_%7Bi%3D1%7D%5E%7Bm%7DP_%7Bi%7Dlog_%7B2%7DP_%7Bi%7D

其中,Pi是任意样本属于Ci的概率,一般可以用si/s来估计

设属性A具有k个不同值(a1,...,ak),利用属性A将S分为k个集合(S1,...,Sk),其中Sj包含了集合S中属性A取aj值的样本。则若A为测试属性,子集Si就是从集合S生长出来的新的叶节点。设sij是子集Sj中类别Ci的样本数。

根据属性A划分样本的信息熵值为式:

eq?E%28A%29%3D%5Csum_%7Bj%3D1%7D%5E%7Bk%7D%5Cfrac%7Bs_%7B1j%7D%2Cs_%7B2j%7D%2C...%2Cs_%7Bmj%7D%7D%7Bs%7DI%28s_%7B1j%7D%2Cs_%7B2j%7D%2C...%2Cs_%7Bmj%7D%29

其中eq?I%28s_%7B1j%7D%2Cs_%7B2j%7D%2C...%2Cs_%7Bmj%7D%29%3D%5Csum_%7Bi%3D1%7D%5E%7Bm%7DP_%7Bij%7Dlog_%7B2%7DP_%7Bij%7D%2CP_%7Bij%7D%3D%5Cfrac%7Bs_%7Bij%7D%7D%7Bs_%7B1j%7D+s_%7B2j%7D+...+s_%7Bmj%7D%7D

最后,用属性A划分样本集S后所得的信息增益为式:

eq?Gain%28A%29%3DI%28s_%7B1%7D%2Cs_%7B2%7D%2C...%2Cs_%7Bm%7D%29-E%28A%29

ID3决策树算法作为一个典型的决策树学习算法,其核心是在决策树的各级节点上都用信息增益作为判断标准来进行属性的选择,使得在每个非叶节点上进行测试时,都能获得最大的类别分类增益,使分类后的数据集的熵最小。这样的处理方法使得树的平均深度较小,从而有效地提高了分类效率。

5.1.4.2ID3算法具体流程

对当前样本集合,计算所有属性的信息增益。

选择信息增益最大的属性作为测试属性,把测试属性取值相同的样本划为同一个子样本集。

直到子样本集类别属性只含有单个属性,判断其属性值并标上相应符号,否则对该样本集递归用ID3算法

实例中,所谓C类指决策者实际所要知道的(比如销量,满意度,等等决定指标),所谓A属性指C类附属可能影响C类的(比如天气,价格,服务等等影响指标)

5.1.5人工神经网络

人工神经网络是模拟生物神经网络进行信息处理的一种数学模型,它以对大脑的生理研究成果为基础。目的在于模拟大脑的某些机理与机制,实现一些特定的功能。

一般的人工神经网络有人工神经元作为基本处理单位,而它亦由输入x,输出y和权重w三个成分组成。

激活函数:

13da7916cdc24159af2fe143f4d67431.jpg

 б学习规则

设神经网络中神经元i作为输入,神经元j作为输出,它们的连接权值为wij,则对权值的修正为:

eq?%5CDelta%20w_%7Bij%7D%3D%5Ceta%20%5Cdelta%20_%7Bj%7DY_%7Bi%7D

其中η为学习率,бj=Tj-Yj为j的偏差,即输出神经元j的实际输出和教室信号之差。

误差函数

神经网络是否完成常用误差函数E来衡量,当误差函数小于某一个设定的值则停止神经网络的训练

其公式如下:

eq?E%3D%5Cfrac%7B1%7D%7B2%7D%5Csum_%7Bk%3D1%7D%5E%7BN%7D%5BY_%7Bk%7D-T_%7Bk%7D%5D%5E%7B2%7D

其中Yk为实际输出向量,Tk为期望值向量,k为训练样本数量

5.1.5.1人工神经网络算法

8ba8ff170fa941ac9bb36c447c4cc5ad.jpg

常用来实现分类和预测的人工神经网络算法见上表

 5.1.5.1.1BP神经网络

BP算法学习过程流程图:

1599483c722449d3b2cfbafa6843aa85.jpg

5.1.6分类与预测算法评价

为了对预测模型进行性能测试,需要一组没有进行预测训练过的数据集,叫做测试集。

5.1.6.1绝对误差与相对误差

Y是实际值,Ybar是预测值,E为绝对误差,则有:

E=Y-Ybar

e为相对误差,有:

eq?e%3D%5Cfrac%7BY-Ybar%7D%7BY%7D

这(E和e)是一种直观的表示误差的方法,也是一种直观的判断性能的方法。

5.1.6.2平均绝对误差

eq?MAE%3D%5Cfrac%7B1%7D%7Bn%7D%5Csum_%7Bi%3D1%7D%5E%7Bn%7D%5Cleft%20%7C%20E_%7Bi%7D%20%5Cright%20%7C%3D%5Cfrac%7B1%7D%7Bn%7D%5Csum_%7Bi%3D1%7D%5E%7Bn%7D%5Cleft%20%7C%20Y_%7Bi%7D-Ybar_%7Bi%7D%20%5Cright%20%7C

在该式子中,MAE表示平均绝对误差

5.1.6.3均方误差

eq?MSE%3D%5Cfrac%7B1%7D%7Bn%7D%5Csum_%7Bi%3D1%7D%5E%7Bn%7D%28E_%7Bi%7D%29%5E%7B2%7D%3D%5Cfrac%7B1%7D%7Bn%7D%5Csum_%7Bi%3D1%7D%5E%7Bn%7D%28Y_%7Bi%7D-Ybar_%7Bi%7D%29%5E%7B2%7D

5.1.6.4均方根误差

eq?RMSE%3D%5Csqrt%7B%5Cfrac%7B1%7D%7Bn%7D%5Csum_%7Bi%3D1%7D%5E%7Bn%7D%28E_%7Bi%7D%29%5E%7B2%7D%7D%3D%5Csqrt%7B%5Cfrac%7B1%7D%7Bn%7D%5Csum_%7Bi%3D1%7D%5E%7Bn%7D%28Y_%7Bi%7D-Ybar_%7Bi%7D%29%5E%7B2%7D%7D

其中,最佳拟合情况为RMSE=0

5.1.6.5平均绝对百分误差

Y_%7Bi%7D%5Cright%20%7C

一般认为MAPE小于10时,预测精度较高

5.1.6.6Kappa统计

Kappa统计主要比较两个或多个观测者对同一事物,或是同一个观测者两次或多次对同一事物观测结果是否一致。

Kappa取值在区间【-1,1】

Kappa=1,说明两次判断的结果完全一致

Kappa=-1,说明两次判断的结果完全不一致

Kappa=0说明两次判断的结果是机遇造成的

Kappa<0,说明一致程度比机遇造成的还差,即它在偶然中的一致性在实际中并无意义

Kappa>0,说明有意义,越大说明一致性越好。

Kappa≥0.75,说明已经取得相当满意的一致程度

Kappa<0.4,说明一致程度还不够

5.1.6.7识别准确率

识别准确率公式如下:

eq?Accuracy%3D%5Cfrac%7BTP&plus;TN%7D%7BTP&plus;TN&plus;FP&plus;FN%7D

其中,TP为“正确地肯定表示【正确肯定】的分类数”

TN为“正确地否定表示【正确否定】地分类数”

FP为“错误地肯定表示【错误肯定】的分类数”

FN为“错误地否定表示【错误否定】的分类数”

5.1.6.8识别精确率

eq?Precision%3D%5Cfrac%7BTP%7D%7BTP&plus;FP%7D*100%

5.1.6.9反馈率

eq?Recall%3D%5Cfrac%7BTP%7D%7BTP&plus;FN%7D*100%

5.1.6.10ROC曲线

受试者工作特性曲线(ROC),是一种非常有效的模型评价方法,其将灵敏度设在纵轴,特异性设在横轴,就可得出ROC曲线。该曲线下积分面积大小与每种方法优劣密切相关,其值越接近1说明算法效果越好。

5.1.6.11混淆矩阵

假设对于N类模式的分类任务,识别数据集D包括T0个样本,每类模式分别含有Ti个数据。采用某种识别算法构造分类器C,cmij表示【第i类模式被分类器C判断成第j类模式的数据】占【第i类模式样本总数】的百分率。则可得到N*N维混淆矩阵CM(C,D)如下:

eq?%5Cbegin%7Bbmatrix%7D%20cm_%7B11%7D%20cm_%7B12%7D%20...%20cm_%7B1j%7D%20cm_%7B1N%7D%20%5C%5C%20cm_%7B21%7D%20cm_%7B22%7D%20...%20cm_%7B2j%7D%20cm_%7B2N%7D%20%5C%5C%20...%20...%20...%20...%20...%20%5C%5C%20cm_%7Bi1%7D%20cm_%7Bi2%7D%20...%20cm_%7Bij%7D%20cm_%7BiN%7D%5C%5C%20...................%20%5C%5C%20cm_%7BN1%7D%20cm_%7BN2%7D%20...%20cm_%7BNj%7D%20cm_%7BNN%7D%20%5Cend%7Bbmatrix%7D

则可知其对角线各元素表示为各模式能够被分类器C正确识别的百分率。T_%7B0%7D%3D1-R_%7BA%7D

非对角线则是发生错误判断的百分率。

则正确识别率:eq?R_%7Bi%7D%3Dcm_%7Bii%7D

平均正确识别率:T_%7B0%7D

各模式错误识别率:eq?W_%7Bi%7D%3D%5Csum_%7Bj%3D1%2Cj%5Cneq%20i%7D%5E%7BN%7Dcm_%7Bij%7D%3D1-cm_%7Bii%7D%3D1-R_%7Bi%7D

平均错误识别率:T_%7B0%7D%3D1-R_%7BA%7D

5.1.7Python分类预测模型特点

常见的分类预测模型见图:

44e7d2ac0f2b4811a95efa494bd94164.jpg

 5.2聚类分析

5.2.1常用聚类分析算法

聚类分析是在没有给定划分类别的情况下,根据数据相似度进行样本分组的一种方法。

聚类是一种非监督的学习算法,即建立在无类标记数据上。

常用聚类算法如图:

e7d27b01c79a4cf5a3d15c51cf08bde5.jpg

 5.2.2K-means聚类算法

该算法是典型的基于距离的非层次聚类算法,在最小化误差函数的基础上将数据划分为K类,采用距离作为相似性的评价指标,即认为两个对象距离越近,相似度越大。

5.2.2.1算法过程

从n个样本数据中随机选取k个对象作为初始的聚类中心

分别计算每个样本到各个聚类中心的距离,将对象分配到距离最近的聚类中

分配完后,重新计算k个聚类的中心

与前一次的k个中心进行比较,可以迭代,若质心不变化则停止并输出聚类结果。

对于连续数据,聚类中心取簇的均值,对于分类变量,可以使用K-众数方法。

5.2.2.2数据类型与相似度的度量

5.2.2.2.1连续属性

对于连续属性,要先对各属性值进行零-均值规范,再进行距离计算。一般需要度量三个距离,即样本之间距离,和样本与簇距离,簇与簇距离。

设样本到簇中心距离为d(ei,x),簇与簇距离为d(ei,ej)

设有p个属性表示n个样本的数据矩阵eq?%5Cbegin%7Bbmatrix%7D%20x_%7B11%7D%26...%20%26x_%7B1p%7D%20%5C%5C%20...%26%20%26...%20%5C%5C%20x_%7Bn1%7D%26%20%26%20x_%7Bnp%7D%20%5Cend%7Bbmatrix%7D

欧几里得距离:

eq?d%28i%2Cj%29%3D%5Csqrt%7B%28x_%7Bi1%7D-x_%7Bj1%7D%29%5E%7B2%7D&plus;%28x_%7Bi2%7D-x_%7Bj2%7D%29%5E%7B2%7D&plus;...&plus;%28x_%7Bip%7D-x_%7Bjp%7D%29%5E%7B2%7D%7D

曼哈顿距离:

eq?d%28i%2Cj%29%3D%5Cleft%20%7C%20x_%7Bi1%7D-x_%7Bj1%7D%20%5Cright%20%7C&plus;%5Cleft%20%7C%20x_%7Bi2%7D-x_%7Bj2%7D%20%5Cright%20%7C&plus;...&plus;%5Cleft%20%7C%20x_%7Bip%7D-x_%7Bjp%7D%20%5Cright%20%7C

闵可夫斯基距离:

eq?d%28i%2Cj%29%3D%5Csqrt%5Bq%5D%7B%7D%7B%28x_%7Bi1%7D-x_%7Bj1%7D%29%5E%7Bq%7D&plus;%28x_%7Bi2%7D-x_%7Bj2%7D%29%5E%7Bq%7D&plus;...&plus;%28x_%7Bip%7D-x_%7Bjp%7D%29%5E%7Bq%7D%7D

易知曼哈顿和欧几里得是闵可夫斯基的特例。

5.2.2.2.2文档数据

先将数据整理成文档一词矩阵格式

57c21c0c2a874cdeb53dc6e8003e2214.jpg

 则两个文档相似度计算公式如下:

eq?d%28i%2Cj%29%3Dcos%28i%2Cj%29%3D%5Cfrac%7B%5Cvec%7Bi%7D*%5Cvec%7Bj%7D%7D%7B%5Cleft%20%7C%20%5Cvec%7Bi%7D%20%5Cright%20%7C%5Cleft%20%7C%20%5Cvec%7Bj%7D%20%5Cright%20%7C%7D

5.2.2.3目标函数

SSE作为度量聚类质量指标,越小越好。

连续属性sse:

eq?SSE%3D%5Csum_%7Bi%3D1%7D%5E%7BK%7D%5Csum_%7Bx%5Cin%20E_%7Bi%7D%7D%5E%7B%7Ddist%28e_%7Bi%7D%2Cx%29%5E%7B2%7D

文档数据sse:

eq?SSE%3D%5Csum_%7Bi%3D1%7D%5E%7BK%7D%5Csum_%7Bx%5Cin%20E_%7Bi%7D%7D%5E%7B%7Dcos%28e_%7Bi%7D%2Cx%29%5E%7B2%7D

其中,簇Ei的中心ei:

eq?e_%7Bi%7D%3D%5Cfrac%7B1%7D%7Bn_%7Bi%7D%7D%5Csum_%7Bx%5Cin%20E_%7Bi%7D%7D%5E%7B%7Dx

以上其中,K为聚类簇个数,ei为聚类中心,Ei为簇i,n为数据集中的样本数,x为样本,ni为Ei中的样本数。

5.2.3聚类分析算法评价

5.2.3.1purity评价法

eq?purity%28X%2CY%29%3D%5Cfrac%7B1%7D%7Bn%7D%5Csum_%7Bk%7D%5E%7B%7Dmax%5Cleft%20%7C%20x_%7Bk%7D%5Ccap%20y_%7Bk%7D%20%5Cright%20%7C

其中xk表示第k个聚类集合,yi表示第i个聚类对象,n表叔被聚类集合对象的总数。

5.2.3.2RI评价法

eq?RI%3D%5Cfrac%7BR&plus;W%7D%7BR&plus;M&plus;D&plus;W%7D

其中R是正确聚类,W是正确分离,M是错误聚类,D是错误分离

5.2.3.3F值评价法

eq?F_%7B%5Calpha%20%7D%3D%5Cfrac%7B%281&plus;%5Calpha%20%5E%7B2%7D%29pr%7D%7B%5Calpha%20%5E%7B2%7Dp&plus;r%7D

其中p=eq?%5Cfrac%7BR%7D%7BR&plus;M%7D ,r=eq?%5Cfrac%7BR%7D%7BR&plus;D%7D

p就是准确率,r就是召回率

5.2.4Python主要聚类分析算法

19e1703cc24e470d8c7b3ab01c131799.jpg

聚类结果可视化工具-TSNE

5.3关联规则

关联规则分析也称为购物篮分析,即它最早是为了发现购买了面包的客户有没有关联会购买牛奶,如果有,而且面包作为前置,降低面包价格,增加牛奶价格,超市利润就会增加。

5.3.1常用关联规则算法

cbab7da178eb4e748f87abe83bc80375.jpg

 这里重点讲Apriori算法

5.3.2Apriori算法

5.3.2.1关联规则和频繁项集

5.3.2.1.1关联规则的一般形式

项集A,B同时发生的概率,这叫做关联规则支持度,公式如下:

eq?Support%28A%5CRightarrow%20B%29%3DP%28A%5Ccup%20B%29

项集A发生,则B发生的概率是关联规则的置信度,公式如下:

eq?Confidence%28A%5CRightarrow%20B%29%3DP%28B%7CA%29

5.3.2.1.2最小支持度和最小置信度

这两者皆是用户和专家定义的一个值,则在上供述计算得到结果中同时满足最小支持度和最小置信度的规则称为强规则。

5.3.2.1.3项集

即项的集合,包含k个项的项集就是k项集。项集的出现频率是所有包含项集的事务计数,又称作绝对支持度或支持度计数。若I的相对支持度满足最小支持度阈值,则称I是频繁项集,频繁k项集通常记作Lk

5.3.2.1.4支持度计数

A的支持度计数表示事务数据集中包含项集A的事务个数。

有支持度和置信度公式:

eq?Support%3D%20%5Cfrac%7B%5Csigma%28A%5Ccup%20B%29%20%7D%7BN%7D

eq?Confidence%28A%5CRightarrow%20B%29%3D%5Cfrac%7B%5Csigma%20%28A%5Ccup%20B%29%7D%7B%5Csigma%20%28A%29%7D

只需要得到所有事务个数,A,B和A∪B的支持度计数σ[即得到σ(A)和σ(B),然后就得到σ(A+B)即N,最后得到σ(A∪B)],就可以判断强弱规则。

5.3.2.2Apriori算法:使用候选产生频繁项集

Apriori算法的主要思想是找出存在于事物数据集中最大的频繁项集,再利用得到的最大频繁项集与预先设定的最小置信度阈值生成强关联规则

5.3.2.2.1Apriori的性质

5.3.2.2.2Apriori算法实现的两个过程

①找出所有的频繁项集(即支持度大于等于给定的最小支持度阈值的项集),在此过程中连接步和剪枝步互相融合,最终得到最大频繁项集Lk

所谓连接步,目的是找到K项集:对最小支持度阈值,分别对1项候选集C1,剔除小于该阈值的项集得到1项频繁集L1,再由L1自身连接产生2项候选集C2,满足约束条件的项集得到2项频繁集L2,再由L2与L1连接产生C3,再产生L3,循环下去,得到最大频繁集Lk

所谓剪枝步,即紧接着连接步,在产生Ck的过程中起到减小搜索空间的目的,由于Ck是(由连接步可知)由Lk-1与L1连接产生的,根据Apriori的性质,频繁项集的所有非空子集也必须是频繁项集,所以不满足该性质的项集将不会存在于Ck中,该过程就是剪枝。

②由频繁项集产生强关联规则,如果这些规则满足了预定的最小置信度阈值,那么就说挖掘出了强关联规则。

5.4时序模式

运用实例:基于菜品历史销售数据做好餐饮销售预测,以便减少菜品脱销现象。等等等等,需要利用历史数据进行未来预测的场所,可以看作是基于时间序列的数据预测。

5.4.1时间序列算法

常用时间序列模型如图:

7aa0aeb788b04fb5961123c22dec6ed0.jpg

f9ccc21c7b7f46cc93fd44dd03c3db13.jpg

5.4.2时间序列的预处理

拿到一个观察值序列后,首先要对它的纯随机性和平稳性进行检验,这称为序列的预处理。而根据检验结果可以将序列分成不同的类型,根据类型会采取不同的分析方法。

纯随机序列(白噪声序列),即序列各项之间没有任何相关关系,即一种随机波动,这是没有信息可提取的平稳序列,可以终止对该序列的分析。

平稳非白噪声序列,它的均值和方差是常数,通常是建立一个线性模型来拟合该序列的发展。ARMA模型是最常用的平稳序列拟合模型。

非平稳序列,它的均值和方差均不稳定,一般将其转化为平稳序列。若经过差分运算后具备平稳性,则称为差分平稳序列,可以使用ARIMA模型进行分析。

5.4.2.1平稳性检验

5.4.2.1.1平稳时间序列的定义

①对于随机变量X,有其均值μ,方差σ²,对于两个随机变量X,Y,又有其协方差cov(X,Y)=E【(X-μx)(Y-μy)】和相关系数ρ(X,Y)=cov(X,Y)/σxσy

②对于时间序列{Xt},序列值Xt是一个随机变量,它就会有μt和σt。它有自协方差函数γ(t,s)【t和s是时间序列{Xt}的序列值Xt和Xs】=E【(Xt-μt)(Xs-μs)】,有自相关函数ρ(t,s)=cov(t,s)/σtσs。  它衡量的是同一事件在不同时期之间的相关程度,也就是过去对现在及未来的影响。

③若Xt在某一常数附近波动且波动范围有限,并且延迟k期的自协方差和自相关系数是相等的,则称{Xt}是平稳序列

5.4.2.1.2平稳性的检验

检验有两种方法,图检验(时序图,自相关图)和构造检验统计量检验(单位根)

①时序图检验

时序图显示平稳序列值始终在一个常熟附近随机波动,且波动范围有界。如果有明显的趋势性或周期性,则通常不是平稳序列。

②自相关图检验

平稳序列具有短期相关性,表明只有附近的序列值对自身影响较大,间隔越远对现值的影响越小。即随着延迟期数k的增加,ρk会比较快地衰减趋向于0,并在零附近随机波动,与此同时,非平稳序列的系数衰减通常比较缓慢。

③单位根检验

指检验序列中是否存在单位根,存在单位根就是非平稳时间序列了。

5.4.2.2纯随机性检验

纯随机序列,理论是各序列值不会有任何相关,实际上的纯随机序列,自相关系数不会绝对为零,但很接近,并在零附近随机波动。

对纯随机序列检验也称为白噪声检验,一般是构造检验统计量来检验序列的纯随机性。常用的有Q统计量和LB统计量。由样本各延迟期数的自相关函数可以计算得到检验统计量,然后计算出对应的p值,如果p值明显大于显著性水平α,则表示该序列不能拒绝纯随机的原假设。

5.4.3平稳时间序列分析

5.4.3.1AR模型

eq?x_%7Bt%7D%3D%5Cphi%20_%7B0%7D&plus;%5Cphi%20_%7B1%7Dx_%7Bt-1%7D&plus;%5Cphi%20_%7B2%7Dx_%7Bt-2%7D&plus;...&plus;%5Cphi%20_%7Bp%7Dx_%7Bt-p%7D&plus;%5Cvarepsilon%20_%7Bt%7D

具有上式结构的模型称为p阶自回归模型,简记为AR(p)

即t时刻属随机变量Xt的实际取值xt,是前p期xt-1,...,xt-p的多元线性回归。误差项是当期的随机干扰εt

其均值符合式eq?%5Cmu%20%3D%5Cfrac%7B%5Cphi%20_%7B0%7D%7D%7B1-%5Cphi%20_%7B1%7D-%5Cphi%20_%7B2%7D-...-%5Cphi%20_%7Bp%7D%7D

AR(p)模型方差有界,等于常数。

其自相关系数ACF满足式子:eq?%5Crho%20_%7Bk%7D%3D%5Crho%20%28t%2Ct-k%29%3D%5Cfrac%7Bcov%28X_%7Bt%7D%2CX_%7Bt-k%7D%29%7D%7B%5Csigma%20_%7Bt%7D%5Csigma%20_%7Bt-k%7D%7D,它虽然呈指数衰退,但不会在k大于某个值时恒等于0,即表明其具有拖尾性。

其偏自相关系数PACF,对于一平稳模型而言,求出ρk并不意味着得到了Xt和Xt-k之间单纯的相关关系,因为其中见还会受到k-1个随机变量的影响,所以它实际不纯,故需要引入PACF,即为了单纯测度Xt与Xt-k的相关关系。s

5.4.3.2MA模型

eq?x_%7Bt%7D%3D%5Cmu&plus;%5Cvarepsilon%20_%7Bt%7D-%5Ctheta%20_%7B1%7D%5Cvarepsilon%20_%7Bt-2%7D-...-%5Ctheta%20_%7Bq%7D%5Cvarepsilon%20_%7Bt-q%7D

此即为q阶移动平均模型,即MA(q)

该模型认为xt主要受过去q期误差项的影响。

5.4.3.3ARMA模型

eq?x_%7Bt%7D%3D%5Cphi%20_%7B0%7D&plus;%5Cphi%20_%7B1%7Dx_%7Bt-1%7D&plus;%5Cphi%20_%7B2%7Dx_%7Bt-2%7D&plus;...&plus;%5Cphi%20_%7Bp%7Dx_%7Bt-p%7D&plus;%5Cvarepsilon%20_%7Bt%7D&plus;%5Cmu&plus;%5Cvarepsilon%20_%7Bt%7D-%5Ctheta%20_%7B1%7D%5Cvarepsilon%20_%7Bt-2%7D-...-%5Ctheta%20_%7Bq%7D%5Cvarepsilon%20_%7Bt-q%7D

由公式,显而易见。

特别的,q=0时,是AR模型,当p=0时,时MA模型。

5.4.3.4平稳时间序列建模

某个时间序列经过预处理,判定为平稳非白噪声序列时,就可以用ARMA模型进行建模,计算出其自相关系数和偏自相关系数,再由AR(p),MA(q)和ARMA(p,q)模型的自相关系数和偏自相关系数的性质,选择合适的模型。

通过自相关系数和偏自相关系数识别模型的原则:

73b406979d6740a1b23aecf18dc12a20.jpg

5.4.4非平稳时间序列分析

非平稳时间序列的分析方法可以分为确定性因素分解的时序分析和随机时序分析两大类。

确定性因素分解的方法将所有序列的变化都归结为四个因素(长期趋势,季节变动,循环变动和随机波动)。其中长期趋势和季节变动的规律性信息通常比较容易提取,而由随机因素导致的波动则非常难以确定和分析,对随机信息浪费严重,会导致模型拟合精度不够理想。

所以,随机时序分析法就是为了弥补上面的不足,根据时间序列的不同特点,它可以建立的模型有ARIMA模型,残差自回归模型,季节模型,异方差模型等。

5.4.4.1差分运算

①p阶差分

相距一期的两个序列值之间的减法运算称为1阶差分运算。

②k步差分

相距k期的两个序列值之间的减法运算称为k步差分运算

5.4.4.2ARIMA模型

差分运算具有强大的确定性信息提取能力。而差分后的差分平稳序列可以使用ARMA模型进行拟合,所以ARIMA模型实际上就是差分运算与ARMA模型的组合。

下面是差分平稳时间序列建模步骤:

①检验序列的平稳性(5.4.2.1.2)→非平稳序列

②对原始序列进行一阶差分,并进行平稳性和白噪声检验,即一阶差分后再进行一次①和白噪声检验(5.4.2.2)→平稳非白噪声序列

③对一阶差分之后的平稳非白噪声序列拟合ARMA模型(5.4.3.4)→

其中,具体步骤包括模型定阶(即定p和q,使用方法有人为识别法,有相对最优模型识别法),拟合模型分析(模型检验)

④ARIMA模型预测

5.4.5Python主要时序模式算法

Python实现时序模式的主要库是StatsModels,算法主要是ARIMA模型,当然,再进行建模前,需要进行一系列判别操作,主要包括平稳性检验,白噪声检验,是否差分,AIC和BIC指标值,模型定阶,最后再做预测。与此相关的函数如图所示:

bc2085d8f68c40d6ab71774dd6bf157f.jpg

5.5离群点检测

在日常事物中,可能会遇到一些“异常问题”,比如检测是否有异常值出现,可以通过离群点检测解决。

5.5.1离群点的成因及类型

5.5.1.1离群点的成因

数据来源于不同的类,自然变异,数据测量和收集误差

5.5.1.2离群点的类型

大致分类如图:

da91b87690b44097abddecaf72e80d66.jpg

5.5.2离群点检测方法

常用检测方法如图所示:

dadca5e84d1845348f8f032db8d0c300.jpg

30966cc8524e4ddcacebf8b614c3c887.jpg

其中,基于统计模型的离群点检测方法需要满足统计学原理。基于邻近度的离群点检测方法比统计学方法更容易使用。基于密度的离群点检测与邻近度密切相关。下面重点介绍统计模型和聚类的离群点检测方法

5.5.3基于模型的离群点检测方法

5.5.3.1一元正态分布中的离群点检测

先判断随机变量密度函数是否符合正态分布。则有对应正态分布的3σ原则可以判断一个点是否为离群点。

5.5.3.2混合模型的离群点检测

混合是一种特殊的统计模型,即使用若干统计分布对数据建模,每个分布对应一个簇,而每个分部的参数提供对应簇的描述,通常用中心和发散描述。其产生过程为:给定几个类型相同但参数不同的分布,随机选取一个分布并由它产生一个对象,重复该过程m次,其中m是对象的个数。

假定有K个分布,m个对象。i对应个对象,j对应个分布。P(xi|aj)表示i对象来自j分布的概率(a是该分布的参数,代表这个分布),“选取第j个分布产生一个对象”的概率由权值wj给定。则对象X的概率如式:

eq?P%28x%7CA%29%3D%5Csum_%7Bj%3D1%7D%5E%7BK%7Dw_%7Bj%7DP_%7Bj%7D%28x%7C%5Ctheta%20_%7Bj%7D%29

如果对象以独立的方式产生,整个对象集的概率是每个个体对象xi的概率的乘积,公式如下:

eq?P%28X%7Ca%29%3D%5Cprod_%7Bi%3D1%7D%5E%7Bm%7DP%28x_%7Bi%7D%7Ca%29%3D%5Cprod_%7Bi%3D1%7D%5E%7Bm%7D%5Csum_%7Bj%3D1%7D%5E%7BK%7Dw_%7Bj%7DP_%7Bj%7D%28x%7Ca_%7Bj%7D%29

就此,混合模型给出具体对象属于特定簇(分布)的概率。

这里给出一个离群点检验常用的方法:
设U为包含来自两个概率分布的数据对象,其中M为正常数据对象的分布,N为离群点对象的分布,则U公式为:

eq?U%28x%29%3D%281-%5Clambda%20%29M%28x%29&plus;%5Clambda%20N%28x%29

其中x是一个数据对象。λ为给出离群点的期望比例。

根据混合模型公式eq?P%28x%7CA%29%3D%5Csum_%7Bj%3D1%7D%5E%7BK%7Dw_%7Bj%7DP_%7Bj%7D%28x%7C%5Ctheta%20_%7Bj%7D%29推导出整个数据集的似然和对数似然:

eq?L_%7Bt%7D%28U%29%3D%5Cprod_%7Bx_%7Bi%7D%5Cin%20U%7D%5E%7B%7DP_%7BU%7D%28x_%7Bi%7D%29%3D%5Cbegin%7BBmatrix%7D%20%28%281-%5Clambda%20%29%5E%7BM_%7Bt%7D%7D%5Cprod_%7Bx_%7Bi%7D%5Cin%20M_%7Bi%7D%7D%5E%7B%7DP_%7BM_%7Bi%7D%7D%28x_%7Bi%7D%29%29%20%5Cend%7BBmatrix%7D%20%5Cbegin%7BBmatrix%7D%20%5Clambda%20%5E%7BN_%7Bt%7D%7D%5Cprod_%7Bx_%7B%5Cin%20N_%7Bi%7D%7D%7D%5E%7B%7DP_%7BN_%7Bi%7D%7D%28x_%7Bi%7D%29%20%5Cend%7BBmatrix%7D

eq?lnL_%7Bt%7D%28U%29%3D%5Cleft%20%7C%20M_%7Bt%7D%20%5Cright%20%7Cln%281-%5Clambda%20%29&plus;%5Csum_%7Bx_%7Bi%7D%5Cin%20M_%7Bi%7D%7D%5E%7B%7DlnP_%7BM_%7Bi%7D%7D%28x_%7Bi%7D%29&plus;%5Cleft%20%7C%20N_%7Bi%7D%20%5Cright%20%7Cln%5Clambda%20&plus;%5Csum_%7Bx_%7Bi%7D%5Cin%20N_%7Bi%7D%7D%5E%7B%7DlnP_%7BN_%7Bi%7D%7D%28x_%7Bi%7D%29

5.5.4基于聚类的离群点检测方法

5.5.4.1丢弃远离其他簇的小簇

即丢弃小于某个最小阈值的所有簇。使用这个方法对簇的个数选择敏感度高,且很难将离群点得分附加到对象上。

5.5.4.2基于原型的聚类

首先聚类所有对象,然后评估对象属于簇的程度,如果剔除一个对象导致该目标显著改进(聚类目标),则可以将该对象视为离群点。

诊断步骤如下:

①进行聚类

②计算个对象到其质心的距离

③计算各对象到其质心的相对距离

④与给定的阈值相比较,如果距离大于该阈值,则称为离群点。

为了解决离群点影响聚类结果的问题,可以使用:对象聚类,删除离群点,对象再次聚类等方法。

另外一种方法:

先取不能很好拟合到任何簇的特殊对象,代表潜在的离群点,它们被分进同一个集里,然后在集中的对象被测试,如果它们中有的强属于一个簇,则从该集合中剔除。剩下的,在聚类过程结束时还在该集合中的点就是离群点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值