码迷,mamicode.com
首页 > 其他好文 > 详细

挖掘建模

时间:2019-04-16 01:19:20      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:建立   变量   类别   最小   离群点检测   数据   岭回归   需要   数据表示   

分类与预测

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

常用的分类与预测算法

算法名称 算法简介
回归分析 回归分析是确定预测属性(数值型)与其他变量间相互依赖的定量关系最常用的统计学方法。
包括线性回归,非线性回归,Logistic回归,岭回归,主成分回归,偏最小二乘回归等模型
决策树 决策树采用自顶向下的递归方式,在内部节点进行属性值的比较,并根据不同的属性值从该节点向下分支,最终得到的叶节点是学习划分的类
人工神经网络 人工神经网络是一种模仿大脑神经网络结构和功能而建立的信息处理系统,表示神经网络的输入与输出变量之间关系的模型
贝叶斯网络 贝叶斯网络又称信度网络,是Bayes方法的扩展,是目前不确定知识表达和推理领域最有效的理论模型之一
支持向量机是一种通过某种非线性映射,把低维的非线性可分转化为高维的线性可分,在高维空间进行线性分析的算法

回归分析

技术图片

回归模型名称 适用条件 算法描述
线性回归 因变量与自变量是线性关系 对一个或多个自变量和因变量之间的线性关系进行建模,可用最小二乘法求解模型参数
非线性回归 因变量与自变量之间不是线性关系 对一个或多个自变量和因变量之间的非线性关系进行建模。如果非线性关系可以通过简单的函数变换转化成线性关系,用线性回归的思想求解;如果不能转化,用非线性最小二乘方法求解
Logistics回归 因变量一般有1和0(是否)两种取值 是广义线性回归模型的特例,利用Logistic函数将因变量的取值范围控制在0和1之间,表示取值为1的概率
岭回归 参与建模的自变量之间具有多重共线性 是一种改进最小二乘估计的方法
主成分回归 参与建模的自变量之间具有多重共线性 主成分回归是根据主成分分析的思想提出来的,是对最小二乘的一种改进,它是参数估计的一种有偏估计。可以消除自变量之间的多重共线性

递归特征消除的主要思想是反复的构建模型(如SVM或者回归模型)然后选出最好的(或者最差的)的特征,把选出来的特征放到一边,然后在剩余的特征上重复这个过程,直到遍历所有特征。

稳定性选择时一种基于二次抽样和选择算法相结合较新的方法,选择算法可以是回归、SVM或其他类似的方法。它的主要思想是在不同的数据子集和特征子集上运行特征选择算法,不断重复,最终汇总特征选择结果。

决策树

决策树是一种树状结构,每一个叶节点对应着一个分类,非叶节点对应着某个属性上的划分,根据样本在属性上的不同取值将其划分成若干个子集。

决策树算法 算法描述
ID3算法 其核心是在决策树的各级节点上,使用信息增益方法作为属性的选择标准,来帮助确定生成每个节点时所采用的合适属性
C4.5算法 C4.5决策树生成算法相对于ID3算法的重要改进是使用信息增益率来选择节点属性。C4.5算法可以克服ID3算法存在的不足:ID3算法只适用于离散的描述属性,而C4.5算法既能处理离散的描述属性,也可以处理连续的描述属性
CART算法 CART决策树是一种十分有效的非参数分类和回归方法,通过构建树,修剪树,评估树来构构建一个二叉树。当终结点是连续变量时,该树为回归树;当终结点是分类变量,该树为分类树

由于ID3决策树采用了信心增益作为选择测试属性的标准,会偏向于选择取值较多的,即所谓高度分支属性,而这类属性并不一定是最优的属性。

人工神经网络

技术图片

技术图片

使用人工神经网络模型需要确定网络连接的拓扑结构、神经元的特征和学习规则等。目前已经有40种人工神经网络模型,常用的用来实现分类和预测的人工神经网络算法如下:

算法名称 算法描述
BP神经网络 是一种按误差逆传播算法训练的多层前馈网络,学习算法是误差矫正学习算法,是目前应用最广泛的神经网络模型之一
是基于梯度下降法和牛顿法结合的多层前馈网络,特点:迭代次数少,收敛速度快,精确度高
RBF径向基神经网络 RBF网络能够以任意精度逼近任意连续函数,从输入层到隐含层的变换是非线性的,而从隐含层到输出层的变换是线性的,特别适合与解决分类问题
FNN模糊神经网络 FNN模糊神经网络是具有模糊权系数或者输入信号是模糊量的神经网络,是模糊系统与神经网络相结合的产物,它汇聚了神经网络与模糊系统的优点,集联想、识别、自适应及模糊信息处理于一体
GMDH神经网络 GMDH网络也称为多项式网络,它是前馈网络中常用的一种用于预测的神经网络。它的特点是网络结构不固定,而且在训练过程中不断改变
ANFIS自适应神经网络 神经网络镶嵌在一个全部模糊的结构之中,在不知不觉中想训练数据学习,自动产生、修正并高度概括出最佳的输入与输出变量的隶属函数以及模糊规则;另外,神经网络的各层结构与参数也都具有了明确的、易于理解的物理意义

