新闻正文

数据挖掘入门(七)

来源:JAVA天堂  JAVA学习者  2007-8-6 01:56:41 网友评论 0 条 字体:[ ] ~我要投稿!
,
数据挖掘模型和算法
现在我们来讨论数据挖掘算法中涌到的各种类型的模型和算法。大多数数据挖掘
产品使用的算法都是在计算机科学或统计数学杂志上发表过的成熟算法,所不同
的只是算法的实现和对性能的优化。当然也有一些公司采用的是自己研发的未公
开的算法,效果也不错。
我们下面将要介绍的模型和算法都是数据挖掘中最常见的和应用最广泛的,在计
算机科学、统计数学、和人工智能领域的科学家们已经在研究和改进这些算法方
面作了大量的工作。几乎所有的数据挖掘技术都可称为是数据驱动的,而不是用
户驱动的,也就是说用户在使用这些算法时,只要给出数据,不用告诉算法程序
怎么做和期待得到什么结果,一切都是算法自身从给定的数据中自己找出来。
应注意的是大部分算法都不是专为解决某个问题而特制的,算法之间也并不互相
排斥。不能说一个问题一定要采用某种算法,别的就不行。一般来说并不存在所
谓的最好的算法,在最终决定选取那种模型或算法之前,你可能各种模型都试一
下,然后再选取一个较好的,或只试了一个就已经满足了你对准确度的要求。
神经网络
神经网络
神经网络近来越来越受到人们的关注,因为它为解决大复杂度问题提供了一种相
对来说比较有效的简单方法。神经网络可以很容易的解决具有上百个参数的问题
(当然实际生物体中存在的神经网络要比我们这里所说的程序模拟的神经网络要
复杂的多)。神经网络常用于两类问题:分类和回归。
在结构上,可以把一个神经网络划分为输入层、输出层和隐含层(见图4)。输入
层的每个节点对应一个个的预测变量。输出层的节点对应目标变量,可有多个。
在输入层和输出层之间是隐含层(对神经网络使用者来说不可见),隐含层的层
数和每层节点的个数决定了神经网络的复杂度。
除了输入层的节点,神经网络的每个节点都与很多它前面的节点(称为此节点的
输入节点)连接在一起,每个连接对应一个权重Wxy,此节点的值就是通过它所有
输入节点的值与对应连接权重乘积的和作为一个函数的输入而得到,我们把这个
函数称为活动函数或挤压函数。如图5中节点4输出到节点6的值可通过如下计算得
到:
W14*节点1的值+W24*节点2的值
神经网络的每个节点都可表示成预测变量(节点1,2)的值或值的组合(节点3-6)
。注意节点6的值已经不再是节点1、2的线性组合,因为数据在隐含层中传递时使
用了活动函数.实际上如果没有活动函数的话,神经元网络就等价于一个线性回归

函数,如果此活动函数是某种特定的非线性函数,那神经网络又等价于逻辑回归。
调整节点间连接的权重就是在建立(也称训练)神经网络时要做的工作。最早的
也是最基本的权重调整方法是错误回馈法,现在较新的有变化坡度法、类牛顿法、
Levenberg-Marquardt法、和遗传算法等。无论采用那种训练方法,都需要有一些
参数来控制训练的过程,如防止训练过度和控制训练的速度。
决定神经网络拓扑结构(或体系结构)的是隐含层及其所含节点的个数,以及节
点之间的连接方式。要从头开始设计一个神经网络,必须要决定隐含层和节点的
数目,活动函数的形式,以及对权重做那些限制等,当然如果采用成熟软件工具
的话,他会帮你决定这些事情。
在诸多类型的神经网络中,最常用的是前向传播式神经网络,也就是我们前面图
示中所描绘的那种。我们下面详细讨论一下,为讨论方便假定只含有一层隐含节
点。
可以认为错误回馈式训练法是变化坡度法的简化,其过程如下:
前向传播:数据从输入到输出的过程是一个从前向后的传播过程,后一节点的值
通过它前面相连的节点传过来,然后把值按照各个连接权重的大小加权输入活动
函数再得到新的值,进一步传播到下一个节点。
回馈:当节点的输出值与我们预期的值不同,也就是发生错误时,神经网络就要


