数据挖掘_数据挖掘实验 - CSDN
数据挖掘 订阅
数据挖掘是指从大量的数据中通过算法搜索隐藏于其中信息的过程。数据挖掘通常与计算机科学有关,并通过统计、在线分析处理、情报检索、机器学习、专家系统(依靠过去的经验法则)和模式识别等诸多方法来实现上述目标。 [1] 展开全文
数据挖掘是指从大量的数据中通过算法搜索隐藏于其中信息的过程。数据挖掘通常与计算机科学有关,并通过统计、在线分析处理、情报检索、机器学习、专家系统(依靠过去的经验法则)和模式识别等诸多方法来实现上述目标。 [1]
信息
外文名
Data mining
相关领域
人工智能、数据库
别    名
资料探勘、数据采矿
中文名
数据挖掘
应用领域
情报检索、数据分析、模式识别等
所属学科
计算机科学
数据挖掘简介
需要是发明之母。近年来,数据挖掘引起了信息产业界的极大关注,其主要原因是存在大量数据,可以广泛使用,并且迫切需要将这些数据转换成有用的信息和知识。获取的信息和知识可以广泛用于各种应用,包括商务管理,生产控制,市场分析,工程设计和科学探索等。 [2]  数据挖掘是人工智能和数据库领域研究的热点问题,所谓数据挖掘是指从数据库的大量数据中揭示出隐含的、先前未知的并有潜在价值的信息的非平凡过程。数据挖掘是一种决策支持过程,它主要基于人工智能、机器学习、模式识别、统计学、数据库、可视化技术等,高度自动化地分析企业的数据,作出归纳性的推理,从中挖掘出潜在的模式,帮助决策者调整市场策略,减少风险,作出正确的决策。知识发现过程由以下三个阶段组成:①数据准备;②数据挖掘;③结果表达和解释。数据挖掘可以与用户或知识库交互。 [1]  数据挖掘是通过分析每个数据,从大量数据中寻找其规律的技术,主要有数据准备、规律寻找和规律表示三个步骤。数据准备是从相关的数据源中选取所需的数据并整合成用于数据挖掘的数据集;规律寻找是用某种方法将数据集所含的规律找出来;规律表示是尽可能以用户可理解的方式(如可视化)将找出的规律表示出来。数据挖掘的任务有关联分析、聚类分析、分类分析、异常分析、特异群组分析和演变分析等。 [1]  近年来,数据挖掘引起了信息产业界的极大关注,其主要原因是存在大量数据,可以广泛使用,并且迫切需要将这些数据转换成有用的信息和知识。获取的信息和知识可以广泛用于各种应用,包括商务管理、生产控制、市场分析、工程设计和科学探索等。数据挖掘利用了来自如下一些领域的思想:①来自统计学的抽样、估计和假设检验;②人工智能、模式识别和机器学习的搜索算法、建模技术和学习理论。数据挖掘也迅速地接纳了来自其他领域的思想,这些领域包括最优化、进化计算、信息论、信号处理、可视化和信息检索。一些其他领域也起到重要的支撑作用。特别地,需要数据库系统提供有效的存储、索引和查询处理支持。源于高性能(并行)计算的技术在处理海量数据集方面常常是重要的。分布式技术也能帮助处理海量数据,并且当数据不能集中到一起处理时更是至关重要。 [1] 
收起全文
精华内容
参与话题
  • Python数据挖掘简易入门

    千人学习 2020-07-22 15:52:55
    本课程为Python数据挖掘方向的入门课程,课程主要以真实数据为基础,详细介绍数据挖掘入门的流程和使用Python实现pandas与numpy在数据挖掘方向的运用,并深入学习如何运用scikit-learn调用常用的数据挖掘算法解决...
  • 数据挖掘与数据分析

    万次阅读 多人点赞 2019-12-13 10:21:13
    一、数据挖掘和数据分析概述 数据挖掘和数据分析都是从数据中提取一些有价值的信息,二者有很多联系,但是二者的侧重点和实现手法有所区分。 数据挖掘和数据分析的不同之处: 1、在应用工具上,数据挖掘一般要通过...

    一、数据挖掘和数据分析概述

    数据挖掘和数据分析都是从数据中提取一些有价值的信息,二者有很多联系,但是二者的侧重点和实现手法有所区分。 
    数据挖掘和数据分析的不同之处: 
    1、在应用工具上,数据挖掘一般要通过自己的编程来实现需要掌握编程语言;而数据分析更多的是借助现有的分析工具进行。 
    2、在行业知识方面,数据分析要求对所从事的行业有比较深的了解和理解,并且能够将数据与自身的业务紧密结合起来;而数据挖掘不需要有太多的行业的专业知识。 
    3、交叉学科方面,数据分析需要结合统计学、营销学、心理学以及金融、政治等方面进行综合分析;数据挖掘更多的是注重技术层面的结合以及数学和计算机的集合 
    数据挖掘和数据分析的相似之处: 
    1、数据挖掘和数据分析都是对数据进行分析、处理等操作进而得到有价值的知识。 
    2、都需要懂统计学,懂数据处理一些常用的方法,对数据的敏感度比较好。 
    3、数据挖掘和数据分析的联系越来越紧密,很多数据分析人员开始使用编程工具进行数据分析,如SAS、R、SPSS等。而数据挖掘人员在结果表达及分析方面也会借助数据分析的手段。二者的关系的界限变得越来越模糊。

    二、数据挖掘

     

    1 数学预备知识 

    概率论:支撑整个数据挖掘算法和机器学习算法的数学基础,要熟悉常见的一些概率分布。 
    矩阵论:线性代数中对数据挖掘最有用的部分,还有一些线性空间相关知识也很重要。 
    信息论:将信息和数学紧密连接在一起并完美的表达的桥梁,需要掌握信息熵、信息增益等相关知识。 
    统计学:数据分析最早的依赖基础,通常和概率论一起应用,现在的机器学习和数据挖掘很多都是基于统计的,常见的均值、方差、协方差等都要熟练掌握。

     

    2 编程基础 

    数据挖掘需要一定的编程基础,因为要实现模型以及数据的处理很多工作都是需要程序来进行的,数据挖掘常用的编程语言如下: 
    SQL:数据库的熟练使用是任何数据挖掘人员必不可少的技能。 
    C++ :有很多的标准模板库以及机器学习模型库进行调用可以方便编程实现。 
    Python:对字符串处理有极大的优势,是解释型语言,实现简单,而且有很多开源的机器学习模型库的支持,可处理大规模数据。 
    Matlab:拥有强大的矩阵运算,也是解释型语言,有很多发展较成熟库可以直接调用,支持数据结果的可视化表示,但是处理数据量有限。 
    R:近年兴起的数据分析编程语言,数据可视化做的比较好,语法简单,学习成本很低,很多非程序设计人员都可以数量掌握。 
    Java:使用范围最广的编程语言,有很多社区进行交流,进行编程实现具有灵活高效的特点,不足之处就是实现功能的代码量较大(相对于其他数据挖掘编程语言)。 
    Scala: 一种具有面向对象风格、函数式风格、更高层的并发模型的编程语言。同时Scala是大数据处理平台Spark的实现语言。

     

    3 数据挖掘的模型知识 

    机器学习和数据挖掘是紧密相关的,要进行数据挖掘需要掌握一些机器学习所用的方法和模型知识,通过模型的训练可以得到处理数据的最优的模型。数据挖掘常用的模型如下:

     

    3.1 监督学习模型 

    就是人们常说的分类,通过已有的训练样本(即已知数据以及其对应的输出)去训练得到一个最优模型(这个模型属于某个函数的集合,最优则表示在某个评价准则下是最佳的),再利用这个模型将所有的输入映射为相应的输出,对输出进行简单的判断从而实现分类的目的,也就具有了对未知数据进行分类的能力。

     

    3.1.1决策树: 

    决策树是用于分类和预测的主要技术之一,决策树学习是以实例为基础的归纳学习算法,它着眼于从一组无次序、无规则的实例中推理出以决策树表示的分类规则。构造决策树的目的是找出属性和类别间的关系,用它来预测将来未知类别的记录的类别。它采用自顶向下的递归方式,在决策树的内部节点进行属性的比较,并根据不同属性值判断从该节点向下的分支,在决策树的叶节点得到结论。 
    主要的决策树算法有ID3、C4.5(C5.0)、CART、PUBLIC、SLIQ和SPRINT算法等。它们在选择测试属性采用的技术、生成的决策树的结构、剪枝的方法以及时刻,能否处理大数据集等方面都有各自的不同之处。

     

    3.1.2 贝叶斯方法: 

    贝叶斯(Bayes)分类算法是一类利用概率统计知识进行分类的算法,如朴素贝叶斯(Naive Bayes)算法。这些算法主要利用Bayes定理来预测一个未知类别的样本属于各个类别的可能性,选择其中可能性最大的一个类别作为该样本的最终类别。由于贝叶斯定理的成立本身需要一个很强的条件独立性假设前提,而此假设在实际情况中经常是不成立的,因而其分类准确性就会下降。为此就出现了许多降低独立性假设的贝叶斯分类算法,如TAN(Tree Augmented Native Bayes)算法,它是在贝叶斯网络结构的基础上增加属性对之间的关联来实现的。

     

    3.1.3 神经网络 

    神经网络是一种应用类似于大脑神经突触联接的结构进行信息处理的数学模型。在这种模型中,大量的节点(称”神经元”)之间相互联接构成网络,即”神经网络”,以达到处理信息的目的。神经网络通常需要进行训练,训练的过程就是网络进行学习的过程。训练改变了网络节点的连接权的值使其具有分类的功能,经过训练的网络就可用于对象的识别。目前,神经网络已有上百种不同的模型,常见的有BP神经网络、径向基RBF网络、Hopfield网络、随机神经网络(Boltzmann机)、竞争神经网络(Hamming网络,自组织映射网络)等。但是当前的神经网络仍普遍存在收敛速度慢、计算量大、训练时间长和不可解释等缺点。

     

    3.1.4 支持向量机(SVM) 

    支持向量机(SVM,Support Vector Machine)是根据统计学习理论提出的一种新的学习方法,它的最大特点是根据结构风险最小化准则,以最大化分类间隔构造最优分类超平面来提高学习机的泛化能力,较好地解决了非线性、高维数、局部极小点等问题。对于分类问题,支持向量机算法根据区域中的样本计算该区域的决策曲面,由此确定该区域中未知样本的类别。

     

    3.1.5 集成学习分类模型 

    集成学习是一种机器学习范式,它试图通过连续调用单个的学习算法,获得不同的基学习器,然后根据规则组合这些学习器来解决同一个问题,可以显著的提高学习系统的泛化能力。主要采用(加权)投票的方法组合多个基学习器,常见的算法有装袋(Bagging)、提升/推进(Boosting)、随机森林等。集成学习由于采用了投票平均的方法组合多个分类器,所以有可能减少单个分类器的误差,获得对问题空间模型更加准确的表示,从而提高分类器的分类准确度。

     

    3.1.6 其他分类学习模型 

    此外还有logistics回归模型、隐马尔科夫分类模型(HMM)、基于规则的分类模型等众多的分类模型,对于处理不同的数据、分析不同的问题,各种模型都有自己的特性和优势。

     

    3.2 无监督学习模型 

    在非监督式学习中,数据并不被特别标识,学习模型是为了推断出数据的一些内在结构,应用场景包括关联规则的学习以及聚类等。常见的聚类算法如下所示:

     

    3.2.1 K-means聚类 

    K-means算法的基本思想是初始随机给定K个簇中心,按照最邻近原则把待分类样本点分到各个簇。然后按平均法重新计算各个簇的质心,从而确定新的簇心。一直迭代,直到簇心的移动距离小于某个给定的值。

     

    3.2.2 基于密度的聚类 

    根据密度完成对象的聚类。它根据对象周围的密度(如DBSCAN)不断增长聚类。典型的基于密度方法包括:DBSCAN(Densit-based Spatial Clustering of Application with Noise):该算法通过不断生长足够高密度区域来进行聚类;它能从含有噪声的空间数据库中发现任意形状的聚类。此方法将一个聚类定义为一组“密度连接”的点集。OPTICS(Ordering Points To Identify the Clustering Structure):并不明确产生一个聚类,而是为自动交互的聚类分析计算出一个增强聚类顺序。

     

    3.2.3 层次聚类方法 

    层次聚类方法对给定的数据集进行层次的分解,直到某种条件满足为止。层次凝聚的代表是AGNES算法,层次分裂的代表是DIANA算法。具体又可分为凝聚的,分裂的两种方案。 
    凝聚的层次聚类是一种自底向上的策略,首先将每个对象作为一个簇,然后合并这些原子簇为越来越大的簇,直到所有的对象都在一个簇中,或者某个终结条件被满足,绝大多数层次聚类方法属于这一类,它们只是在簇间相似度的定义上有所不同。 
    分裂的层次聚类与凝聚的层次聚类相反,采用自顶向下的策略,它首先将所有对象置于同一个簇中,然后逐渐细分为越来越小的簇,直到每个对象自成一簇,或者达到了某个终止条件。

     

    3.2.4 谱聚类 

    谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方法——将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似,而子图间距离尽量距离较远,以达到常见的聚类的目的。其中的最优是指最优目标函数不同,可以是割边最小分割, 也可以是分割规模差不多且割边最小的分割。谱聚类能够识别任意形状的样本空间且收敛于全局最优解,其基本思想是利用样本数据的相似矩阵(拉普拉斯矩阵)进行特征分解后得到的特征向量进行聚类。 
    此外常用的聚类方法还有基于网格的聚类、模糊聚类算法、自组织神经网络SOM、基于统计学的聚类算法(COBWeb、AutoClass)等。

     

    3.3 半监督学习 
    3.3.1 半监督学习概述 

    半监督学习算法要求输入数据部分被标识,部分没有被标识,这种学习模型可以用来进行预测,但是模型首先需要学习数据的内在结构以便合理的组织数据来进行预测。应用场景包括分类和回归,算法包括一些对常用监督式学习算法的延伸,这些算法首先试图对未标识数据进行建模,在此基础上再对标识的数据进行预测。如图论推理算法(Graph Inference)或者拉普拉斯支持向量机(Laplacian SVM.)等。

     

    3.3.2 Multi-view algorithm(多视角算法) 

    一般多用于可以进行自然特征分裂的数据集中.考虑特殊情况(每个数据点表征两个特征):每一个数据点看成是两个特征的集合,然后利用协同训练(Co-training algorithm)进行处理.协同训练(co-training)算法,此类算法隐含地利用了聚类假设或流形假设,它们使用两个或多个学习器,在学习过程中,这些学习器挑选若干个置信度高的未标记示例进行相互标记,从而使得模型得以更新。

     

    3.3.3 Graph-Based Algorithms(基于图的算法) 

    基于图的算法是基于图正则化框架的半监督学习算法,此类算法直接或间接地利用了流形假设,它们通常先根据训练例及某种相似度度量建立一个图,图中结点对应了(有标记或未标记)示例,边为示例间的相似度,然后,定义所需优化的目标函数并使用决策函数在图上的光滑性作为正则化项来求取最优模型参数。

     

    **3.4 文本处理模型 
    3.4.1 分词模型** 

    分词模型主要在处理文本过程中使用,在此特指中文分词模型。中文分词算法现在一般分为三类:基于字符串匹配,基于理解,基于统计的分词。 
    基于字符串匹配分词: 
    机械分词算法。将待分的字符串与一个充分大的机器词典中的词条进行匹配。分为正向匹配和逆向匹配;最大长度匹配和最小长度匹配;单纯分词和分词与标注过程相结合的一体化方法。所以常用的有:正向最大匹配,逆向最大匹配,最少切分法。实际应用中,将机械分词作为初分手段,利用语言信息提高切分准确率。优先识别具有明显特征的词,以这些词为断点,将原字符串分为较小字符串再机械匹配,以减少匹配错误率;或将分词与词类标注结合。 
    基于理解分词: 
    分词同时进行句法语义分析等模拟人对句子的理解,包括分词子系统,句法语义系统,总控部分。总控部分协调下,分词字系统可以获得有关词,句子等的句法和语义信息对分词歧义进行判断。需要大量的语言知识信息。 
    基于统计分词: 
    相邻的字同时出现的次数越多,越有可能构成一个词语,对语料中的字组频度进行统计,不需要切词字典,但错误率很高。可以考虑:使用基本词典进行关键词分词,使用统计方法识别新词组,两者结合。

     

    3.4.2 TF-IDF模型 

    TF-IDF(term frequency–inverse document frequency)是一种用于资讯检索与资讯探勘的常用加权技术。TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜寻引擎应用,作为文件与用户查询之间相关程度的度量或评级。除了TF-IDF以外,因特网上的搜寻引擎还会使用基于连结分析的评级方法,以确定文件在搜寻结果中出现的顺序。 
    TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。TFIDF实际上是:TF * IDF,TF词频(Term Frequency),IDF反文档频率(Inverse Document Frequency)。TF表示词条在文档d中出现的频率(另一说:TF词频(Term Frequency)指的是某一个给定的词语在该文件中出现的次数)。IDF的主要思想是:如果包含词条t的文档越少,也就是n越小,IDF越大,则说明词条t具有很好的类别区分能力。如果某一类文档C中包含词条t的文档数为m,而其它类包含t的文档总数为k,显然所有包含t的文档数n=m+k,当m大的时候,n也大,按照IDF公式得到的IDF的值会小,就说明该词条t类别区分能力不强。(另一说:IDF反文档频率(Inverse Document Frequency)是指果包含词条的文档越少,IDF越大,则说明词条具有很好的类别区分能力。)但是实际上,如果一个词条在一个类的文档中频繁出现,则说明该词条能够很好代表这个类的文本的特征,这样的词条应该给它们赋予较高的权重,并选来作为该类文本的特征词以区别与其它类文档。这就是IDF的不足之处.

     

    3.4.3 LDA模型 

    LDA(Latent Dirichlet Allocation)是一种文档主题生成模型,也称为一个三层贝叶斯概率模型,包含词、主题和文档三层结构。所谓生成模型,就是说,我们认为一篇文章的每个词都是通过“以一定概率选择了某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到。文档到主题服从多项式分布,主题到词服从多项式分布。 
    LDA是一种非监督机器学习技术,可以用来识别大规模文档集(document collection)或语料库(corpus)中潜藏的主题信息。它采用了词袋(bag of words)的方法,这种方法将每一篇文档视为一个词频向量,从而将文本信息转化为了易于建模的数字信息。但是词袋方法没有考虑词与词之间的顺序,这简化了问题的复杂性,同时也为模型的改进提供了契机。每一篇文档代表了一些主题所构成的一个概率分布,而每一个主题又代表了很多单词所构成的一个概率分布。

     

    4 模型评价指标 
    4.1 模型评价概述 

    建模构建过程中会得出一系列的分析结果、模式或模型。同一个采样数据可以利用多种数据分析方法和模型进行分析,模型评价的目的之一就是从这些模型中自动找出一个最好的模型出来,另外就是要针对业务对模型进行解释和应用。 
    模型效果评价通常分两步,第一步是直接使用原来建立模型的样本数据来进行检验。假如这一步都通不过,那么所建立的决策支持信息价值就不太大了。一般来说,在这一步应得到较好的评价。这说明你确实从这批数据样本中挖掘出了符合实际的规律性。第一步通过后,第二步是另外找一批数据,已知这些数据是反映客观实际的、规律性的。这次的检验效果可能会比前一种差,差多少是要注意的,若是差到所不能容忍程度,那就要考虑第一步构建的样本数据是否具有充分的代表性,或是模型本身是否够完善。这时候可能要对前面的工作进行反思了。若这一步也得到了肯定的结果时,那所建立的数据挖掘模型应得到很好的评价了。

     

    4.2 常用的模型评价方法 
    4.2.1 预测准确率 

    预测准确率又称作精度是检索出相关文档数与检索出的文档总数的比率,衡量的是检索系统的查准率。取值在0和1之间,数值越接近1,查准率就越高。 
    计算公式:正确率 = 提取出的正确信息条数 / 提取出的信息条数

     

    4.2.2 召回率 

    召回率是指检索出的相关文档数和文档库中所有的相关文档数的比率,衡量的是检索系统的查全率。取值在0和1之间,数值越接近1,查全率就越高。 
    计算公式:召回率 = 提取出的正确信息条数 / 样本中的信息条数

     

    4.2.3 综合指标F值 

    F值为正确率和召回率的调和平均值,能够综合平衡的去表示模型的性能效果。 
    计算公式:F值 = 正确率 * 召回率 * 2 / (正确率 + 召回率)

     

    4.2.4 ROC曲线 

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

     

    4.2.5 数据相似度 

    聚类分群效果可以通过向量数据之间的相似度来衡量,向量数据之间的相似度定义为两个向量之间的距离(实时向量数据与聚类中心向量数据),距离越近则相似度越大,即该实时向量数据归为某个聚类。常用的相似度计算方法有:欧几里得距离法(Euclidean Distance)、皮尔逊相关系数法(Pearson Correlation Coefficient)、Cosine相似度和Tanimoto系数法。

     

    4.2.6 其他的模型评价方法 

    除上述的模型评价方法外,还有一些较为详细的模型评价方法。如可以用相对绝对误差、平均绝对误差、根均方差、相对平方根误差等指标来衡量。此外模型的鲁棒性和容错性以及处理数据的速度、能够处理数据的规模等都是衡量一个模型的重要指标。

    5 数据挖掘开发平台

     

    5.1 单机模型开发平台 

    直接在单机上部署数据挖掘开发环境,比如说安装mysql+python就可以搭建一个数据挖掘环境。

     

    5.2分布式集群开发平台 
    5.2.1 Hadoop集群环境 

    Hadoop 是一个通过分布式集群技术,将多个物理机或虚拟机(VMware等厂商的虚拟化技术在一个物理机上运行多个虚拟机)当作一台机器运行。基于Hadoop的数据挖掘数据挖掘一旦完成,就会生成挖掘结果即模式。

     

    5.4.2 Spark集群环境 

    Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法。 
    6 数据挖掘的开发流程 
    6.1 数据获取 
    6.2 数据清洗 
    6.3 数据变换 
    6.4 特征工程 
    6.5 模型训练 
    6.6 模型优化 
    6.7 结果分析

    三、数据分析

    相比于数据挖掘,数据分析更多在于利用一定的工具和一定的专业知识分析数据。最初的数据分析来源于统计学家和经济学家的一些理论,进而结合一定的实际应用场景解决问题。数据分析更多的是偏重于业务层次的,对于大多数非计算机相关专业人士来说,掌握一般的数据分析方法是十分有用的,入门上手也相对简单。

    1 数学和专业的预备知识

    概率论:数据分析的重要数学基础,要熟悉常见的一些概率分布。 
    统计学:数据分析最早的依赖基础,通常和概率论一起应用,数据分析要掌握常见的均值、方差、协方差等。 
    心理学:数据分析往往要结合不同的学科知识进行分析,在数据分析的过程中,分析人员往往要结合用户的心理进行结果的调整和分析。 
    专业知识:一般来说,数据分析人员是对某一特定领域进行分析,这就要求分析人员具备一定的行业的专业知识。

    2 使用数据分析软件

    SPSS:功能非常强大非常专业的数据统计软件,界面友好,输出结果美观漂亮。SPSS软件具有信息的采集、处理、分析进行全面评估和预测等功能。包含广义线性混合模型、自动线性模型、一个统计网页入口portal和直复营销direct marketing功能。 
    SAS: 是一个模块化、集成化的大型应用软件系统,由数十个专用模块构成,功能包括数据访问、数据储存及管理、应用开发、图形处理、数据分析、报告编制、运筹学方法、计量经济学与预测等等。 
    Excel:办公套件中最能胜任数据分析的软件,简单实用。 
    Sql:非计算机专业的数据分析人员要操作数据必备的数据库语言。 
    R: 近年兴起的数据分析编程语言,数据可视化做的比较好,语法简单,学习成本很低,很多非程序设计人员都可以数量掌握。

     

    3 数据分析模型选取 

    数据分析人员可以借助一些现场的分析软件进行分析,这些软件集成了一些良好的分析模型,分析人员可以根据自己的实际应用场景进行合适的模型选择。基本的分析方法有:对比分析法、分组分析法、交叉分析法、结构分析法、漏斗图分析法、综合评价分析法、因素分析法、矩阵关联分析法等。高级的分析方法有:相关分析法、回归分析法、聚类分析法、判别分析法、主成分分析法、因子分析法、对应分析法、时间序列等。

     

    4 分析结果展示 

    数据分析的结果通过一些可视化图形或者报表形式进行展示能够增强对分析结果的理解。常用的的分析结果展示方法有: 
    图表展示:用一些柱状图、饼图、盒图等进行展示。 
    曲线展示:运用走势曲线或者ROC曲线进行展示。 
    文字展示:通过语言文字描述进行结果的分析展示,但是不够直观。

     

    5 数据分析的流程 

    5.1 数据获取 
    5.2 数据清洗 
    5.3 分析工具选取 
    5.4 数据分析模型选择 
    5.5 数据处理 
    5.6 处理结果展示 
    5.7 结果数据分析


    DrugAI
    展开全文
  • 数据挖掘

    万次阅读 多人点赞 2018-05-06 11:06:32
    数据挖掘(Data Mining,DM)又称数据库中的知识发现(Knowledge Discover in Database,KDD) 数据挖掘又称数据库中的知识发现(Knowledge Discover in Database,KDD),是目前人工智能和数据库领域研究的热点...

    数据挖掘(Data Mining,DM)又称数据库中的知识发现(Knowledge Discover in Database,KDD)

      数据挖掘又称数据库中的知识发现(Knowledge Discover in Database,KDD),是目前人工智能和数据库领域研究的热点问题,所谓数据挖掘是指从数据库的大量数据中揭示出隐含的、先前未知的并有潜在价值的信息的非平凡过程。数据挖掘是一种决策支持过程,它主要基于人工智能、机器学习、模式识别、统计学、数据库、可视化技术等,高度自动化地分析企业的数据,做出归纳性的推理,从中挖掘出潜在的模式,帮助决策者调整市场策略,减少风险,做出正确的决策。
    数据挖掘概述

    数据挖掘的定义

      1.技术上的定义及含义

      数据挖掘(Data Mining)就是从大量的、不完全的、有噪声的、模糊的、随机的实际应用数据中,提取隐含在其中的、人们事先不知道的、但又是潜在有用的信息和知识的过程。这个定义包括好几层含义:数据源必须是真实的、大量的、含噪声的;发现的是用户感兴趣的知识;发现的知识要可接受、可理解、可运用;并不要求发现放之四海皆准的知识,仅支持特定的发现问题。

      与数据挖掘相近的同义词有数据融合人工智能商务智能模式识别机器学习知识发现数据分析决策支持等。

      ----何为知识?从广义上理解,数据、信息也是知识的表现形式,但是人们更把概念、规则、模式、规律和约束等看作知识。人们把数据看作是形成知识的源泉,好像从矿石中采矿或淘金一样。原始数据可以是结构化的,如关系数据库中的数据;也可以是半结构化的,如文本、图形和图像数据;甚至是分布在网络上的异构型数据。发现知识的方法可以是数学的,也可以是非数学的;可以是演绎的,也可以是归纳的。发现的知识可以被用于信息管理,查询优化,决策支持和过程控制等,还可以用于数据自身的维护。因此,数据挖掘是一门交叉学科,它把人们对数据的应用从低层次的简单查询,提升到从数据中挖掘知识,提供决策支持。在这种需求牵引下,汇聚了不同领域的研究者,尤其是数据库技术、人工智能技术、数理统计、可视化技术、并行计算等方面的学者和工程技术人员,投身到数据挖掘这一新兴的研究领域,形成新的技术热点。

      这里所说的知识发现,不是要求发现放之四海而皆准的真理,也不是要去发现崭新的自然科学定理和纯数学公式,更不是什么机器定理证明。实际上,所有发现的知识都是相对的,是有特定前提和约束条件,面向特定领域的,同时还要能够易于被用户理解。最好能用自然语言表达所发现的结果。

      2.商业角度的定义

      数据挖掘是一种新的商业信息处理技术,其主要特点是对商业数据库中的大量业务数据进行抽取、转换、分析和其他模型化处理,从中提取辅助商业决策的关键性数据。

      简而言之,数据挖掘其实是一类深层次的数据分析方法。数据分析本身已经有很多年的历史,只不过在过去数据收集和分析的目的是用于科学研究,另外,由于当时计算能力的限制,对大数据量进行分析的复杂数据分析方法受到很大限制。现在,由于各行业业务自动化的实现,商业领域产生了大量的业务数据,这些数据不再是为了分析的目的而收集的,而是由于纯机会的(Opportunistic)商业运作而产生。分析这些数据也不再是单纯为了研究的需要,更主要是为商业决策提供真正有价值的信息,进而获得利润。但所有企业面临的一个共同问题是:企业数据量非常大,而其中真正有价值的信息却很少,因此从大量的数据中经过深层分析,获得有利于商业运作、提高竞争力的信息,就像从矿石中淘金一样,数据挖掘也因此而得名。

      因此,数据挖掘可以描述为:按企业既定业务目标,对大量的企业数据进行探索和分析,揭示隐藏的、未知的或验证已知的规律性,并进一步将其模型化的先进有效的方法。

    数据挖掘常用的方法

      利用数据挖掘进行数据分析常用的方法主要有分类、回归分析、聚类、关联规则、特征、变化和偏差分析、Web页挖掘等, 它们分别从不同的角度对数据进行挖掘。

      ①分类。分类是找出数据库中一组数据对象的共同特点并按照分类模式将其划分为不同的类,其目的是通过分类模型,将数据库中的数据项映射到某个给定的类别。它可以应用到客户的分类、客户的属性和特征分析、客户满意度分析、客户的购买趋势预测等,如一个汽车零售商将客户按照对汽车的喜好划分成不同的类,这样营销人员就可以将新型汽车的广告手册直接邮寄到有这种喜好的客户手中,从而大大增加了商业机会。

      ②回归分析。回归分析方法反映的是事务数据库中属性值在时间上的特征,产生一个将数据项映射到一个实值预测变量的函数,发现变量或属性间的依赖关系,其主要研究问题包括数据序列的趋势特征、数据序列的预测以及数据间的相关关系等。它可以应用到市场营销的各个方面,如客户寻求、保持和预防客户流失活动、产品生命周期分析、销售趋势预测及有针对性的促销活动等。

      ③聚类。聚类分析是把一组数据按照相似性和差异性分为几个类别,其目的是使得属于同一类别的数据间的相似性尽可能大,不同类别中的数据间的相似性尽可能小。它可以应用到客户群体的分类、客户背景分析、客户购买趋势预测、市场的细分等。

      ④关联规则。关联规则是描述数据库中数据项之间所存在的关系的规则,即根据一个事务中某些项的出现可导出另一些项在同一事务中也出现,即隐藏在数据间的关联或相互关系。在客户关系管理中,通过对企业的客户数据库里的大量数据进行挖掘,可以从大量的记录中发现有趣的关联关系,找出影响市场营销效果的关键因素,为产品定位、定价与定制客户群,客户寻求、细分与保持,市场营销与推销,营销风险评估和诈骗预测等决策支持提供参考依据。

      ⑤特征。特征分析是从数据库中的一组数据中提取出关于这些数据的特征式,这些特征式表达了该数据集的总体特征。如营销人员通过对客户流失因素的特征提取,可以得到导致客户流失的一系列原因和主要特征,利用这些特征可以有效地预防客户的流失。

      ⑥变化和偏差分析。偏差包括很大一类潜在有趣的知识,如分类中的反常实例,模式的例外,观察结果对期望的偏差等,其目的是寻找观察结果与参照量之间有意义的差别。在企业危机管理及其预警中,管理者更感兴趣的是那些意外规则。意外规则的挖掘可以应用到各种异常信息的发现、分析、识别、评价和预警等方面。

      ⑦Web页挖掘。随着Internet的迅速发展及Web 的全球普及, 使得Web上的信息量无比丰富,通过对Web的挖掘,可以利用Web 的海量数据进行分析,收集政治、经济、政策、科技、金融、各种市场、竞争对手、供求信息、客户等有关的信息,集中精力分析和处理那些对企业有重大或潜在重大影响的外部环境信息和内部经营信息,并根据分析结果找出企业管理过程中出现的各种问题和可能引起危机的先兆,对这些信息进行分析和处理,以便识别、分析、评价和管理危机

    数据挖掘的功能

      数据挖掘通过预测未来趋势及行为,做出前摄的、基于知识的决策。数据挖掘的目标是从数据库中发现隐含的、有意义的知识,主要有以下五类功能。

      1、自动预测趋势和行为

      数据挖掘自动在大型数据库中寻找预测性信息,以往需要进行大量手工分析的问题如今可以迅速直接由数据本身得出结论。一个典型的例子是市场预测问题,数据挖掘使用过去有关促销的数据来寻找未来投资中回报最大的用户,其它可预测的问题包括预报破产以及认定对指定事件最可能作出反应的群体。

      2、关联分析

      数据关联是数据库中存在的一类重要的可被发现的知识。若两个或多个变量的取值之间存在某种规律性,就称为关联。关联可分为简单关联、时序关联、因果关联。关联分析的目的是找出数据库中隐藏的关联网。有时并不知道数据库中数据的关联函数,即使知道也是不确定的,因此关联分析生成的规则带有可信度。

      3、聚类

      数据库中的记录可被化分为一系列有意义的子集,即聚类。聚类增强了人们对客观现实的认识,是概念描述和偏差分析的先决条件。聚类技术主要包括传统的模式识别方法和数学分类学。80年代初,Mchalski提出了概念聚类技术牞其要点是,在划分对象时不仅考虑对象之间的距离,还要求划分出的类具有某种内涵描述,从而避免了传统技术的某些片面性。

      4、概念描述

      概念描述就是对某类对象的内涵进行描述,并概括这类对象的有关特征。概念描述分为特征性描述和区别性描述,前者描述某类对象的共同特征,后者描述不同类对象之间的区别。生成一个类的特征性描述只涉及该类对象中所有对象的共性。生成区别性描述的方法很多,如决策树方法遗传算法等。

      5、偏差检测

      数据库中的数据常有一些异常记录,从数据库中检测这些偏差很有意义。偏差包括很多潜在的知识,如分类中的反常实例、不满足规则的特例、观测结果与模型预测值的偏差、量值随时间的变化等。偏差检测的基本方法是,寻找观测结果与参照值之间有意义的差别。

    数据挖掘常用技术

      1、人工神经网络

      2、决策树

      3、遗传算法

      4、近邻算法

      5、规则推导

    数据挖掘的流程

      1、数据挖掘环境

      数据挖掘是指一个完整的过程,该过程从大型数据库中挖掘先前未知的,有效的,可实用的信息,并使用这些信息做出决策或丰富知识.   数据挖掘环境可示意如下图:

    数据挖掘环境框图.gif

      2、数据挖掘过程图

      下图描述了数据挖掘的基本过程和主要步骤

      Image:数据挖掘的基本过程和主要步骤.gif

      数据挖掘的基本过程和主要步骤

      3、数据挖掘过程工作量

      在数据挖掘中被研究的业务对象是整个过程的基础,它驱动了整个数据挖掘过程,也是检验最后结果和指引分析人员完成数据挖掘的依据和顾问.图2各步骤是按一定顺序完成的,当然整个过程中还会存在步骤间的反馈.数据挖掘的过程并不是自动的,绝大多数的工作需要人工完成.图3给出了各步骤在整个过程中的工作量之比.可以看到,60%的时间用在数据准备上,这说明了数据挖掘对数据的严格要求,而后挖掘工作仅占总工作量的10%.

      Image:数据挖掘过程工作量比例.gif

      图3数据挖掘过程工作量比例

      4、数据挖掘过程简介

      过程中各步骤的大体内容如下:

      (1). 确定业务对象

      清晰地定义出业务问题,认清数据挖掘的目的是数据挖掘的重要一步.挖掘的最后结构是不可预测的,但要探索的问题应是有预见的,为了数据挖掘而数据挖掘则带有盲目性,是不会成功的.

      (2). 数据准备

      1)、数据的选择

      搜索所有与业务对象有关的内部和外部数据信息,并从中选择出适用于数据挖掘应用的数据.

      2)、数据的预处理

      研究数据的质量,为进一步的分析作准备.并确定将要进行的挖掘操作的类型.

      3)、数据的转换

      将数据转换成一个分析模型.这个分析模型是针对挖掘算法建立的.建立一个真正适合挖掘算法的分析模型是数据挖掘成功的关键.

      (3). 数据挖掘

      对所得到的经过转换的数据进行挖掘.除了完善从选择合适的挖掘算法外,其余一切工作都能自动地完成.

      (4). 结果分析

      解释并评估结果.其使用的分析方法一般应作数据挖掘操作而定,通常会用到可视化技术.

      (5). 知识的同化

      将分析所得到的知识集成到业务信息系统的组织结构中去.

      5、数据挖掘需要的人员

      数据挖掘过程的分步实现,不同的步会需要是有不同专长的人员,他们大体可以分为三类.

      业务分析人员:要求精通业务,能够解释业务对象,并根据各业务对象确定出用于数据定义和挖掘算法的业务需求.

      数据分析人员:精通数据分析技术,并对统计学有较熟练的掌握,有能力把业务需求转化为数据挖掘的各步操作,并为每步操作选择合适的技术.

      数据管理人员:精通数据管理技术,并从数据库或数据仓库中收集数据.

      从上可见,数据挖掘是一个多种专家合作的过程,也是一个在资金上和技术上高投入的过程.这一过程要反复进行牞在反复过程中,不断地趋近事物的本质,不断地优先问题的解决方案。数据重组和细分添加和拆分记录选取数据样本可视化数据探索聚类分析神经网络、决策树数理统计、时间序列结论综合解释评价数据知识数据取样数据探索数据调整模型化评价。

    数据挖掘与传统分析方法的区别

      数据挖掘与传统的数据分析(如查询、报表、联机应用分析)的本质区别是数据挖掘是在没有明确假设的前提下去挖掘信息、发现知识.数据挖掘所得到的信息应具有先未知,有效和可实用三个特征.

      先前未知的信息是指该信息是预先未曾预料到的,既数据挖掘是要发现那些不能靠直觉发现的信息或知识,甚至是违背直觉的信息或知识,挖掘出的信息越是出乎意料,就可能越有价值.在商业应用中最典型的例子就是一家连锁店通过数据挖掘发现了小孩尿布和啤酒之间有着惊人的联系.

    数据挖掘和数据仓库

      大部分情况下,数据挖掘都要先把数据从数据仓库中拿到数据挖掘库或数据集市中(见图1)。从数据仓库中直接得到进行数据挖掘的数据有许多好处。就如我们后面会讲到的,数据仓库的数据清理和数据挖掘的数据清理差不多,如果数据在导入数据仓库时已经清理过,那很可能在做数据挖掘时就没必要在清理一次了,而且所有的数据不一致的问题都已经被你解决了。

      数据挖掘

      数据挖掘库可能是你的数据仓库的一个逻辑上的子集,而不一定非得是物理上单独的数据库。但如果你的数据仓库的计算资源已经很紧张,那你最好还是建立一个单独的数据挖掘库。

      当然为了数据挖掘你也不必非得建立一个数据仓库,数据仓库不是必需的。建立一个巨大的数据仓库,把各个不同源的数据统一在一起,解决所有的数据冲突问题,然后把所有的数据导到一个数据仓库内,是一项巨大的工程,可能要用几年的时间花上百万的钱才能完成。只是为了数据挖掘,你可以把一个或几个事务数据库导到一个只读的数据库中,就把它当作数据集市,然后在他上面进行数据挖掘。

      数据挖掘

    数据挖掘和在线分析处理(OLAP)

      一个经常问的问题是,数据挖掘和OLAP到底有何不同。下面将会解释,他们是完全不同的工具,基于的技术也大相径庭。

      OLAP是决策支持领域的一部分。传统的查询和报表工具是告诉你数据库中都有什么(what happened),OLAP则更进一步告诉你下一步会怎么样(What next)、和如果我采取这样的措施又会怎么样(What if)。用户首先建立一个假设,然后用OLAP检索数据库来验证这个假设是否正确。比如,一个分析师想找到什么原因导致了贷款拖欠,他可能先做一个初始的假定,认为低收入的人信用度也低,然后用OLAP来验证他这个假设。如果这个假设没有被证实,他可能去察看那些高负债的账户,如果还不行,他也许要把收入和负债一起考虑,一直进行下去,直到找到他想要的结果或放弃。

      也就是说,OLAP分析师是建立一系列的假设,然后通过OLAP来证实或推翻这些假设来最终得到自己的结论。OLAP分析过程在本质上是一个演绎推理的过程。但是如果分析的变量达到几十或上百个,那么再用OLAP手动分析验证这些假设将是一件非常困难和痛苦的事情。

      数据挖掘与OLAP不同的地方是,数据挖掘不是用于验证某个假定的模式(模型)的正确性,而是在数据库中自己寻找模型。他在本质上是一个归纳的过程。比如,一个用数据挖掘工具的分析师想找到引起贷款拖欠的风险因素。数据挖掘工具可能帮他找到高负债和低收入是引起这个问题的因素,甚至还可能发现一些分析师从来没有想过或试过的其他因素,比如年龄。

      数据挖掘和OLAP具有一定的互补性。在利用数据挖掘出来的结论采取行动之前,你也许要验证一下如果采取这样的行动会给公司带来什么样的影响,那么OLAP工具能回答你的这些问题。

      而且在知识发现的早期阶段,OLAP工具还有其他一些用途。可以帮你探索数据,找到哪些是对一个问题比较重要的变量,发现异常数据和互相影响的变量。这都能帮你更好的理解你的数据,加快知识发现的过程。

    数据挖掘,机器学习和统计

      数据挖掘利用了人工智能AI)和统计分析的进步所带来的好处。这两门学科都致力于模式发现和预测。

      数据挖掘不是为了替代传统的统计分析技术。相反,他是统计分析方法学的延伸和扩展。大多数的统计分析技术都基于完善的数学理论和高超的技巧,预测的准确度还是令人满意的,但对使用者的要求很高。而随着计算机计算能力的不断增强,我们有可能利用计算机强大的计算能力只通过相对简单和固定的方法完成同样的功能。

      一些新兴的技术同样在知识发现领域取得了很好的效果,如神经元网络决策树,在足够多的数据和计算能力下,他们几乎不用人的关照自动就能完成许多有价值的功能。

      数据挖掘就是利用了统计和人工智能技术的应用程序,他把这些高深复杂的技术封装起来,使人们不用自己掌握这些技术也能完成同样的功能,并且更专注于自己所要解决的问题。

    软硬件发展对数据挖掘的影响

      使数据挖掘这件事情成为可能的关键一点是计算机性能价格比的巨大进步。在过去的几年里磁盘存储器的价格几乎降低了99%,这在很大程度上改变了企业界对数据收集和存储的态度。如果每兆的价格是¥10,那存放1TB的价格是¥10,000,000,但当每兆的价格降为1毛钱时,存储同样的数据只有¥100,000!

      计算机计算能力价格的降低同样非常显著。每一代芯片的诞生都会把CPU的计算能力提高一大步。内存RAM也同样降价迅速,几年之内每兆内存的价格由几百块钱降到现在只要几块钱。通常PC都有64M内存,工作站达到了256M,拥有上G内存的服务器已经不是什么新鲜事了。

      在单个CPU计算能力大幅提升的同时,基于多个CPU的并行系统也取得了很大的进步。目前几乎所有的服务器都支持多个CPU,这些SMP服务器簇甚至能让成百上千个CPU同时工作。

      基于并行系统的数据库管理系统也给数据挖掘技术的应用带来了便利。如果你有一个庞大而复杂的数据挖掘问题要求通过访问数据库取得数据,那么效率最高的办法就是利用一个本地的并行数据库。

      所有这些都为数据挖掘的实施扫清了道路,随着时间的延续,我们相信这条道路会越来越平坦。

    数据挖掘应用

      1、数据挖掘解决的典型商业问题

      需要强调的是,数据挖掘技术从一开始就是面向应用的。目前,在很多领域,数据挖掘(data mining)都是一个很时髦的词,尤其是在如银行、电信、保险、交通、零售(如超级市场)等商业领域。数据挖掘所能解决的典型商业问题包括:数据库营销(Database Marketing)、客户群体划分(Customer Segmentation & Classification)、背景分析(Profile Analysis)、交叉销售(Cross-selling)等市场分析行为,以及客户流失性分析(Churn Analysis)、客户信用记分(Credit Scoring)、欺诈发现(Fraud Detection)等等。

      2、数据挖掘在市场营销的应用

      数据挖掘技术在企业市场营销中得到了比较普遍的应用,它是以市场营销学的市场细分原理为基础,其基本假定是“消费者过去的行为是其今后消费倾向的最好说明”。

      通过收集、加工和处理涉及消费者消费行为的大量信息,确定特定消费群体或个体的兴趣、消费习惯、消费倾向消费需求,进而推断出相应消费群体或个体下一步的消费行为,然后以此为基础,对所识别出来的消费群体进行特定内容的定向营销,这与传统的不区分消费者对象特征的大规模营销手段相比,大大节省了营销成本,提高了营销效果,从而为企业带来更多的利润。

      商业消费信息来自市场中的各种渠道。例如,每当我们用信用卡消费时,商业企业就可以在信用卡结算过程收集商业消费信息,记录下我们进行消费的时间、地点、感兴趣的商品或服务、愿意接收的价格水平和支付能力等数据;当我们在申办信用卡、办理汽车驾驶执照、填写商品保修单等其他需要填写表格的场合时,我们的个人信息就存入了相应的业务数据库;企业除了自行收集相关业务信息之外,甚至可以从其他公司或机构购买此类信息为自己所用。

      这些来自各种渠道的数据信息被组合,应用超级计算机、并行处理、神经元网络、模型化算法和其他信息处理技术手段进行处理,从中得到商家用于向特定消费群体或个体进行定向营销的决策信息。这种数据信息是如何应用的呢?举一个简单的例子,当银行通过对业务数据进行挖掘后,发现一个银行帐户持有者突然要求申请双人联合帐户时,并且确认该消费者是第一次申请联合帐户,银行会推断该用户可能要结婚了,它就会向该用户定向推销用于购买房屋、支付子女学费等长期投资业务,银行甚至可能将该信息卖给专营婚庆商品和服务的公司。数据挖掘构筑竞争优势。

      在市场经济比较发达的国家和地区,许多公司都开始在原有信息系统的基础上通过数据挖掘对业务信息进行深加工,以构筑自己的竞争优势,扩大自己的营业额。美国运通公司(American Express)有一个用于记录信用卡业务的数据库,数据量达到54亿字符,并仍在随着业务进展不断更新。运通公司通过对这些数据进行挖掘,制定了“关联结算(Relation ship Billing)优惠”的促销策略,即如果一个顾客在一个商店用运通卡购买一套时装,那么在同一个商店再买一双鞋,就可以得到比较大的折扣,这样既可以增加商店的销售量,也可以增加运通卡在该商店的使用率。再如,居住在伦敦的持卡消费者如果最近刚刚乘英国航空公司的航班去过巴黎,那么他可能会得到一个周末前往纽约的机票打折优惠卡。

      基于数据挖掘的营销,常常可以向消费者发出与其以前的消费行为相关的推销材料。卡夫(Kraft)食品公司建立了一个拥有3000万客户资料的数据库,数据库是通过收集对公司发出的优惠券等其他促销手段作出积极反应的客户和销售记录而建立起来的,卡夫公司通过数据挖掘了解特定客户的兴趣和口味,并以此为基础向他们发送特定产品的优惠券,并为他们推荐符合客户口味和健康状况的卡夫产品食谱。美国的读者文摘(Reader's Digest)出版公司运行着一个积累了40年的业务数据库,其中容纳有遍布全球的一亿多个订户的资料,数据库每天24小时连续运行,保证数据不断得到实时的更新,正是基于对客户资料数据库进行数据挖掘的优势,使读者文摘出版公司能够从通俗杂志扩展到专业杂志、书刊和声像制品的出版和发行业务,极大地扩展了自己的业务。

      基于数据挖掘的营销对我国当前的市场竞争中也很具有启发意义,我们经常可以看到繁华商业街上一些厂商对来往行人不分对象地散发大量商品宣传广告,其结果是不需要的人随手丢弃资料,而需要的人并不一定能够得到。如果搞家电维修服务的公司向在商店中刚刚购买家电的消费者邮寄维修服务广告,卖特效药品的厂商向医院特定门诊就医的病人邮寄广告,肯定会比漫无目的的营销效果要好得多。

    数据挖掘在企业危机管理中的应用

      危机管理是管理领域新出现的一个热点研究领域,它是以市场竞争中危机的出现为研究起点,分析企业危机产生的原因和过程,研究企业预防危机、应付危机、解决危机的手段和策略,以增强企业的免疫力、应变力和竞争力,使管理者能够及时准确地获取所需要的信息,迅速捕捉到企业可能发生危机的一切可能事件和先兆,进而采取有效的规避措施,在危机发生之前对其进行控制,趋利避害,从而使企业能够适应迅速变化的市场环境,保持长久的竞争优势。但是由于危机产生的原因复杂,种类繁多,许多因素难以量化,而且危机管理中带有大量不确定因素的半结构化问题和非结构化问题,很多因素由于没有历史数据和相应的统计资料,很难进行科学地计算和评估,因此需要应用其它技术和方法来加强企业的危机管理工作。

      随着计算机技术、网络技术、通讯技术、Internet技术的迅速发展和电子商务办公自动化管理信息系统、Internet 的普及等,企业业务操作流程日益自动化,企业经营过程中产生了大量的数据,这些数据和由此产生的信息是企业的宝贵财富,它如实地记录着企业经营的本质状况。但是面对如此大量的数据,传统的数据分析方法,如数据检索、统计分析等只能获得数据的表层信息,不能获得其内在的、深层次的信息,管理者面临着数据丰富而知识贫乏的困境。如何从这些数据中挖掘出对企业经营决策有用的知识是非常重要的,数据挖掘便是为适应这种需要应运而生的。

      数据挖掘是一种新的信息处理技术,其主要特点是对企业数据库中的大量业务数据进行抽取、转换、分析和其他模型化处理,从中提取辅助经营决策的关键性数据,它在企业危机管理中得到了比较普遍的应用,具体可以应用到以下几个方面。

       1.利用Web页挖掘搜集外部环境信息

      信息是危机管理的关键因素。在危机管理过程中,可以利用Web 页挖掘技术对企业外部环境信息进行收集、整理和分析,尽可能地收集政治、经济、政策、科技、金融、各种市场、竞争对手、供求信息、消费者等与企业发展有关的信息,集中精力分析处理那些对企业发展有重大或潜在重大影响的外部环境信息,抓住转瞬即逝的市场机遇,获得企业危机的先兆信息,采取有效措施规避危机,促使企业健康、持续地发展。

       2.利用数据挖掘分析企业经营信息

      利用数据挖掘技术、数据仓库技术和联机分析技术,管理者能够充分利用企业数据仓库中的海量数据进行分析,并根据分析结果找出企业经营过程中出现的各种问题和可能引起危机的先兆,如经营不善、观念滞后、产品失败战略决策失误、财务危机等内部因素引起企业人、财、物、产、供、销的相对和谐平衡体遭到重大破坏,对企业的生存、发展构成严重威胁的信息,及时做出正确的决策,调整经营战略,以适应不断变化的市场需求。

       3.利用数据挖掘识别、分析和预防危机

      危机管理的精髓在于预防。利用数据挖掘技术对企业经营的各方面的风险、威胁和危险进行识别和分析,如产品质量和责任、环境、健康和人身安全、财务、营销、自然灾害、经营欺诈、人员及计算机故障等,对每一种风险进行分类,并决定如何管理各类风险;准确地预测企业所面临的各种风险,并对每一种风险、威胁和危险的大小及发生概率进行评价,建立各类风险管理的优先次序,以有限的资源、时间和资金来管理最严重的一种或某几类风险;制定危机管理的策略和方法,拟定危机应急计划和危机管理队伍,做好危机预防工作。

       4.利用数据挖掘技术改善客户关系管理

      客户满意度历来就是衡量一个企业服务质量好坏的重要尺度,特别是当客户的反馈意见具有广泛效应的时候更是如此。目前很多企业利用营销中心、新闻组、 BBS以及呼叫中心等收集客户的投诉和意见,并对这些投诉和意见进行分析,以发现客户关系管理中存在的问题,如果有足够多的客户都在抱怨同一个问题,管理者就有理由对其展开调查,为企业及时捕捉到发生危机的一切可能事件和先兆,从而挽救客户关系,避免经营危机。

       5.利用数据挖掘进行信用风险分析和欺诈甄别

      客户信用风险分析和欺诈行为预测对企业的财务安全是非常重要的,使用企业信息系统中数据库的数据,利用数据挖掘中的变化和偏差分析技术进行客户信用风险分析和欺诈行为预测,分析这些风险为什么会发生?哪些因素会导致这些风险?这些风险主要来自于何处?如何预测到可能发生的风险?采取何种措施减少风险的发生?通过评价这些风险的严重性、发生的可能性及控制这些风险的成本,汇总对各种风险的评价结果,进而建立一套信用风险管理的战略和监督体系,设计并完善信用风险管理能力,准确、及时地对各种信用风险进行监视、评价、预警和管理,进而采取有效的规避和监督措施,在信用风险发生之前对其进行预警和控制,趋利避害,做好信用风险的防范工作。

      6.利用数据挖掘控制危机

      危机一旦爆发,来势迅猛,损失严重,因此危机发生以后,要采取有力的措施控制危机,管理者可以利用先进的信息技术如基于Web 的挖掘技术、各种搜索引擎工具、E-mail自动处理工具、基于人工智能的信息内容的自动分类、聚类以及基于深层次自然语言理解的知识检索、问答式知识检索系统等快速地获取危机管理所需要的各种信息,以便向客户、社区、新闻界发布有关的危机管理信息,并在各种媒体尤其是公司的网站上公布企业的详细风险防御和危机管理计划,使全体员工能够及时获取危机管理信息及危机最新的进展情况。这样企业的高层管理人员、公关人员、危机管理人员和全体员工就能随时有准备地应付任何复杂情况和危急形势的压力,对出现的危机立即做出反应,使危机的损失降到最低。

      危机就是危险和机遇,企业的每一次危机既包含了导致失败的根源,又蕴藏着成功的种子,发现、培育,进而收获潜在的成功机会,就是危机管理的精髓;而错误地估计形势,并令事态进一步恶化,则是不良危机管理的典型特征。企业应加强危机管理工作,利用先进的数据挖掘技术加强企业的危机管理工作,以便准确及时地获取所需要的危机信息,迅速捕捉到企业可能发生危机的一切事件和征兆,进而采取有效的规避措施,在危机发生之前对其进行控制,趋利避害,从而使企业能够适应迅速变化的市场环境,保持长久的竞争优势,实现可持续发展战略


    来源:http://wiki.mbalib.com/wiki/%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98

    展开全文
  • 本文主要分析皆来自其他资料,借用较为权威的总结来对我已经学习的这些经典算法做一个极为精简的概述(根据自身经验有一定修改),另外同时附上机器学习实战中作者对各种算法的评价。另外机器学习实战这本书是本人看...

    本文主要分析皆来自其他资料,借用较为权威的总结来对我已经学习的这些经典算法做一个极为精简的概述(根据自身经验有一定修改),另外同时附上机器学习实战中作者对各种算法的评价。另外机器学习实战这本书是本人看了这么多书籍或者资料中唯一一本坚持从头看到尾,看完了的书籍,包括其中的代码皆实践运行过,收获颇多,个人认为虽然这本书时间上已经算是老资料了,但其中作者的各种总结和代码的演练都由浅入深(前提还是要有一点基础的),让我能看懂并能从中学到东西,可能当时很多东西比较熟悉,后来淡忘,但当再次接触或使用它时能很快的重拾,所以如果你需要一门较为优秀的教材作为机器学习的入门资料我会推荐给你《机器学习实战》。

    以下为主要内容:

    国际权威的学术组织the IEEE International Conference on Data Mining (ICDM) 2006年12月评选出了数据挖掘领域的十大经典算法:C4.5, k-Means, SVM, Apriori, EM, PageRank, AdaBoost, kNN, Naive Bayes, and CART.

    不仅仅是选中的十大算法,其实参加评选的18种算法,实际上随便拿出一种来都可以称得上是经典算法,它们在数据挖掘领域都产生了极为深远的影响。

     

    1. C4.5

    C4.5算法是机器学习算法中的一种分类决策树算法,其核心算法是ID3算法.  C4.5算法继承了ID3算法的优点,并在以下几方面对ID3算法进行了改进:

    1) 用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足;
        2) 在树构造过程中进行剪枝;
        3) 能够完成对连续属性的离散化处理;
        4) 能够对不完整数据进行处理。

    C4.5算法有如下优点:产生的分类规则易于理解,准确率较高。其缺点是:在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效(相对的CART算法只需要扫描两次数据集,以下仅为决策树优缺点)。

    2. The k-means algorithm 即K-Means算法

    k-means algorithm算法是一个聚类算法,把n的对象根据他们的属性分为k个分割,k < n。它与处理混合正态分布的最大期望算法很相似,因为他们都试图找到数据中自然聚类的中心。它假设对象属性来自于空间向量,并且目标是使各个群组内部的均 方误差总和最小。

    3. Support vector machines

    支持向量机,英文为Support Vector Machine,简称SV机(论文中一般简称SVM)。它是一种監督式學習的方法,它广泛的应用于统计分类以及回归分析中。支持向量机将向量映射到一个更 高维的空间里,在这个空间里建立有一个最大间隔超平面。在分开数据的超平面的两边建有两个互相平行的超平面。分隔超平面使两个平行超平面的距离最大化。假 定平行超平面间的距离或差距越大,分类器的总误差越小。一个极好的指南是C.J.C Burges的《模式识别支持向量机指南》。van der Walt 和 Barnard 将支持向量机和其他分类器进行了比较。

    4. The Apriori algorithm

    Apriori算法是一种最有影响的挖掘布尔关联规则频繁项集的算法。其核心是基于两阶段频集思想的递推算法。该关联规则在分类上属于单维、单层、布尔关联规则。在这里,所有支持度大于最小支持度的项集称为频繁项集,简称频集。

    5. 最大期望(EM)算法

    在统计计算中,最大期望(EM,Expectation–Maximization)算法是在概率(probabilistic)模型中寻找参数最大似然 估计的算法,其中概率模型依赖于无法观测的隐藏变量(Latent Variabl)。最大期望经常用在机器学习和计算机视觉的数据集聚(Data Clustering)领域。

     

    6. PageRank

    PageRank是Google算法的重要内容。2001年9月被授予美国专利,专利人是Google创始人之一拉里·佩奇(Larry Page)。因此,PageRank里的page不是指网页,而是指佩奇,即这个等级方法是以佩奇来命名的。

    PageRank根据网站的外部链接和内部链接的数量和质量俩衡量网站的价值。PageRank背后的概念是,每个到页面的链接都是对该页面的一次投票, 被链接的越多,就意味着被其他网站投票越多。这个就是所谓的“链接流行度”——衡量多少人愿意将他们的网站和你的网站挂钩。PageRank这个概念引自 学术中一篇论文的被引述的频度——即被别人引述的次数越多,一般判断这篇论文的权威性就越高。

     

    7. AdaBoost

    Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器 (强分类器)。其算法本身是通过改变数据分布来实现的,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权 值。将修改过权值的新数据集送给下层分类器进行训练,最后将每次训练得到的分类器最后融合起来,作为最后的决策分类器。

    8. kNN: k-nearest neighbor classification

    K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

    9. Naive Bayes

    在众多的分类模型中,应用最为广泛的两种分类模型是决策树模型(Decision Tree Model)和朴素贝叶斯模型(Naive Bayesian Model,NBC)。 朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以 及稳定的分类效率。同时,NBC模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简单。理论上,NBC模型与其他分类方法相比具有最小的误差率。 但是实际上并非总是如此,这是因为NBC模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,这给NBC模型的正确分类带来了一定影响。在属 性个数比较多或者属性之间相关性较大时,NBC模型的分类效率比不上决策树模型。而在属性相关性较小时,NBC模型的性能最为良好。

    10. CART: 分类与回归树

    CART, Classification and Regression Trees。 在分类树下面有两个关键的思想。第一个是关于递归地划分自变量空间的想法(二元切分法);第二个想法是用验证数据进行剪枝(预剪枝、后剪枝)。在回归树的基础上的模型树构建难度可能增加了,但同时其分类效果也有提升。

     

    参考书籍:《机器学习实战》

    参考文章:https://blog.csdn.net/u010983763/article/details/70854469

    展开全文
  • Python数据挖掘实战

    千人学习 2019-08-21 18:43:08
    Python数据挖掘技术系列视频培训教程基于真实数据集进行案例实战,使用Python数据科学库从数据预处理开始一步步进行数据建模。对于每个案例首先进行流程解读与数据分析,建立特征工程,详细解读其中每一步原理与...
  • 数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。由此可见,特征工程在机器学习中占有相当重要的地位。在实际应用当中,可以说特征工程是机器学习成功的关键。 特征工程又包含了Feature ...

    本文参考木东居士公众号文章《特征工程系列:特征筛选的原理与实现》
    数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。由此可见,特征工程在机器学习中占有相当重要的地位。在实际应用当中,可以说特征工程是机器学习成功的关键。
    特征工程又包含了Feature Selection(特征选择)、Feature Extraction(特征提取)和Feature construction(特征构造)等子问题,本章内容主要讨论特征选择相关的方法及实现。
    在实际项目中,我们可能会有大量的特征可使用,有的特征携带的信息丰富,有的特征携带的信息有重叠,有的特征则属于无关特征,如果所有特征不经筛选地全部作为训练特征,经常会出现维度灾难问题,甚至会降低模型的准确性。因此,我们需要进行特征筛选,排除无效/冗余的特征,把有用的特征挑选出来作为模型的训练数据。

    一、相关概念介绍
    1. 按重要性分类
    **相关特征:**对于学习任务(例如分类问题)有帮助,可以提升学习算法的效果;
    **无关特征:**对于我们的算法没有任何帮助,不会给算法的效果带来任何提升;
    **冗余特征:**不会对我们的算法带来新的信息,或者这种特征的信息可以由其他的特征推断出;

    2.特征选择的目的
    对于一个特定的学习算法来说,哪一个特征是有效的是未知的。因此,需要从所有特征中选择出对于学习算法有益的相关特征。而且在实际应用中,经常会出现维度灾难问题。如果只选择所有特征中的部分特征构建模型,那么可以大大减少学习算法的运行时间,也可以增加模型的可解释性。

    3.特征选择的原则
    获取尽可能小的特征子集,不显著降低分类精度、不影响分类分布以及特征子集应具有稳定、适应性强等特点。

    二、特征选择方法
    1.Filter(过滤式
    先进行特征选择,然后去训练学习器,所以特征选择的过程与学习器无关。相当于先对特征进行过滤操作,然后用特征子集来训练分类器。
    **主要思想:**对每一维特征“打分”,即给每一维的特征赋予权重,这样的权重就代表着该特征的重要性,然后依据权重排序。
    主要方法:
    Chi-squared test(卡方检验)
    Information gain(信息增益)
    Correlation coefficient scores(相关系数)
    优点:运行速度快,是一种非常流行的特征选择方法。
    缺点:无法提供反馈,特征选择的标准/规范的制定是在特征搜索算法中完成,学习算法无法向特征搜索算法传递对特征的需求。另外,可能处理某个特征时由于任意原因表示该特征不重要,但是该特征与其他特征结合起来则可能变得很重要。

    实现一:去掉取值变化小的特征
    该方法一般用在特征选择前作为一个预处理的工作,即先去掉取值变化小的特征,然后再使用其他特征选择方法选择特征。 考察某个特征下,样本的方差值,可以认为给定一个阈值,抛弃哪些小于某个阈值的特征。
    1)实现原理
    离散型变量:
    假设某特征的特征值只有0和1,并且在所有输入样本中,95%的实例的该特征取值都是1,那就可以认为这个特征作用不大。如果100%都是1,那这个特征就没意义了。
    连续型变量:需要将连续变量离散化之后才能用。
    而且实际当中,一般不太会有95%以上都取某个值的特征存在,所以这种方法虽然简单但是不太好用。可以把它作为特征选择的预处理,先去掉那些取值变化小的特征,然后再从接下来提到的的特征选择方法中选择合适的进行进一步的特征选择。

    实现二:单变量特征选择
    单变量特征选择方法独立的衡量每个特征与响应变量之间的关系,单变量特征选择能够对每一个特征进行测试,衡量该特征和响应变量之间的关系,根据得分扔掉不好的特征。该方法简单,易于运行,易于理解,通常对于理解数据有较好的效果(但对特征优化、提高泛化能力来说不一定有效);这种方法有许多改进的版本、变种。
    (1)Pearson相关系数(Pearson Correlation)
    使用条件:线性相关性、连续型特征
    皮尔森相关系数是一种最简单的,能帮助理解特征和响应变量之间关系的方法,该方法衡量的是变量之间的线性相关性(即此方法使用的前提假设是变量间具有线性相关性,如果是非线性关系,见下文的熵增益法)。
    1)原理介绍
    在这里插入图片描述
    就是用x_i、x_j的协方差除以x_i的标准差和x_j的标准差,可以看成一种剔除了两个变量量纲影响、标准化后的特殊协方差。
    协方差是度量各个维度偏离其均值的程度,协方差的值为正值时说明两者是正相关,否则是负相关的。
    结果的取值区间为[-1,1],-1表示完全的负相关,+1表示完全的正相关,0表示没有线性相关,绝对值表示相关性的强度。
    标准差也称均方差,是方差的算术平方根,能反映一个数据集的离散程度。
    2)主要用于连续型特征的筛选,不适用于离散型特征的筛选。
    3)优缺点
    优点:
    相关系数计算速度快、易于计算,经常在拿到数据(经过清洗和特征提取之后的)之后第一时间就执行。Pearson相关系数能够表征丰富的关系,符合表示关系的正负,绝对值能够表示强度。
    缺点:
    相关系数作为特征排序机制,它只对线性关系敏感,如果关系是非线性的,即便两个变量具有一一对应的关系,相关系数系数也可能会接近0。
    (2)互信息和最大信息系数(Mutual information and maximal information coefficient)
    如果变量不是独立的,那么我们可以通过考察联合概率分布与边缘概率分布乘积之间的 Kullback-Leibler 散度来判断它们是否“接近”于相互独立。
    1)互信息方法
    使用前提假设:特征间相互独立、离散型特征
    熵H(Y)与条件熵H(Y|X)之间的差称为互信息,互信息与条件熵之间的关系:
    在这里插入图片描述
    其实,这就是ID3决策树的特征选择规则。
    互信息法也是评价定性自变量对定性因变量的相关性的,但是并不方便直接用于特征选择:
    它不属于度量方式,也没有办法进行归一化,在不同的数据上的结果无法做比较。
    只能用于离散型特征的选择,连续型特征需要先进行离散化才能用互信息进行特征选择,而互信息的结果对离散化的方式很敏感(即分段阈值的选择对结果影响较大)。
    2)最大信息系数方法
    由于互信息法并不方便直接用于特征选择,因此引入了最大信息系数。最大信息数据首先寻找一种最优的离散方式,然后把互信息取值转换成一种度量方式,取值区间为[0,1]。

    (3)距离相关系数(Distance correlation)
    距离相关系数是为了克服Pearson相关系数只能衡量线性相关性而不能衡量非线性关系的弱点而生的。
    1)原理介绍
    在这里插入图片描述
    (5)卡方检验
    卡方值描述两个事件的独立性或者描述实际观察值与期望值的偏离程度。
    1)原理介绍
    在这里插入图片描述
    CHI值(卡方值)用于衡量实际值与理论值的差异程度,除以T是为了避免不同观察值与不同期望之间产生的偏差因T的不同而差别太大,所以除以E以消除这种弊端。

    2)实现流程
    CHI值越大,说明两个变量越不可能是独立无关的,也就是说CHI值越大,两个变量的相关程度也越高。
    a. 对于特征变量x1,x2,…,xn,以及分类变量y。只需要计算CHI(x1,y)、CHI(x2,y)、…、CHI(xn,y),并按照CHI的值从大到小将特征排序。
    b. 选择合适的阈值,大于阈值的特征留下,小于阈值的特征删除。这样筛选出一组特征子集就是输入模型训练的特征。

    3)局限性:只适用于分类问题中离散型特征筛选,不能用于分类问题中连续型特征的筛选,也不能用于回归问题的特征筛选。
    4)代码实现
    现实方法:
    sklearn.feature_selection.SelectKBest:
    返回k个最佳特征
    sklearn.feature_selection.SelectPercentile:
    返回表现最佳的前r%个特征

    #导入sklearn库中的SelectKBest和chi2
    from sklearn.feature_selection import SelectKBest ,chi2
    #选择相关性最高的前5个特征
    X_chi2 = SelectKBest(chi2, k=5).fit_transform(X, y)
    X_chi2.shape
    输出:(27, 5)
    

    (6)Relief (Relevant Features) 是一种著名的过滤式特征选择方法,该方法设计了一个"相关统计量"来度量特征的重要性。
    在这里插入图片描述

    2.Wrapper方法(封装式)
    直接把最后要使用的分类器作为特征选择的评价函数,对于特定的分类器选择最优的特征子集。
    主要思想:将子集的选择看作是一个搜索寻优问题,生成不同的组合,对组合进行评价,再与其他的组合进行比较。这样就将子集的选择看作是一个优化问题,这里有很多的优化算法可以解决,尤其是一些启发式的优化算法,如GA、PSO(如:优化算法-粒子群算法)、DE、ABC(如:优化算法-人工蜂群算法)等。
    主要方法:递归特征消除算法
    优点:对特征进行搜索时围绕学习算法展开的,对特征选择的标准/规范是在学习算法的需求中展开的,能够考虑学习算法所属的任意学习偏差,从而确定最佳子特征,真正关注的是学习问题本身。由于每次尝试针对特定子集时必须运行学习算法,所以能够关注到学习算法的学习偏差/归纳偏差,因此封装能够发挥巨大的作用。
    缺点:运行速度远慢于过滤算法,实际应用用封装方法没有过滤方法流行。

    两种顶层特征选择算法
    之所以叫做顶层,是因为他们都是建立在基于模型的特征选择方法基础之上的,例如回归和SVM,在不同的子集上建立模型,然后汇总最终确定特征得分。
    1.稳定性选择(Stability selection)
    稳定性选择常常是一种既能够有助于理解数据又能够挑出优质特征的这种选择。
    1)原理介绍
    稳定性选择是一种基于二次抽样和选择算法相结合较新的方法,选择算法可以是回归、SVM或其他类似的方法。
    它的主要思想是在不同的数据子集和特征子集上运行特征选择算法,不断的重复,最终汇总特征选择结果。比如可以统计某个特征被认为是重要特征的频率(被选为重要特征的次数除以它所在的子集被测试的次数)。
    理想情况下,重要特征的得分会接近100%。稍微弱一点的特征得分会是非0的数,而最无用的特征得分将会接近于0。
    2)代码实现
    sklearn在随机lasso和随机逻辑回归中有对稳定性选择的实现。

    from sklearn.linear_model import RandomizedLasso
    from sklearn.datasets import load_boston
    boston = load_boston()
    
    #using the Boston housing data. 
    #Data gets scaled automatically by sklearn's implementation
    X = boston["data"]
    Y = boston["target"]
    names = boston["feature_names"]
    
    rlasso = RandomizedLasso(alpha=0.025)
    rlasso.fit(X, Y)
    
    print "Features sorted by their score:"
    print sorted(zip(map(lambda x: round(x, 4), rlasso.scores_), 
                     names), reverse=True)
    #输出
    Features sorted by their score: [(1.0, ‘RM’), (1.0, ‘PTRATIO’), (1.0, ‘LSTAT’), (0.62, ‘CHAS’), (0.595, ‘B’), (0.39, ‘TAX’), (0.385, ‘CRIM’), (0.25, ‘DIS’), (0.22, ‘NOX’), (0.125, ‘INDUS’), (0.045, ‘ZN’), (0.02, ‘RAD’), (0.015, ‘AGE’)]
    

    在上边这个例子当中,较高的3个特征得分是1.0,这表示他们总会被选作有用的特征(当然,得分会受到正则化参数alpha的影响,但是sklearn的随机lasso能够自动选择最优的alpha)。接下来的几个特征得分就开始下降,但是下降的不是特别急剧,这跟纯lasso的方法和随机森林的结果不一样。能够看出稳定性选择对于克服过拟合和对数据理解来说都是有帮助的:总的来说,**好的特征不会因为有相似的特征、关联特征而得分为0,这跟Lasso是不同的。**对于特征选择任务,在许多数据集和环境下,稳定性选择往往是性能较好的方法之一。

    2.递归特征消除(Recursive feature elimination,RFE)
    1)原理介绍
    递归特征消除的主要思想是**反复构建模型(如SVM或者回归模型)然后选出最好的(或者最差的)的特征(可以根据系数来选),把选出来的特征放到一遍,然后在剩余的特征上重复这个过程,直到所有特征都遍历了。这个过程中特征被消除的次序就是特征的排序。**因此,这是一种寻找最优特征子集的贪心算法。
    RFE的稳定性很大程度上取决于在迭代的时候底层用哪种模型。
    假如RFE采用的普通的回归,没有经过正则化的回归是不稳定的,那么RFE就是不稳定的。假如RFE采用的是Ridge,而用Ridge正则化的回归是稳定的,那么RFE就是稳定的。
    Sklearn提供了RFE包,可以用于特征消除,还提供了RFECV,可以通过交叉验证来对的特征进行排序。

    from sklearn.feature_selection import RFE
    from sklearn.linear_model import LinearRegression
    from sklearn.datasets import load_boston
    
    boston = load_boston()
    X = boston["data"]
    Y = boston["target"]
    names = boston["feature_names"]
    
    #use linear regression as the model
    lr = LinearRegression()
    #rank all features, i.e continue the elimination until the last one
    rfe = RFE(lr, n_features_to_select=1)
    rfe.fit(X,Y)
    
    print "Features sorted by their rank:"
    print sorted(zip(map(lambda x: round(x, 4), rfe.ranking_), names))
    
    #输出
    Features sorted by their rank: [(1.0, ‘NOX’), (2.0, ‘RM’), (3.0, ‘CHAS’), (4.0, ‘PTRATIO’), (5.0, ‘DIS’), (6.0, ‘LSTAT’), (7.0, ‘RAD’), (8.0, ‘CRIM’), (9.0, ‘INDUS’), (10.0, ‘ZN’), (11.0, ‘TAX’), (12.0, ‘B’), (13.0, ‘AGE’)]
    

    3.Embedded方法(嵌入式)
    将特征选择嵌入到模型训练当中,其训练可能是相同的模型,但是特征选择完成后,还能给予特征选择完成的特征和模型训练出的超参数,再次训练优化。
    主要思想:在模型既定的情况下学习出对提高模型准确性最好的特征。也就是在确定模型的过程中,挑选出那些对模型的训练有重要意义的特征。
    主要方法:用带有L1正则化的项完成特征选择(也可以结合L2惩罚项来优化)、随机森林平均不纯度减少法/平均精确度减少法。
    优点:对特征进行搜索时围绕学习算法展开的,能够考虑学习算法所属的任意学习偏差。训练模型的次数小于Wrapper方法,比较节省时间。
    缺点:运行速度慢。

    线性模型与正则化
    1.主要思想
    当所有特征在相同尺度上时,最重要的特征应该在模型中具有最高系数,而与输出变量不相关的特征应该具有接近零的系数值。即使使用简单的线性回归模型,当数据不是很嘈杂(或者有大量数据与特征数量相比)并且特征(相对)独立时,这种方法也能很好地工作。
    2.正则化模型
    正则化就是把额外的约束或者惩罚项加到已有模型(损失函数)上,以防止过拟合并提高泛化能力。损失函数由原来的E(X,Y)变为E(X,Y)+alpha||w||,w是模型系数组成的向量(有些地方也叫参数parameter,coefficients),||·||一般是L1或者L2范数,alpha是一个可调的参数,控制着正则化的强度。当用在线性模型上时,L1正则化和L2正则化也称为Lasso和Ridge。

    1)L1正则化/Lasso regression
    L1正则化将系数w的L1范数作为惩罚项加到损失函数上,由于正则项非零,这就迫使那些弱的特征所对应的系数变成0。因此L1正则化往往会使学到的模型很稀疏(系数w经常为0),这个特性使得L1正则化成为一种很好的特征选择方法。
    Lasso能够挑出一些优质特征,同时让其他特征的系数趋于0。当如需要减少特征数的时候它很有用,但是对于数据理解来说不是很好用。

    2)L2正则化/Ridge regression
    L2正则化将系数向量的L2范数添加到了损失函数中。
    由于L2惩罚项中系数是二次方的,这使得L2和L1有着诸多差异,最明显的一点就是,L2正则化会让系数的取值变得平均。
    对于关联特征,这意味着他们能够获得更相近的对应系数。
    Ridge将回归系数均匀的分摊到各个关联变量上。
    L2正则化对于特征选择来说一种稳定的模型,不像L1正则化那样,系数会因为细微的数据变化而波动。所以L2正则化和L1正则化提供的价值是不同的,L2正则化对于特征理解来说更加有用:表示能力强的特征对应的系数是非零。

    3.代码实现
    1)普通线性模型

    from sklearn.linear_model import LinearRegression
    from sklearn.datasets import load_boston
    #获取boston数据
    boston=datasets.load_boston()
    x=boston.data
    y=boston.target
    #过滤掉异常值
    x=x[y<50]
    y=y[y<50]
    reg=LinearRegression()
    reg.fit(x,y)
    #求排序后的coef
    coefSort=reg.coef_.argsort()
    #featureNameSort: 按对标记值的影响,从小到大的各特征值名称
    #featureCoefSore:按对标记值的影响,从小到大的coef_
    featureNameSort=boston.feature_names[coefSort]
    featureCoefScore=reg.coef_[coefSort]
    print("featureNameSort:", featureNameSort)
    print("featureCoefSore:", featureCoefScore)
    # 输出:featureNameSort: ['NOX' 'DIS' 'PTRATIO' 'LSTAT' 'CRIM' 'INDUS' 'AGE' 'TAX' 'B' 'ZN' 'RAD' 'CHAS' 'RM']
    featureCoefSore: [-1.24268073e+01 -1.21088069e+00 -8.38888137e-01 -3.50952134e-01
     -1.05574295e-01 -4.35179251e-02 -2.36116881e-02 -1.37702943e-02 7.93577159e-03
    3.52748549e-02  2.50740082e-01  4.55405227e-01 3.75411229e+00]
    

    结果分析:
    正相关影响系数最大的特征值是”RM”:房间的平均数量,系数值为3.75。
    负相关影响系数最大的特征值是”NOX”:一氧化氮浓度,系数值为-1.24。

    2)L1正则化线性模型

    #A helper method for pretty-printing linear models
    def pretty_print_linear(coefs, names = None, sort = False):
        if names == None:
            names = ["X%s" % x for x in range(len(coefs))]
        lst = zip(coefs, names)
        if sort:
            lst = sorted(lst,  key = lambda x:-np.abs(x[0]))
        return " + ".join("%s * %s" % (round(coef, 3), name)
                                       for coef, name in lst)
    
    from sklearn.linear_model import Lasso
    from sklearn.preprocessing import StandardScaler
    from sklearn.datasets import load_boston
    
    boston = load_boston()
    scaler = StandardScaler()
    X = scaler.fit_transform(boston["data"])
    Y = boston["target"]
    names = boston["feature_names"]
    
    lasso = Lasso(alpha=.3)
    lasso.fit(X, Y)
    
    print("Lasso model: {}".format(
          pretty_print_linear(lasso.coef_, names, sort = True)))
    # 输出:Lasso model: -3.707 * LSTAT + 2.992 * RM + -1.757 * PTRATIO
    + -1.081 * DIS + -0.7 * NOX + 0.631 * B + 0.54 * CHAS + -0.236 * CRIM
    + 0.081 * ZN + -0.0 * INDUS + -0.0 * AGE + 0.0 * RAD + -0.0 * TAX
    

    许多特征具有系数0。L1正则化回归的稳定性与非正则化线性模型类似,这意味着当数据中存在相关特征时,系数(以及特征等级)即使在小数据变化时也会发生显着变化。

    3)L2正则化线性模型

    import numpy as np
    from sklearn.linear_model import LinearRegression
    from sklearn.linear_model import Ridge
    from sklearn.metrics import r2_score
    size = 100
    
    #We run the method 10 times with different random seeds
    for i in range(10):
        print("Random seed {}".format(i))
        np.random.seed(seed=i)
        X_seed = np.random.normal(0, 1, size)
        X1 = X_seed + np.random.normal(0, .1, size)
        X2 = X_seed + np.random.normal(0, .1, size)
        X3 = X_seed + np.random.normal(0, .1, size)
        Y = X1 + X2 + X3 + np.random.normal(0, 1, size)
        X = np.array([X1, X2, X3]).T
    
    
        lr = LinearRegression()
        lr.fit(X,Y)
        print("Linear model: {}".format(pretty_print_linear(lr.coef_)))
    
        ridge = Ridge(alpha=10)
        ridge.fit(X,Y)
        print("Ridge model: {}".format(pretty_print_linear(ridge.coef_)))
    
    # 输出
    Random seed 0
    Linear model: 0.728 * X0 + 2.309 * X1 + -0.082 * X2
    Ridge model: 0.938 * X0 + 1.059 * X1 + 0.877 * X2
    
    Random seed 1
    Linear model: 1.152 * X0 + 2.366 * X1 + -0.599 * X2
    Ridge model: 0.984 * X0 + 1.068 * X1 + 0.759 * X2
    
    Random seed 2
    Linear model: 0.697 * X0 + 0.322 * X1 + 2.086 * X2
    Ridge model: 0.972 * X0 + 0.943 * X1 + 1.085 * X2
    
    Random seed 3
    Linear model: 0.287 * X0 + 1.254 * X1 + 1.491 * X2
    Ridge model: 0.919 * X0 + 1.005 * X1 + 1.033 * X2
    
    Random seed 4
    Linear model: 0.187 * X0 + 0.772 * X1 + 2.189 * X2
    Ridge model: 0.964 * X0 + 0.982 * X1 + 1.098 * X2
    
    Random seed 5
    Linear model: -1.291 * X0 + 1.591 * X1 + 2.747 * X2
    Ridge model: 0.758 * X0 + 1.011 * X1 + 1.139 * X2
    
    Random seed 6
    Linear model: 1.199 * X0 + -0.031 * X1 + 1.915 * X2
    Ridge model: 1.016 * X0 + 0.89 * X1 + 1.091 * X2
    
    Random seed 7
    Linear model: 1.474 * X0 + 1.762 * X1 + -0.151 * X2
    Ridge model: 1.018 * X0 + 1.039 * X1 + 0.901 * X2
    
    Random seed 8
    Linear model: 0.084 * X0 + 1.88 * X1 + 1.107 * X2
    Ridge model: 0.907 * X0 + 1.071 * X1 + 1.008 * X2
    
    Random seed 9
    Linear model: 0.714 * X0 + 0.776 * X1 + 1.364 * X2
    Ridge model: 0.896 * X0 + 0.903 * X1 + 0.98 * X2
    

    从示例中可以看出,线性回归的系数变化很大,具体取决于生成的数据。然而,对于L2正则化模型,系数非常稳定并且密切反映数据的生成方式(所有系数接近1)。

    随机森林具有准确率高、鲁棒性好、易于使用等优点,这使得它成为了目前最流行的机器学习算法之一。随机森林提供了两种特征选择的方法:mean decrease impurity和mean decrease accuracy。

    1.平均不纯度减少(mean decrease impurity)
    1)原理介绍
    随机森林由多棵CART决策树构成,决策树中的每一个节点都是关于某个特征的条件,为的是将数据集按照不同的响应变量一分为二(二叉树)。
    CART利用不纯度(基尼系数,CART的节点选择指标)可以确定节点(最优条件),对于分类问题,通常采用基尼不纯度,对于回归问题,通常采用的是方差或者最小二乘拟合。
    当训练决策树的时候,可以计算出每个特征减少了多少树的不纯度。对于一个决策树森林来说,可以算出每个特征平均减少了多少不纯度,并把它平均减少的不纯度作为特征选择的标准。
    随机森林基于不纯度的排序结果非常鲜明,在得分最高的几个特征之后的特征,得分急剧的下降。

    2)代码实现

    from sklearn.datasets import load_boston
    from sklearn.ensemble import RandomForestRegressor
    import numpy as np
    
    #Load boston housing dataset as an example
    boston = load_boston()
    X = boston["data"]
    Y = boston["target"]
    names = boston["feature_names"]
    # 训练随机森林模型,并通过feature_importances_属性获取每个特征的重要性分数。
    rf = RandomForestRegressor()
    rf.fit(X, Y)
    print("Features sorted by their score:")
    print(sorted(zip(map(lambda x: round(x, 4), rf.feature_importances_), names),
                 reverse=True))
     #输出Features sorted by their score:
    [(0.4738, 'RM'), (0.3284, 'LSTAT'), (0.0548, 'DIS'), (0.0373, 'NOX'), (0.0373, 'CRIM'), (0.0247, 'PTRATIO'), (0.0129, 'TAX'), (0.0117, 'AGE'), (0.0094, 'B'), (0.0035, 'RAD'), (0.0026, 'CHAS'), (0.0025, 'INDUS'), (0.001, 'ZN')]
    

    2.平均精确度减少(mean decrease accuracy)
    1)原理介绍
    通过直接度量每个特征对模型精确率的影响来进行特征选择。
    主要思路是打乱每个特征的特征值顺序,并且度量顺序变动对模型的精确率的影响。
    对于不重要的变量来说,打乱顺序对模型的精确率影响不会太大。
    对于重要的变量来说,打乱顺序就会降低模型的精确率。
    2)代码实现

    import numpy as np
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import r2_score
    from sklearn.ensemble import RandomForestRegressor
    from collections import defaultdict
    from sklearn.datasets import load_boston
    
    boston=load_boston()
    X = boston["data"]
    Y = boston["target"]
    rf = RandomForestRegressor()
    scores = defaultdict(list)
    #crossvalidate the scores on a number of different random splits of the data
    
    
    X_train,X_test,Y_train,Y_test=train_test_split(X,Y,test_size=0.3)
    
    # 使用修改前的原始特征训练模型,其acc作为后续混洗特征值后的对比标准。
    r = rf.fit(X_train, Y_train)
    acc = r2_score(Y_test, rf.predict(X_test))
    # 遍历每一列特征
    for i in range(X.shape[1]):
        X_t = X_test.copy()
         # 对这一列特征进行混洗,交互了一列特征内部的值的顺序
        np.random.shuffle(X_t[:, i])
        shuff_acc = r2_score(Y_test, rf.predict(X_t))
        # 混洗某个特征值后,计算平均精确度减少程度。scores[names[i]].append((acc-shuff_acc)/acc)
    print("Features sorted by their score:")
    print(sorted([(round(np.mean(score), 4), feat) for feat, score in scores.items()], reverse=True))
    

    总结

    (1)去掉取值变化小的特征方法一般用在特征选择前作为一个预处理的工作,即先去掉取值变化小的特征,然后再使用其他特征选择方法选择特征。如果机器资源充足,并且希望尽量保留所有信息,可以把阈值设置得比较高,或者只过滤离散型特征只有一个取值的特征。
    (2)单变量特征选择可以用于理解数据、数据的结构、特点,也可以用于排除不相关特征,但是它不能发现冗余特征
    (3)正则化的线性模型可用于特征理解和特征选择。相比起L1正则化,L2正则化的表现更加稳定,L2正则化对于数据的理解来说很合适。由于响应变量和特征之间往往是非线性关系,可以采用basis expansion的方式将特征转换到一个更加合适的空间当中,在此基础上再考虑运用简单的线性模型。
    (4)随机森林是一种非常流行的特征选择方法,它易于使用。但它有两个主要问题:
    重要的特征有可能得分很低(关联特征问题);这种方法对特征变量类别多的特征越有利(偏向问题)

    关于训练模型的特征筛选,个人建议的实施流程 :
    (1)数据预处理后,先排除取值变化很小的特征。如果机器资源充足,并且希望尽量保留所有信息,可以把阈值设置得比较高,或者只过滤离散型特征只有一个取值的特征。
    (2)如果数据量过大,计算资源不足(内存不足以使用所有数据进行训练、计算速度过慢),可以使用单特征选择法排除部分特征。这些被排除的特征并不一定完全被排除不再使用,在后续的特征构造时也可以作为原始特征使用。
    (3)如果此时特征量依然非常大,或者是如果特征比较稀疏时,可以使用PCA(主成分分析)和LDA(线性判别)等方法进行特征降维。
    (4)经过样本采样和特征预筛选后,训练样本可以用于训练模型。但是可能由于特征数量比较大而导致训练速度慢,或者想进一步筛选有效特征或排除无效特征(或噪音),我们可以使用正则化线性模型选择法、随机森林选择法或者顶层特征选择法进一步进行特征筛选。
    (5)最后,特征筛选是为了理解数据或更好地训练模型,我们应该根据自己的目标来选择适合的方法。为了更好/更容易地训练模型而进行的特征筛选,如果计算资源充足,应尽量避免过度筛选特征,因为特征筛选很容易丢失有用的信息。如果只是为了减少无效特征的影响,为了避免过拟合,可以选择随机森林和XGBoost等集成模型来避免对特征过拟合。

    展开全文
  • 1. Overview: 2. 特征选择 主要凭借对业务本身的理解和建模来定的。 1 向前贪心选择 ...特征子集X从空集开始,只要特征使得交叉验证之后的auc提升,就加入这个特征,直到剩下的特征都不能使auc提高为止,缺点是只...
  • 导入数据1.2  删除异常值1.3  特征构造1.4  特征筛选1.4.1  过滤式1.4.2  包裹式1.4.3  嵌入式2  总结 特征工程 特征工程目标:...
  • 特征工程算是正式开始数据挖掘的第一步,目的是尽量从原有数据中提取构造特征,以供后续算法或模型使用。特征构造的好坏,直接影响到我们最终的结果。 一、预处理 为更好的表示数据的特征,我们需要对原数据进行一些...
  • 数据挖掘——分类

    万次阅读 2018-10-12 08:46:20
    分类:一种数据分析形式,它提取刻画重要数据类的模型。这种模型叫分类器,进而预测分类的(离散的、无序的)类标号。 相关概念解释 训练集:由数据库元组和与它们相关联的类标号组成。 元组X用n维属性向量...
  • 第三版 25页 数据挖掘又称知识发现(KDD:Knowledge Discovery in Database),即“从数据中挖掘知识”。  丰富的数据以及对强有力的数据分析工具的需求,这种情况被描述为“数据丰富,但信息匮乏”。数据挖掘...
  • 数据挖掘的一般过程

    万次阅读 多人点赞 2017-06-15 11:01:49
    数据挖掘的一般过程本文主要参考了一篇文章(最后附),那篇文章不太全面,因此加入了自己一点理解。由于实践经验太少,水平有限,希望大神指正。 1. 数据集选取或构造根据任务的目的,选择数据集。或者从实际中...
  • 6.数据挖掘概念笔记——挖掘频繁模式、关联和相关性术 欢迎转载,转载请标明出处: 频繁模式挖掘搜索给定数据集中反复出现的联系。 有哪些频繁项集挖掘方法: 答:类Apriori算法;基于频繁模式增长的算法;使用垂直...
  • 数据挖掘各种算法JAVA的实现方法

    万次阅读 2014-09-28 16:02:47
    数据挖掘-关联分析频繁模式挖掘Apriori、FP-Growth及Eclat算法的JAVA及C++实现: 网址:http://blog.csdn.net/yangliuy/article/details/7494983 数据挖掘-基于贝叶斯算法及KNN算法的newsgroup18828文本分类器...
  • 数据挖掘与数据分析的区别

    万次阅读 2018-11-24 02:21:55
    版权声明: 更多最新原创文章请访问:最新原创主页 更多最全原创文章请...2 数据挖掘起源 3 分析方法 4 九大经验 5 十大算法 结论 想尝试自己做一个总结,但是可能自己.
  • 数据挖掘导论完整版pdf中文

    万次阅读 2017-12-12 16:21:58
    数据挖掘导论完整版pdf是一本中文版的参考书教材,该书对数据挖掘的概念与技术都讲解得十分清晰,还用了丰富的示例作说明,理论阐述透彻,欢迎大家下载阅读,下载地址:... 数据挖掘电子书介绍 《数据挖掘导论》全面...
  • 数据挖掘经典书籍推荐

    万次阅读 2013-04-10 15:18:35
    记得2008年初,当我刚接触到数据挖掘的时候,看过一篇文章,介绍了数据挖掘方面有三本经典书籍: (1) J. Han and M. Kamber, Data Mining: Concepts and Techniques.  本书从数据库角度看待数据挖掘,强调效率...
  • 如何用Python进行大数据挖掘和分析

    万次阅读 多人点赞 2016-09-07 22:12:56
    互联网创业离不开数据,如果能自己做个数据爬虫,那岂不是一件很美好的事情吗? 其实自己做数据挖掘不是梦,学点Python的基本功能,5步就能让你成为一个爬虫高手!
  • 数据挖掘与机器学习的区别

    万次阅读 2018-02-12 13:00:22
    数据挖掘和机器学习的区别和联系,周志华有一篇很好的论述《机器学习和数据挖掘》可以帮助大家理解。 数据挖掘受到很多学科领域的影响,其中数据库、机器学习、统计学无疑影响最大。简言之,对数据挖掘而言,数据库...
  • Python数据挖掘实例(实时更新)

    万次阅读 2017-08-15 12:38:32
    数据挖掘
1 2 3 4 5 ... 20
收藏数 276,881
精华内容 110,752
关键字:

数据挖掘