分类与预测算法评价

绝对误差与相对误差

Y是实际值,\(\hat{Y}\)表示预测值,则称E为绝对误差。
\[ E=Y-\hat{Y} \]
e为相对误差,计算公式如下
\[ e=\frac{Y-\hat{Y}}{Y} \]

平均绝对误差

平均绝对误差(MAE)定义如下:
\[ MAE=\frac{1}{n}\sum_{i=1}^n|E_i|=\frac{1}{n}\sum_{i=1}^n|Y_i-\hat{Y_i}| \]

均方误差

MSE定义如下:
\[ MSE=\frac{1}{n}\sum_{i=1}^nE_i^2=\frac{1}{n}\sum_{i=1}^n(Y_i-\hat{Y_i})^2 \]
均方误差是预测误差平方之和的平均数,由于对误差E进行了平方,加强了数值大的误差在指标中的作用,从而提高了这个指标的灵敏性。均方误差是误差分析的综合指标之一

均方根误差

RMSE是对MSE求平方根。均方误差代表了预测值的离散程度,也称为标准误差,最佳拟合情况为RMSE=0。

平均绝对百分误差

MAPE定义如下
\[ MAPE=\frac{1}{n}\sum_{i=1}^n|E_i/Y_i|=\frac{1}{n}\sum_{i=1}^n|(Y_i-\hat{Y_i})/Y_i| \]
一般认为MAPE小于10时,预测精确度较高。

Kappa统计

Kappa统计时比较两个或多个观测者对同一事物,或观测者对同一事物的两侧或多次观察结果是否一致,以由于机遇造成的一致性和实际观测的一致性之间的差别大小作为评价基础的统计指标。Kappa统计量和加权Kappa统计量不仅可以用于无序和有序分类变量资料的一致性、重现性检验,而且能给出一个反应一致性大小的“量”值。

Kappa的取值在[-1, +1]之间,其值的大小均有不同意义。

  • Kappa = +1 说明两次判断的结果完全一致
  • Kappa = -1 说明两次判断的结果完全不一致
  • Kappa = 0 说明两次判断的结果是机遇造成
  • Kappa < 0 说明一致性程度比机遇造成的还差,两次检查结果很不一致,在实际应用中无意义
  • Kappa > 0 说明有意义,Kappa越大,说明一致性越好
  • Kappa >= 0.75 说明已经取得相当满意的一致程序
  • Kappa < 0.4 说明一致性程度不够

识别准确度

识别准确度定义(Accuracy)如下:
\[ Accuracy=\frac{TP+FN}{TP+TN+FP+FN}*100\% \]

识别精确率

\[ Precision = \frac{TP}{TP+FP}*100\% \]

召回率

\[ Recall = \frac{TP}{TP+TN}*100\% \]

ROC曲线

受试者工作特性(ROC)曲线是一种非常有效的模型评价方法,可为选定临界值给出定量提示。将灵敏度设在纵轴,1-特异性设在横轴,就可得出ROC曲线图。该曲线下的积分面积大小与每种方法优劣密切相关,反映分类器正确分类的统计概率,其值越接近1说明算法效果越好。

混淆矩阵

混淆矩阵是模式识别领域一种常用的表达形式。它描绘样本数据的真实属性与识别结果类型之间的关系,是评价分类器性能的一种常用方法。

Python分类预测模型的特点

模型 模型特点 位于
逻辑回归 比较基础的模型,很多时候是简单有效的选择 sklearn.linear_model
SVM 强大的模型,可以用来回归、预测、分类等,而根据选取不同的核函数。模型可以是线性的或非线性的 sklearn.svm
决策树 基于“分类讨论,逐步细化”思想的分类模型,模型直观,易解释 sklearn.tree
随机森林 思想跟决策树类似,精度通常比决策树要高,缺点是由于随机性,丧失了决策树的可解释性 sklearn.ensemble
朴素贝叶斯 基于概率思想的简单有效的分类模型,能够给出容易理解的概率解释 sklearn.naive_bayes
神经网络 具有强大的拟合能力,可以用于拟合、分类等,它有很多增强版本,如递归神经网络、卷积神经网络、自编码器等 Keras

聚类分析

常用