“学习” (从错误中学习)。我们可以把节点间连接的权重看成后一节点对前
一节点的“信任” 程度(他自己向下一节点的输出更容易受他前面哪个节点输入
的影响)。学习的方法是采用惩罚的方法,过程如下:如果一节点输出发生错误,
那么他看他的错误是受哪个(些)输入节点的影响而造成的,是不是他最信任的
节点(权重最高的节点)陷害了他(使他出错),如果是则要降低对他的信任值
(降低权重),惩罚他们,同时升高那些做出正确建议节点的信任值。对那些收
到惩罚的节点来说,他也需要用同样的方法来进一步惩罚它前面的节点。就这样
把惩罚一步步向前传播直到输入节点为止。
对训练集中的每一条记录都要重复这个步骤,用前向传播得到输出值,如果发生
错误,则用回馈法进行学习。当把训练集中的每一条记录都运行过一遍之后,我
们称完成一个训练周期。要完成神经网络的训练可能需要很多个训练周期,经常
是几百个。训练完成之后得到的神经网络就是在通过训练集发现的模型,描述了
训练集中响应变量受预测变量影响的变化规律。
由于神经网络隐含层中的可变参数太多,如果训练时间足够长的话,神经网络很
可能把训练集的所有细节信息都“记”下来,而不是建立一个忽略细节只具有规

律性的模型,我们称这种情况为训练过度。显然这种“模型”对训练集会有很高
的准确率,而一旦离开训练集应用到其他数据,很可能准确度急剧下降。为了防
止这种训练过度的情况,我们必须知道在什么时候要停止训练。在有些软件实现
中会在训练的同时用一个测试集来计算神经网络在此测试集上的正确率,一旦这
个正确率不再升高甚至开始下降时,那么就认为现在神经网络已经达到做好的状
态了可以停止训练。
图6中的曲线可以帮我们理解为什么利用测试集能防止训练过度的出现。在图中可
以看到训度的出现。在图中可以看到训练集和测试集的错误率在一开始都随着训练
周期的增加不断降低,而测试集的错误率在达到一个谷底后反而开始上升,我们认
为这个开始上升的时刻就是应该停止训练的时刻。
神经元网络和统计方法在本质上有很多差别。神经网络的参数可以比统计方法多
很多。如图4中就有13个参数(9个权重和4个限制条件)。由于参数如此之多,参
数通过各种各样的组合方式来影响输出结果,以至于很难对一个神经网络表示的模
型做出直观的解释。实际上神经网络也正是当作“黑盒”来用的,不用去管“盒子”
里面是什么,只管用就行了。在大部分情况下,这种限制条件是可以接受的。比如

银行可能需要一个笔迹识别软件,但他没必要知道为什么这些线条组合在一起就是
一个人的签名,而另外一个相似的则不是。在很多复杂度很高的问题如化学试验、
机器人、金融市场的模拟、和语言图像的识别,等领域神经网络都取得了很好的效
果。
神经网络的另一个优点是很容易在并行计算机上实现,可以把他的节点分配到不同
的CPU上并行计算。
在使用神经网络时有几点需要注意:第一,神经网络很难解释,目前还没有能对神
经网络做出显而易见解释的方法学。
第二,神经网络会学习过度,在训练神经网络时一定要恰当的使用一些能严格衡量
神经网络的方法,如前面提到的测试集方法和交叉验证法等。这主要是由于神经网
络太灵活、可变参数太多,如果给足够的时间,他几乎可以“记住”任何事情。
第三,除非问题非常简单,训练一个神经网络可能需要相当可观的时间才能完成。
当然,一旦神经网络建立好了,在用它做预测时运行时还是很快得。
第四,建立神经网络需要做的数据准备工作量很大。一个很有误导性的神话就是
不管用什么数据神经网络都能很好的工作并做出准确的预测。这是不确切的,要
想得到准确度高的 模型必须认真的进行数据清洗、整理、转换、选择等工作,

对任何数据挖掘技术都是这样,神经网络尤其注重这一点。比如神经网络要求所
有的输入变量都必须是0-1(或-1 -- +1)之间的实数,因此像“地区”之类文本
数据必须先做必要的处理之后才能用作神经网络的输入。
于是我们回忆,并且找到相爱的理由
.
※ 修改:·wizard 於 06月20日13:57:12 修改本文
※ 转载:· bbs.sjtu.edu.cn


收藏到ViVi   收藏此页到365Key
上一篇: 数据挖掘入门(六)
下一篇: 数据挖掘入门(八)
用户名:新注册) 密码: 匿名评论 [所有评论]
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
本栏搜索
  • Google
推荐新闻
     
   网站首页 -  网站地图 -  技术学习 -  网站投稿 -  帮助中心
Copyright 2003-2008 www.javah.net All Rights Reserved
2008 如果你喜欢本站 请收藏本站 并推荐给你的朋友一起分享