类别 包括的主要算法
划分(分裂)方法 K-Means算法(K-平均)、K-MEDOIDS算法(K-中心点)、CLARANS算法(基于选择的算法)
层次分析方法 BIRCH算法(平衡迭代规约和聚类)、CURE算法(代表点聚类)、CHAMELEON算法(动态模型)
基于密度的方法 DBSCAN算法(基于高密度连接区域)、DENCLUE算法(密度分布函数)、OPTICS算法(对象排序识别)
基于网格的方法 STING算法(统计信息网络)、CLIOUE算法(聚类高维空间)、WAVE-CLUSTER算法(小波变换)
基于模型的方法 统计学方法、神经网络方法

技术图片

目标函数

使用误差平方和(SSE)作为度量聚类质量的目标函数。

聚类分析算法评价

  1. purity评价法:是极为简单的一种聚类评价方法,只需要计算正确聚类数占总数的比例
  2. RI评价法:是一种用排列组合原理来对聚类进行评价的手段,类似混淆矩阵
  3. F值评价法

python主要聚类算法

对象名 函数功能 所属工具箱
KMeans K均值聚类 sklearn.cluster
AffinityPropagation 吸引力传播聚类,几乎优于所有其他方法,不需要指定聚类数,但运行效率较低 sklearn.cluster
MeanShift 均值漂移聚类算法 sklearn.cluster
SpectralClustering 谱聚类,具有效果比K均值好,速度比K均值快的特点 sklearn.cluster
AgglomerativeClustering 层次聚类,给出一棵聚类层次树 sklearn.cluster
DBSCAN 具有噪声的基于密度的聚类 sklearn.cluster
BIRCH 综合的层次聚类算法,可以处理大规模数据的聚类 sklearn.cluster

这些不同模型的使用方法是大同小异的,基本都是先用对应的函数建立模型,然后用.fit()方法训练模型,训练好之后,用.label_方法给出样本数据的标签,或者用.predict()方法预测新的输入的标签。

此外,Scipy 库中也提供了一个聚类子库scipy.cluster。

TSNE--聚类结果可视化

TSNE提供了一种有效的数据降维方式,可以在2维或者3维空间中展示结果。

关联规则

常用算法

算法名称 算法描述
Apriori 关联规则最常用也是最经典的挖掘频繁集的算法,其核心思想是通过连接产生候选项及其支持度然后通过剪枝生成频繁项集
FP-Tree 针对Apriori算法的固定多次扫描事务数据集的缺陷,提出的不产生候选频繁项集的方法。Apriori和FP-Tree都是寻找频繁项集的算法
Eclat算法 Eclat算法是一种深度优先算法,采用垂直数据表示形式,在概念格理论的基础上利用基于前缀的等价关系将搜索空间划分为较小的子空间
灰色关联法 分析和确定各因素之间的影响程度或是若干个子因素(子序列)对主因素(母序列)的贡献度而进行的一种分析方法

时序模式

常用时间序列模型

技术图片

时间序列预处理

拿到一个观察值序列后,首先要对它的纯随机性平稳性进行检验,这两个重要的检验称为序列的预处理。

  1. 对于纯随机序列,又称白噪声序列,序列的各项之间没有任何相关关系,可以终止对该序列的分析。白噪声序列是没有信息可提取的平稳序列。
  2. 平稳非白噪声序列,它的均值和方差是常数,已经有一套非常成熟的平稳序列的建模方法。通常是建立一个线性模型来拟合该序列的发展,ARMA模型是最常用的平稳序列拟合模型。
  3. 非平稳序列,均值和方差不稳定,处理方法一般将其转变为平稳序列进行处理,如果一个时间序列经差分运算后具有平稳性,为差分平稳序列,可以使用ARIMA模型进行分析。

平稳性检验

自协方差函数自相关系数衡量同一个事件在两个不同时刻之间的相关程度,就是度量自己过去的行为对自己现在的影响。

  1. 时序图检验。均值和方差都是常数,时序图显示序列始终在一个常数附件随机波动,波动的范围有界
  2. 自相关图检验。平稳序列具有短期相关性,近期序列想不间隔较远的对现在影响更明显。随着延迟期数k的增加,自相关系数较快衰减趋向于零,并在零附近随机波动,而非平稳序列衰减比较慢
  3. 单位根检验。检验序列中是否存在单位根,存在就是非平稳序列

纯随机性检验

白噪声检验,一般是构造统计量,常用的有Q统计量、LB统计量

平稳时间序列分析

ARMA模型全称是自回归移动平均模型,是最常用的拟合平稳序列的模型。细分为AR模型、MA模型和ARMA模型。都是多元线性回归模型。

技术图片

技术图片

非平稳时间序列分析

实际上,绝大多数的序列都是非平稳的。分析方法分为:确定性因素分解的时序分析和随机时序分析两大类。

确定性因素分解的方法把所有序列的变化都归为4个因素(长期趋势、季节变动、循环变动和随机波动)的综合影响,其中随机因素导致的波动非常难确定和分析,对随机信息浪费严重,会导致模型拟合精度不理想。

随机时序分析法的发展就是为了弥补确定性因素分解方法的不足,随机时序分析可以建立的模型有ARIMA模型、残差自回归模型、季节模型、异方差模型等。

差分运算

  • p阶差分:相距一期的两个序列值之间的减法运算称为1阶差分运算
  • k步差分:相距k期的两个序列值之间的减法运算称为k步差分运算

ARIMA模型

差分运算具有请打的确定性信息提取能力,许多非平稳序列差分后显示出平稳序列的性质,称非平稳序列的差分平稳序列。ARIMA模型的实质就是差分运算与ARMA模型的组合。

技术图片

python主要时序模式算法

python实现时序模式的主要库是StatsModels,算法主要是ARIMA模型,使用时需要:平稳性检验、白噪声检验、是否差分、AIC和BIC指标值、模型定阶,最后再做预测。

函数名 函数功能 所属工具箱
acf() 计算自相关系数 statsmodels.tsa.stattools
plot_act() 画自相关系数 statsmodels.graphics.tsaplots
pacf() 计算偏自相关系数 statsmodels.tsa.stattools
plot_pacf() 画偏自相关系数 statsmodels.graphics.tsaplots
adfuller() 对观测值序列进行单位根检验 statsmodels.tsa.stattools
diff() 对观测值序列进行差分计算 Pandas对象自带的方法
ARIMA() 创建一个ARIMA时序模型 statsmodels.tsa.arima_model
summary()或summary2() 给出一份ARIMA模型的报告 ARIMA模型对象自带的方法
aic/bic/hqic 计算ARIMA模型的AIC/BIC/HQIC指标值 ARIMA模型对象自带的变量
forecast() 应用构建的时序模型进行预测 ARIMA模型对象自带的方法
acorr_ljungbox() Ljung-Box检验,检验是够为白噪声 statsmodels.tsa.diagnoistic

离群点检测

离群点大致分类

分类标准 分类名称 分类描述
从数据范围 全局离群点和局部离群点 从整体上看,某些对象没有离群特征,但是从局部来看,却显示了一定的离群性
从数据类型 数值型离群点和分类型离群点 这是以数据集的属性类型进行划分的
一维离群点和多维离群点 一个对象可能有一个或多个属性

离群点检测方法

方法 方法描述 方法评估
基于统计 大部分的基于统计的离群点检测方法是构建一个概率分布模型,并计算对象符合该模型的概率,把具有概率的对象视为离群点 基于统计模型的离群点检测方法的前提是必须知道数据服从什么分布;对于高维数据,检验效果可能很差
基于邻近度 通常可以在数据对象之间定义邻近度量,把远离大部分点的对象视为离群点 简单,二维或三维的数据可以做散点图观察;大数据集不适用;对参数选择敏感;具有全局阈值,不能处理有不同密度区域的数据集
基于密度 考虑数据集可能存在不同密度区域这一事实,从基于密度的观点分析,离群点是在低密度区域中的对象。一个对象的离群点得分是该对象周围密度的逆 给出了对象是离群点的定量度量,并且即使数据具有不同的区域也能够很好的处理;大数据集不适用;参数选择是困难的
基于聚类 一种利用聚类检测离群点的方法是丢弃远离其他簇的小簇;另一种更系统的方法,首先聚类所有对象,然后评估对象属于簇的程度(离群点得分) 基于聚类技术来发现离群点可能是高度有效的;聚类算法产生的簇的质量对该算法产生的离群点的质量影响非常大

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

通过估计概率分布的参数来建立一个数据模型。如果一个数据对象不能很好的同该模型拟合,即如果它很可能不服从该分布,则它是一个离群点。

  1. 一元正态分布的离群点检测,根据置信区间判断
  2. 混合模型的离群点检测。混合模型是一种特殊的模型,它使用若干统计分布对数据建模,每一个分布对应一个簇,而每个分布的参数提供对应簇的描述,通常用中心和发散描述。

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

丢弃远离其他簇的小簇

该过程可以简化为丢弃小于某个阈值的所有簇。这种防范对簇的个数高度敏感,很难将离群点得分附加到对象上。

基于原型的聚类

首先聚类所有对象,然后评估对象属于簇的程度(离群点得分),在这种方法中,可以用对象到它的簇中心的距离来度量属于簇的程度。特别的,如果删除一个对象导致该目标的显著改进,则可以将该对象视为离群点。例如,在K均值算法汇总,删除远离其相关簇中心的对象能够显著改进该簇的误差平方和(SSE)。

挖掘建模

标签:建立   变量   类别   最小   离群点检测   数据   岭回归   需要   数据表示   

原文地址:https://www.cnblogs.com/51zone/p/10714194.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!