精华内容
下载资源
问答
  • 数据挖掘神经网络算法源程序
  • 神经网络算法数据挖掘技术中常用的一种算法,具有高正确率、抗噪声数据能力强等优势。SQL Server 2005为我们提供了一种简单的方式来应用神经网络算法。我的毕设课题就是在SQL Management Studio、BI Dev Studio等...
  • python 神经网络 数据挖掘 python实现的神经网络算法
  • 如何能够更有效的利用好这些信息已经越来越受到人们的重视而数据挖掘正是一种从数据中提取有用的信息,并将之应用于各个行业的方法本文首先对数据挖掘中受到广泛关注的决策树算法遗传算法和神经网络算法进行了综述,...
  • 数据挖掘 .遗传算法.神经网络.Matlb e书10本
  • 目前数据挖掘方法主要有4种,这四种算法包括遗传、决策树、粗糙集和神经网络算法。以下对这四种算法进行一一解释说明。 遗传算法:该算法依据生物学领域的自然选择规律以及遗传的机理发展而来,是一种随机搜索的算法...

    目前数据挖掘方法主要有4种,这四种算法包括遗传、决策树、粗糙集和神经网络算法。以下对这四种算法进行一一解释说明。

    遗传算法:该算法依据生物学领域的自然选择规律以及遗传的机理发展而来,是一种随机搜索的算法,利用仿生学的原理来对数据知识进行全局优化处理。是一种基于生物自然选择与遗传机理的随机搜索算法,是一种仿生全局优化方法。这种算法具有隐含并行性、易与其它模型联合等优点从而在数据挖掘中得到了应用。

    决策树算法:在对模型的预测中,该算法具有很强的优势,利用该算法对庞大的数据信息进行分类,从而对有潜在价值的信息进行定位,这种算法的优势也对照明显,在利用这种算法对数据进行分类时相当迅速,同时描述起来也很简明,在大规模数据处理时,这种方法的应用性很强。

    粗糙集算法:这个算法将知识的理解视为对数据的划分,将这种划分的一个总体叫做观念,这种算法的基本原理是将不够精确的知识与确定的或者正确的知识进行类别同时进行类别刻画。

    神经网络算法:在对模型的预测中,该算法具有很强的优势,利用该算法对庞大的数据信息进行分类,从而对有潜在价值的信息进行定位,这种算法的优势也对照明显,在利用这种算法对数据进行分类时相当迅速,同时描述起来也很简明,在大规模数据处理时,这种方法的应用性很强。光缆监测及其故障诊断系统对于保证通讯的顺利至关重要,同时这种技能方法也是顺应当今时代的潮流必须推广使用的方法。同时,该诊断技能为通讯管网和日常通讯提供了可靠的技能支持和可靠的后期保证。

    人工智能、大数据、云计算和物联网的未来发展值得重视,均为前沿产业,多智时代专注于人工智能和大数据的入门和科谱,在此为你推荐几篇优质好文:
    数据挖掘十大经典算法,具体是哪几个?
    http://www.duozhishidai.com/article-9689-1.html
    大数据时代,软件工程师渐退,算法工程师崛起
    http://www.duozhishidai.com/article-5102-1.html
    数据挖掘十大经典算法
    http://www.duozhishidai.com/article-4208-1.html


    多智时代-人工智能大数据学习入门网站|人工智能、大数据、物联网云计算的学习交流网站

    多智时代-人工智能大数据学习入门网站|人工智能、大数据、云计算、物联网的学习服务的好平台
    展开全文
  • 用c++实现了数据挖掘算法中的神经网络和遗传算法的结合的实例!值得参考···
  • 针对当前电算化会计中财务异常数据检测系统中效率低下、人力及时间资源消耗大、智能化程度低等问题,文中提出了一种基于数据挖掘神经网络的财务异常数据监测分析算法。采用数据挖掘的方法对原始财务数据进行处理,...
  • 有段时间没有进行我们的微软数据挖掘算法系列了,最近手头有点忙,鉴于上一篇的神经网络分析算法原理篇后,本篇将是一个实操篇,当然前面我们总结了其它的微软一系列算法,为了方便大家阅读,我特地整理了一篇目录...

    前言

    有段时间没有进行我们的微软数据挖掘算法系列了,最近手头有点忙,鉴于上一篇的神经网络分析算法原理篇后,本篇将是一个实操篇,当然前面我们总结了其它的微软一系列算法,为了方便大家阅读,我特地整理了一篇目录提纲篇:大数据时代:深入浅出微软数据挖掘算法总结连载, 我打算将微软商业智能中在DM这块所用到的算法全部集中在这个系列中,每篇包含简要算法原理、算法特点、应用场景以及具体的操作详细步骤,基本能涵盖大部 分的商业数据挖掘的应用场景,有兴趣的童鞋可以点击查阅。本篇我们将要总结的算法为:Microsoft 神经网络分析算法,此算法微软挖掘算法系列中最复杂也是应用场景最广泛的一个,简单点讲:就是模拟我们的大脑从茫茫的数据海洋中思考出有用的信息,来达到数据挖掘的目的。原理可以参考上篇。

    应用场景介绍

    关于Microsoft神经网络算法的应用场景还是蛮多的,在上一篇原理篇我们就介绍过,其主要是应用在以下领域:

    • 营销和促销分析,如评估直接邮件促销或一个电台广告活动的成功情况。
    • 根据历史数据预测股票升降、汇率浮动或其他频繁变动的金融信息。

    • 分析制造和工业流程。

    • 文本挖掘。

    • 分析多个输入和相对较少的输出之间的复杂关系的任何预测模型。

    当然以上的应用场景说的很泛泛,并且没有一个特定的应用场景,这个是可以理解的,因为此算法为模拟生物行型算法,也就是说在特定的环境中只要有足够 的”证据“支持,我们人类自己能通过主观判断出结果的应用场景,Microsoft神经网络算法就能应用,但是当我们人脑思维对于少量”证据“下可以主观 的判断,但是面对茫茫的”证据“海洋下我们人类脑子想要理清头绪,然后判断出结果就比较吃力了,这样的就是神经网络应用场景了。

    上面的几种应用场景中,并不是只有Microsoft神经网络算法就能挖掘的,比如:营销中评比邮件还是电台广告这两种方式那种更有效,其实这是 Microsoft决策树分析算法的最佳应用场景;历史数据预测股票升降这个是Microsfot时序算法的典型应用场景;....但是所有的这些这 些...是因为我们能确定下来前提或者说挖掘范围:比如:营销评比,我们就比较邮件还有电台广告...但是出现一种特殊情况:比如两者都不能促进营 销...反而是因为公司最近加强了销售手段而提升的,或者说某种不确定的因素造成的业绩提升,对于这种情况我们利用Microsoft决策树算法也是没用 的。而用Microsoft神经网络算法就可以分析出来。

    还有一种更特殊的应用场景:当我们面对一堆的数据而要基于某种目的去数据挖掘时,感觉到无从下手或者在DM中选择不到合适的算法的时候,这时候就是Microsoft神经网络分析算法的应用场景了。

    技术准备

    (1)微软案例数据仓库(AdventureWorksDW208R2),案例数据仓库中的呼叫中心的数据表,一张事实表FactCallCenter,下面步骤中我们会详细介绍这张表里面的数据。

    (2)VS2008、SQL Server、 Analysis Services。

    挖掘目的

    在一些大的商业公司中都有自己的呼叫中心,比如:移动的10086,联通的10000....等等,而这些呼叫中心中除了再联系完他们之后让你选择:满意、不满意、灰常不满意来作为他们的服务等级标准外,在行业中还有一个指标来评比,这个指标被称作:挂断率,用来反映客户的失望度,就是在我们接进他们的客服中心的之间,如果选择人工服务,他让你等待...你不爽,挂断了,这就产生了一个挂断事例,而通过挂断事例总和在所有呼入人数的所占比就是挂断率指标了。挂断率越高说明他们客服中心服务质量越差。

    挖掘的目的就是找出影响“挂断率”的因素有哪些,是客服MM太少?态度不好?声音不甜美?服务不周到?.........从而提高呼叫中心的服务质量,增加营收。

    操作步骤

    (1)我们这里还是利用上一期的解决方案,直接打开,添加数据源视图,方法参照前几篇,我们直接看图:

    右键,来浏览下这个表中的数据明细:

    参照微软案例数据库官方说明,我们将这个事实表里面数据明细列出来。下面是字段说明:

    列名

    包含内容

    FactCallCenterID

    数据导入到数据仓库中时创建的一个任意键。

    DateKey

    呼叫中心的运营日期。

    由于供应商为每个运营日中的每个轮班时间都提供了一个单独的报表,因此日期不是唯一的。

    WageType

    指示当天是工作日、周末还是节假日。

    Shift

    指示为其记录呼叫的轮班时间。此呼叫中心将工作日划分为四个轮班时间:AM、PM1、PM2 和 Midnight。

    LevelOneOperators

    指示值班的一级接线员的数量。呼叫中心员工从一级开始起步。

    LevelTwoOperators

    指示值班的二级接线员的数量。员工必须达到一定数量的工作小时数后,才有资格成为二级接线员。

    TotalOperators

    此轮班时间内存在的接线员的总数。

    Calls

    此轮班时间内收到的呼叫数。

    AutomaticResponses

    完全通过自动呼叫处理(交互式语音应答,即 IVR)来处理的呼叫数。

    Orders

    由呼叫产生的订单数。

    IssuesRaised

    由呼叫产生的需要后续操作的问题的数量。

    AverageTimePerIssue

    应答一次来电所需的平均时间。

    ServiceGrade

    指示此轮班时间的“挂断率”。挂断率是呼叫中心经常使用的一个指标。挂断率越高,说明客户的满意度越差,因此丢失潜在订单的可能性也就越大。挂断率是按轮班时间计算的。

    其实上面的表中已经列出了几个关键字段,我们来看,其中我们上面提到的“挂断率”:ServiceGrade字段了,前面的一些行就是记录一些呼叫 中心工作信息了,当我们面对这些信息是无从下手的,因为我们看不出来那些因素会影响到ServiceGrade指标值的大小的,当然这时候我们就用 Microsoft神经网络分析算法采取诱探的方式进行挖掘分析了。

    (2)新建挖掘结构

    我们来新建这个数据挖掘模型,简单的步骤,具体内容可参照我之前的博客内容,看几个关键步骤:

    我们点击下一步,然后进行输入和输出的设置

    这里我们不知道那些因素会影响到“挂断率”这个指标,我们就乖乖的全选得了,这叫做:宁滥勿缺!....我去....但是有两个我们还是没选,一个 DateKey..这个是上班记录日期,我基本可以肯定这个指标和那天上班没有毛关系,当然你也可以选择,那处理时间更长一些,还有一个是 FactCallCenterID,这个是键值,肯定不选择的,然后输出我们选择了:ServiceGrade挂断率、然后还有Orders(产生的订单 量),这个和绩效有关,我们顺便看看那些因素会产生更多的订单,选他的原因你懂得!然后还有一个LevelOneOperators,这个是第一个岗位的 数量,通过它我们可以分析出这种分两种岗位级别会不会有用。

    我们点击下一步:

    这里提示下,神经网络分析算法是不允许钻取的,这个是可以理解的,因为它不是线性函数,也就是说你钻取的是一个个“神经元”节点,而这些“神经元”同样又依靠其它的“神经元”支撑,所以理论上你的下钻是毫无意义的,不明白的可以参考我上篇原理篇。

    我们来部署该挖掘模型,然后进行处理,过程简单,不废话介绍。

    结果分析

    不介绍,我们直接上图看结果

    神经网络的“模型查看器”很简单,可以看到只有一个面板,里面分为两部分:输入和输出,下面的就是各个变量的属性值,通过操作上面的输入和输出就可以分析不同变量对输出的影响了,这个类似于“聚类分析算法”的特征分析面板。

    输入属性很简单,我们可以选择上面我们选择的各种属性:

    可以选择值

    这里我们可以看到,上面我们选择了“自助应答”这个值,但是它显示的值是一个分段的区间值,这里我们要说明一下神经网络的特点,对于离散型属性 值,Microsoft神经网络是采取采样分段来进行区间值截断,但是这个区间值并不是严格意义的按照数学上的等比数列进行分组,比如:

    我们来看一下ServiceGrade这个离散值在vs中的分组方式:

    ServiceGrade 属性在理论上是介于 0.00(应答所有呼叫)和 1.00(挂断所有呼叫)之间的数值,但是在神经网络算法中是按照上面的图进行分组的,会将分组成 0.0748051948 - 0.09716216215 这样的范围。尽管此分组在数学上很准确,但此类范围可能对业务用户并没有太大意义。要以不同的方式对数值进行分组,可以创建数值数据列的一个或多个副本, 并指定数据挖掘算法应如何处理这些值。这样更能顺利的接近我们的目标分析值。

    我们可以看到,这个输出也是同样的方式:

    下面我们来分析上面的第一个挖掘目的:那些因素会影响(挂断率)Service Grade.我们选择一个分组最高的,一个分数最低的

    上图总可以看到,我们选择的输出为“挂断率”:Service Grade 这里选择了两个区间:0.030-0.072和0.126-0.210,0.210的概念就是有一百个客户打来电话,人家不爽,给你挂断的人数有21个, 已经是一个很高的值了,这个值越高说明服务质量越差,我们来看一下变量,很明显:影响“挂断率”的第一个因素为:Average Time Per Issue(应答花费的平均时间)。

    “应答花费的平均时间”在44.000-70.597之间的更倾向于0.030-0.072这个低分值的应答率,说明啥?也就是说人家打来电话一般在这个时间给你解决掉的,人家都比较满意,都不会挂断你。

    第二个因素“Orders”订单数量,这个也是在321.940-539.000之间的,挂断率更低,其实这个应该是因为挂断率低而导致订单数量增加

    我们来看第三个因素“应答花费的平均时间”在89.087-120.000之间的,挂断率直接飙升到0.126-0.210.....纳尼!!!这是为毛?...客服应答的时间越久...挂断率越高!

     哦哦...我猜这部分一般是客服MM给人家解释的不满意,然后人家一直想问明白, 丫的客服MM就是解释不清楚,于是乎客户果断挂电话,不再鸟你了。当然还存在一种情况就是客户打电话一直骚扰着客户MM...然后...然后客服MM就给 挂断了...当然..这些就是猜测了...我们不关心过程,只关心结果:在这个区间的挂断率就是高,有图有真相。

    我好奇的比较下“应答花费的平均时间”的两个区间的对比值,我们来看:

    嘿嘿....应答平均时间在区间44.000-70.597之间的“挂断率”就是很低,而且评分在100分!看上图,概率在53.48%,而成为高“挂断率”的概率才为:6.18%。

    下面的应答平均时间在区间89.087-120.000之间的“挂断率”很高,评分在74.01,评分值的高低反映的就是这个判断的可信度大小,并且看成为高“挂断率”的概率飙升为:45.22%。

    再往下看,我们还发现了一个更可爱的情况,截个图看看:

     这个Shift的值代表为轮班时间,看上面的值显示的是midnight....深夜...漆黑的夜晚...给客服MM打电话的挂断率概率都挺低的....这是神马原因.....看来微软给的案例数据库数据还是挺真实的!

    其它的属性我这里就不分析了,方法同上。其实到这里我们已经利用Microsoft神经网络分析算法已经分析出影响“挂断率”最重要的因素为:Average Time Per Issue(应答平均时间),下面我们调整输入,直接来分析这个因素:

    在44.000-70.597之间的,清一色的低挂断率,并且产生的订单量最可能为321.940-539.000,汗...你妹...上班期间最好还是在深夜。下面接着看:

    换了一个区间...结果基本没变,原因不解释

    下一个区间,情况发生了变化,在这个区间里,订单为50.000-181.677之间的已经展现出来高”挂断率“的趋势。

    .....我去...到了这个区间...成了清一色的高”挂断率”,并且上班时间成了(PM2)下午....订单数减少至50.000-181.677....看来下午客服中心应该都放假,全部改成“深夜”上班...嘿嘿...

    为此我通过数据源视图浏览数据,通过透视表来验证一下我们的推断是否正确,看看下面的图就知道了:

    是吧...平均应答时间越久,应答率分数越高,说明挂断率越高。

    我们也可以借助Microsoft神经网络算法的特性,对上面咱们推断的结论进行反向验证,我们将输出改成Average Time Per Issue “应答平均时间”,然后还是选择两个区间值来看看,影响这个属性的变量值有哪些

    看到了嘛...很高的挂断率在0.126-0.210之间的应答平均时间更倾向于89.087-120.000,同样低“挂断率”的就趋向于44.000-79.597了。

    咱们属性值就分析到这里,有兴趣的童鞋可以继续分析其它的。

    结语

    本篇文章到此结束了...关于Microsoft神经网络算法的应用场景非常的广泛,其实这几年渐渐兴起的语音识别、人工智能、文本挖掘等领域背后 的最重要的支撑算法就是神经网络算法了,有关基础原理可以参照我上一篇文章,本篇就不做深入介绍了,后续文章继续分析其它问题。

    转载于:https://www.cnblogs.com/captain_ccc/articles/4093698.html

    展开全文
  • /*神经网络SOM算法思想:分为输入层和竞争层,输入层就是样本的输入,假如我现在有5个样本A,B,C,D,E,他们是5维向量,竞争层是10*10的二维平面,相当于100个神经元,这些神经元也是5维向量,这些神经元对输入向量进行...
    /*
    神经网络SOM算法思想:分为输入层和竞争层,输入层就是样本的输入,假如我现在有5个样本A,B,C,D,E,他们是5维向量,竞争层是10*10的二维平面,相当于100个神经元,这些神经元也是5维向量,这些神经元对输入向量进行竞争,最后只有一个神经元获胜,越是与输入向量相似,竞争力越强,假如现在位于(7,8)的神经元最相似,它有权力去修改以它为中心的神经元的值,越靠近它的神经元影响越大,越是接近获胜神经元。假如样本A对应的获胜神经元是(7,8),B对应的获胜神经元是(6,8),因为这两个神经元靠得很近,所以样本A和B很相似。如果C对应的获胜神经元是(1,1),与另外两个距离比较远,所以C与A,B相似度较低。
    */
    #include<fstream.h> #include<iomanip.h> #include<stdio.h> #include<cstdlib.h> #include<math.h> using namespace std; #define InputLayerNum 35 #define OutputLayerRow 8 #define OutputLayerColumn 12 #define total_iteration_Num 80 #define error_limit 0.0001 #define efficiency 0.9 int i,j,k,l,m,n; int inputMode[26][7][5]; double weight[OutputLayerRow*OutputLayerColumn][InputLayerNum]; int current_iteration_num=0; double study_efficiency=efficiency; double distance[OutputLayerRow*OutputLayerColumn]; int neighbor_width=OutputLayerColumn; int neighbor_height=OutputLayerRow; int row[OutputLayerRow],column[OutputLayerColumn]; int flag[OutputLayerRow][OutputLayerColumn]; int temp_row,temp_column; int winner_row,winner_column; double min_distance=1000.0; /****************************************************/ //该函数初始化距离变量为0,初始化保存生胜出节点的位置的变量 /****************************************************/ void init_distance(){ for(i=0;i<OutputLayerRow;i++) for(j=0;j<OutputLayerColumn;j++) distance[i*OutputLayerColumn+j]=0.0; } /****************************************************/ //该函数用于计算欧氏距离,并找到获胜神经元 /****************************************************/ void eula_distance(){ int ttLow,ttUp,ppLow,ppUp; ttLow=winner_column-neighbor_width/2; ttUp=winner_column+neighbor_width/2; ppLow=winner_row-neighbor_height/2; ppUp=winner_row+neighbor_height/2; if(ttLow<0) ttLow=0; if(ttUp>=OutputLayerColumn) ttUp=OutputLayerColumn-1; if(ppLow<0) ppLow=0; if(ppUp>=OutputLayerRow) ppUp=OutputLayerRow-1; for(i=ppLow;i<=ppUp;i++) for(j=ttLow;j<=ttUp;j++){ if(!(flag[i][i]==100)){ for(m=0;m<7;m++) for(n=0;n<5;n++) distance[i*OutputLayerColumn+j]+=pow((inputMode[l][m][n]- weight[i*OutputLayerColumn+j][m*5+n]),2); if(distance[i*OutputLayerColumn+j]<min_distance){ min_distance=distance[i*OutputLayerColumn+j]; temp_row=i; temp_column=j; } } } if(current_iteration_num>0){ if(min_distance<=error_limit){ row[temp_row]=temp_row; row[temp_column]=temp_column; flag[temp_row][temp_column]=100; } } } /****************************************************/ //调整权值 /****************************************************/ void weight_change(){ int ttLow,ttUp,ppLow,ppUp; winner_row=temp_row; winner_column=temp_column; ttLow=winner_column-neighbor_width/2; ttUp=winner_column+neighbor_width/2; ppLow=winner_row-neighbor_height/2; ppUp=winner_row+neighbor_height/2; if(ttLow<0) ttLow=0; if(ttUp>=OutputLayerColumn) ttUp=OutputLayerColumn-1; if(ppLow<0) ppLow=0; if(ppUp>=OutputLayerRow) ppUp=OutputLayerRow-1; for(i=ppLow;i<=ppUp;i++) for(j=ttLow;j<=ttUp;j++){ if(!(flag[i][j]==100)){ for(m=0;m<7;m++) for(n=0;n<5;n++) weight[i*OutputLayerColumn+j][m*5+n]+= study_efficiency*(inputMode[l][m][n]-weight[i*OutputLayerColumn+j][m*5+n]); } } } /****************************************************/ //调整学习效率以及获胜节点的邻域大小 /****************************************************/ void paraChange(){ study_efficiency=study_efficiency*(1.0-((double)current_iteration_num)/total_iteration_Num); neighbor_width=(int)(neighbor_width*(1.0-((double)current_iteration_num)/total_iteration_Num)); neighbor_height=(int)(neighbor_height*(1.0-((double)current_iteration_num)/total_iteration_Num)); } /****************************************************/ //该函数用于将所有输入模式从文件中读入,并存放在数组inputMode中 //同时进行权值的初始化,采用随机赋值的方法 /****************************************************/ void initialize(){ for(i=0;i<OutputLayerRow;i++) row[i]=100; for(j=0;j<OutputLayerColumn;j++) column[j]=100; for(i=0;i<OutputLayerRow;i++) for(j=0;j<OutputLayerColumn;j++) flag[i][j]=0; FILE *pf=fopen("输入数据.txt","a+"); if(pf==NULL){ cout<<"Can not input file!\n"; exit(0); } for(i=0;i<26;i++) for(j=0;j<7;j++) for(k=0;k<5;k++) fscanf(pf,"%d",&inputMode[i][j][k]); //用于测试是否能够正确读入输入模式 char character[26]; for(i=0;i<26;i++) character[i]=(65+i); ofstream mode("输出数据.txt",ios::out); for(i=0;i<26;i++){ mode<<character[i]<<'\n'<<endl; for(j=0;j<7;j++){ for(k=0;k<5;k++) mode<<inputMode[i][j][k]<<" "; mode<<"\n"; } mode<<"\n\n\n"; } //权值随机初始化,采用随机赋值的方法 for(i=0;i<OutputLayerRow;i++) for(j=0;j<OutputLayerColumn;j++) for(k=0;k<InputLayerNum;k++) weight[i*OutputLayerColumn+j][k]=(double)(rand()%101)/100.0; //用于测试是否能够正确初始化权值 ofstream quan("初始权值.txt",ios::out); for(i=0;i<OutputLayerRow;i++) for(j=0;j<OutputLayerColumn;j++){ quan<<"\n\n\n"<<"Node["<<i+1<<"]["<<j+1<<"]"<<"\n"; for(k=0;k<InputLayerNum;k++){ if(k%5==0) quan<<"\n"; quan<<setprecision(6)<<setiosflags(ios::fixed)<<weight[i*OutputLayerColumn+j][k]<<" "; } quan<<"\n\n\n"; } } int main(){ int iteration_numbers[26]; int total_num=0; char character[26]; void test_netWork_1(); void test_netWork_2(); for(l=0;l<26;l++){ iteration_numbers[l]=0; character[l]=(65+l); } initialize(); for(l=0;l<26;l++){ winner_row=OutputLayerRow/2; winner_column=OutputLayerColumn/2; while(current_iteration_num<total_iteration_Num){//迭代次数控制 init_distance(); eula_distance(); weight_change(); if(min_distance<=error_limit) break; ++current_iteration_num; paraChange(); } iteration_numbers[l]=current_iteration_num+1; neighbor_width=OutputLayerColumn; //修改邻域的宽度 neighbor_height=OutputLayerRow; //修改邻域的高度 study_efficiency=efficiency; //学习率重置 current_iteration_num=0; //重置迭代次数 min_distance=1000.0; //重置最小距离 } /***********************************/ //输出部分 /***********************************/ for(l=0;l<26;l++) total_num+=iteration_numbers[l]; ofstream iteration_num("迭代次数.txt",ios::out); for(l=0;l<26;l++){ iteration_num<<character[l]<<"迭代"<<iteration_numbers[l]<<"次!\n"<<endl; if(l==25) iteration_num<<"整个训练过程共迭代"<<total_num<<"次!\n"<<endl; } ofstream all_weight("训练后所有权值.txt",ios::out); ofstream winner_weight("训练后胜出权值.txt",ios::out); for(i=0;i<OutputLayerRow;i++) for(j=0;j<OutputLayerColumn;j++){ printf("\n\n\n"); all_weight<<"\n\n\n"<<"Node["<<i+1<<"]["<<j+1<<"]"<<"\n"; for(k=0;k<InputLayerNum;k++){ if(k%5==0){ printf("\n"); all_weight<<"\n"; } if(weight[i*OutputLayerColumn+j][k]>0.9999999) weight[i*OutputLayerColumn+j][k]=1.0; if(weight[i*OutputLayerColumn+j][k]<0.0000001) weight[i*OutputLayerColumn+j][k]=0.0; printf("%f ",weight[i*OutputLayerColumn+j][k]); all_weight<<setprecision(8)<<setiosflags(ios::fixed)<<weight[i*OutputLayerColumn+j][k]<<" "; } } ofstream winner_node("获胜节点.txt",ios::out); for(i=0;i<OutputLayerRow;i++) for(j=0;j<OutputLayerColumn;j++){ if(flag[i][j]==100){ //获胜节点 printf("\n\n\n"); winner_weight<<"\n\n\n"<<"Node["<<i+1<<"]["<<j+1<<"]"<<"\n"; for(k=0;k<InputLayerNum;k++){ if(k%5==0){ printf("\n"); winner_weight<<"\n"; } if(weight[i*OutputLayerColumn+j][k]>0.9999999) weight[i*OutputLayerColumn+j][k]=1.0; if(weight[i*OutputLayerColumn+j][k]<0.0000001) weight[i*OutputLayerColumn+j][k]=0.0; printf("%f ",weight[i*OutputLayerColumn+j][k]); winner_weight<<setprecision(8)<<setiosflags(ios::fixed)<<weight[i*OutputLayerColumn+j][k]<<" "; } winner_node<<"Node["<<i+1<<"]["<<j+1<<"]"<<endl; } } printf("\n"); test_netWork_1(); test_netWork_2(); return 0; } void test_netWork_1(){ ofstream test1("标准测试.txt",ios::out); char character[26]; for(i=0;i<26;i++) character[i]=(65+i); for(l=0;l<26;l++){ for(i=0;i<OutputLayerRow;i++) for(j=0;j<OutputLayerColumn;j++) distance[i*OutputLayerColumn+j]=0.0; min_distance=1000; for(i=0;i<OutputLayerRow;i++) for(j=0;j<OutputLayerColumn;j++){ for(m=0;m<7;m++) for(n=0;n<5;n++) distance[i*OutputLayerColumn+j]+=pow(inputMode[l][m][n]-weight[i*OutputLayerColumn+j][m*5+n],2); if(distance[i*OutputLayerColumn+j]<min_distance){ min_distance=distance[i*OutputLayerColumn+j]; temp_row=i; temp_column=j; } } test1<<character[l]<<"'s winner is Node["<<temp_row+1<<"]["<<temp_column+1<<"]"<<endl<<endl; } } /****************************************************/ //利用非标准数据测试训练后的网络 /****************************************************/ void test_netWork_2(){ ofstream test2("非标准测试.txt",ios::out); char character[26]; FILe *pf=fopen("非标准数据测试.txt","a+"); if(pf==NULL){ cout<<"Can not open input file!\n"; exit(0); } for(i=0;i<26;i++) for(j=0;j<7;j++) for(k=0;k<5;k++) fscanf(pf,"%d",&inputMode[i][j][k]); for(i=0;i<26;i++) character[i]=(65+i); for(l=0;l<26;l++){ for(i=0;i<OutputLayerRow;i++) for(j=0;j<OutputLayerColumn;j++) distance[i*OutputLayerColumn+j]=0.0; min_distance=1000; for(i=0;i<OutputLayerRow;i++) for(j=0;j<OutputLayerColumn;j++){ for(m=0;m<7;m++) for(n=0;n<5;n++) distance[i*OutputLayerColumn+j]+=pow(inputMode[l][m][n]-weight[i*OutputLayerColumn+j][m*5+n],2); if(distance[i*OutputLayerColumn+j]<min_distance){ min_distance=distance[i*OutputLayerColumn+j]; temp_row=i; temp_column=j; } } test2<<character[l]<<"'s winner is Node["<<temp_row+1<<"]["<<temp_column+1<<"]"<<endl<<endl; } }

     

    转载于:https://www.cnblogs.com/wust-ouyangli/p/6571900.html

    展开全文
  • Google搜索引擎的核心_PageRank算法综述 人工神经网络算法数据挖掘中的应用
  • 本篇文章继续我们的微软挖掘系列算法总结,前几篇文章已经将相关的主要算法做了详细的介绍,我为了展示方便,特地的整理了一个目录提纲篇:大数据时代:深入浅出微软数据挖掘算法总结连载, 有兴趣的童鞋可以点击...

    http://www.cnblogs.com/captain_ccc/articles/4093677.html


    前言

    本篇文章继续我们的微软挖掘系列算法总结,前几篇文章已经将相关的主要算法做了详细的介绍,我为了展示方便,特地的整理了一个目录提纲篇:大数据时代:深入浅出微软数据挖掘算法总结连载, 有兴趣的童鞋可以点击查阅,在开始Microsoft 神经网络分析算法之前,本篇我们先将神经网络分析算法做一个简单介绍,此算法由于其本身的复杂性,所以我打算在开始之前先将算法原理做一个简单的总结,因 为本身该算法就隶属于高等数学的研究范畴,我们对算法的推断和验证过程不做研究,只介绍该算法特点以及应用场景,且个人技术能力有限,不当之处还望勿喷。

    算法起源

    在思维学中,人类的大脑的思维分为:逻辑思维、直观思维、和灵感思维三种基本方式。

    而神经网络就是利用其算法特点来模拟人脑思维的第二种方式,它是一个非线性动力学系统,其特点就是信息分布式存储和并行协同处理,虽然单个神经元的 结构及其简单,功能有限,但是如果大量的神经元构成的网络系统所能实现的行为确实及其丰富多彩的。其实简单点讲就是利用该算法来模拟人类大脑来进行推理和 验证的。

    我们先简要的分析下人类大脑的工作过程,我小心翼翼的在网上找到了一张勉强看起来舒服的大脑图片

    嗯,看着有那么点意思了,起码看起来舒服点,那还是在19世纪末,有一位叫做:Waldege的大牛创建了神经元学活,他说人类复杂的神经系统是由 数目繁多的神经元组成,说大脑皮层包括100亿个以上的神经元,每立方毫米源数万个,汗..我想的是典型的大数据。他们相互联系形成神经网络,通过感官器 官和神经来接受来自身体外的各种信息(在神经网络算法中我们称:训练)传递中枢神经,然后经过对信息的分析和综合,再通过运动神经发出控制信息(比如我在 博客园敲文字),依次来实现机体与外部环境的联系。

    神经元这玩意跟其它细胞一样,包括:细胞核、细胞质和细胞核,但是它还有比较特殊的,比如有许多突起,就跟上面的那个图片一样,分为:细胞体、轴突 和树突三分部。细胞体内有细胞核,突起的作用是传递信息。树突的作用是作为引入输入信息的突起,而轴突是作为输出端的突起,但它只有一个。

    也就是说一个神经元它有N个输入(树突),然后经过信息加工(细胞核),然后只有一个输出(轴突)。而神经元之间四通过树突和另一个神经元的轴突相联系,同时进行着信息传递和加工。我去...好复杂....

    我们来看看神经网络的原理算法公式

    中间那个圆圆的就是细胞核了,X1、X2、X3....Xn就是树突了,而Yi就是轴突了....是不是有那么点意思了,嗯...我们的外界信息是通过神经元的树突进行输入,然后进过细胞核加工之后,经过Yi输出,然后输出到其它神经元...

    但是这种算法有着它自身的特点,就好像人类的大脑神经元一样,当每次收到外界信息的输入,不停的刺激的同时会根据信息的不同发生自身的调节,比如: 通过不断的训练运动员学会了远动,不停的训练学会了骑自行车....等等吧这些人类的行为形成,其本质是通过不停的训练数百亿脑神经元形成的。而这些行为 的沉淀之后就是正确结果导向。

    同样该算法也会通过X1、X2、X3....Xn这些元素不停的训练,进行自身的参数的调整来适应,同样训练次数的增加而形成一个正确的结果导向。 这时候我们就可以利用它的自身适应过程产生正确的结果,而通过不断的训练使其具备学习功能,当然,该算法只是反映了人脑的若干基本特性,但并非生物系统的 逼真描述,只是某种简单的模仿、简化和抽象。

    该算法不同数字计算机一样,会按照程序的一步一步地执行运算,而是能够自身适应环境、总结规律、完成某种运算、识别或控制过程,而这就是机器人的起源...人工智能的基础。

    神经网络算法原理

    由于神经网络算法的设计面太大,我们此处暂且只分析Microsoft神经网络算法的原理,在Microsoft神经网络算法中,我们可以简化成下面这个图片:

    Microsoft神经网络使用的由最多三层神经元组成的“多层感知器”网络,分别为:输入层、可选隐含层和输出层。

    输入层:输入神经元定义数据挖掘模型所有的输入属性值以及概率。

    隐含层:隐藏神经元接受来自输入神经元的输入,并向输出神经元提供输出。隐藏层是向各种输入概率分配权重的位置。权重说明某一特定宿儒对于隐藏神经 元的相关性或重要性。输入所分配的权重越大,则输入值也就越重要。而这个过程可以描述为学习的过程。权重可为负值,表示输入抑制而不是促进某一特定结果。

    输出层:输出神经元代表数据挖掘模型的可预测属性值。

    数据从输入经过中间隐含层到输出,整个过程是一个从前向后的传播数据和信息的过程,后面一层节点上的数据值从与它相连接的前面节点传来,之后把数据加权之后经过一定的函数运算得到新的值,继续传播到下一层节点。这个过程就是一个前向传播过程。

    而当节点输出发生错误时,也就是和预期不同,神经网络就要自动“学习”,后一层节点对前一层节点一个“信任”程度(其实改变的就是连接件的权重), 采取降低权重的方式来惩罚,如果节点输出粗粗哦,那就要查看这个错误的受那些输入节点的影响,降低导致出错的节点连接的权重,惩罚这些节点,同时提高那些 做出正确建议节点的连接的权重。对那些受到惩罚的节点而说,也用同样的方法来惩罚它前面的节点,直到输入节点而止。这种称为:回馈。

    而我们学习的过程就是重复上面的介绍的流程,通过前向传播得到输入值,用回馈法进行学习。当把训练集中的所有数据运行过一遍之后,则称为一个训练周期。训练后得到神经网络模型,包含了训练集中相应值和受预测值影响变化的规律。

    在每个神经元中的隐含层中都有着复杂的函数,并且这些都非线性函数,并且类似生物学神经网络的基本传输特征,这些函数称之为:激活函数,即:输入值发生细微的变化有时候会产生较大的输出变化。

    当然Microsot神经网络算法使用的函数是这样的:

    其中a是输入值,而O是输出值。

    处理反向传播,计算误差,更新权值时输出层所用的误差函数为交叉熵

    上述公式中Oi是输出神经元i的输出,而Ti是基于训练样例的该输出神经元实际值。

    隐含神经元的误差是基于下一层的神经元的误差和相关权值来计算的。公式为:

    其中Oi是输出神经元i的输出,该单元有j个到下一层的输出。Erri是神经元i的误差,Wij是这两个神经元之间的权值。

    一旦计算出每个神经元的误差,则下一步是使用以下方法来调整网络中的权值。

    其中l为0-1范围内的数,称之为学习函数。

    其实以上函数应用的激活函数还是挺简单的。有兴趣的可以进行详细的研究和公式的推算,咱这里只是简要分析,列举算法特点。

    Microsoft神经网络分析算法特点

    经过上面的原理分析,我们知道了神经网络算法分为了:输入层、隐含层、输出层三层方式连接,其中隐含层是可选的,也就是说在Microsoft神经网络算法中如果不经过隐含层,则输入将会直接从输入层中的节点传递到输出层中的节点。

    输入层特点:如果输入层如果为离散值,那么输入神经元通常代表输入属性的单个状态。如果输入数据包含Null 值,则缺失的值也包括在内。具有两个以上状态的离散输入属性值会生成一个输入神经元,如果存在NUll值,会自动再重新的生成一个输入的神经元,用以处理 Null值,一个连续的输入属性将生成两个输入神经元:一个用于缺失的状态、一个用以连续属性自身的值。输入神经元可向一个多多个神经元提供输入。

    隐含层特点:隐含神经元接受来自输入神经元的输入,并向输出神经元提供输出。存在激活函数供其使用改变阀值。

    输出层特点:输出神经如果对于离散输入属性,输出神经元通常代表可预测可预测属性的单个预测状态,其中包括缺失的Null值。

    如果挖掘模型包含一个或多个仅用于预测的属性,算法将创建一个代表所有这些属性的单一网络,如果挖掘模型包含一个或多个同时用于输入和预测的属性,则该算法提供程序将为其中每个属性构建一个网络。

    对于具有离散值的输入属性和可预测属性,每个输入或输出神经元各自表示单个状态。对于具有连续值的输入属性和可预测属性,每个输入或输出神经元分别表示该属性值的范围和分布。

    算法提供程序通过接受之前保留的定性数据集也就是事例集合并将维持数据中的每个事例的实际已知值与网络的预测进行比较。即通过一个“批学习”的过程 来迭代计算的整个网络,并且改变的输入权重。该算法处理了整个事例集合之后,将检查每个神经元的预测值和实际值。该算法将计算错误程度(如果错误),并且 调整与神经输入关联的权重,并通过一个“回传”的过程从输出神经元返回到输出神经元。然后,该算法对整个事例集合重复该过程。经过以上的层层沉淀我们的算 法就算从一个不懂的“婴儿”逐渐成长成“成人”,而这个结果就是我们那它来发掘和预测的工具。

    神经网络分析算法应用场景

    神经网络研究内容广泛,非本篇文章所能涵盖,而且它反映了多学科交叉技术领域的特点。研究工作集中以下领域:

    (1)生物原型研究。从生理学、心理学、脑科学、病理学等生物科学方面研究神经细胞、神经网络、神经系统的生物原型结构及其功能机理。

    (2)建立理论模型。根据生物原型的研究,建立神经元、神经网络的理论模型。其中包括概念模型、知识模型、物理化学模型、数学模型等。
    (3)网络模型与算法研究。在理论模型研究的基础上构作具体的神经网络模型,以实现计算机模拟或准备制作硬件,包括网络学习算法的研究。这方面的工作也称为技术模型研究。
    (4)人工神经网络应用系统。在网络模型与算法研究的基础上,利用人工神经网络组成实际的应用系统,例如,完成某种信号处理或模式识别的功能、构造专家系统、制成机器人等等。

     我去....这那是我这个码农层面研究的事,上面说的种种如果有兴趣童鞋可以继续深入研究,随便一块玩好了都可以升官加禄,衣食无忧......

     

    回归正题,我们还是来看看我们的Microsoft 神经网络分析算法在数据挖掘领域的应用那些:

    • 营销和促销分析,如评估直接邮件促销或一个电台广告活动的成功情况。
    • 根据历史数据预测股票升降、汇率浮动或其他频繁变动的金融信息。

    • 分析制造和工业流程。

    • 文本挖掘。

    • 分析多个输入和相对较少的输出之间的复杂关系的任何预测模型。

    其实它的应用场景是最广泛的,比如当我们拿到一堆数据的时候,针对一个目标无从下手毫无头绪的时候,Microsoft 神经网络分析算法就是该应用的最佳场景了,因为其利用“人脑”的特点去茫茫的数据海洋中去发掘有用的信息。比如:BOSS把公司的数据库扔给你了...让 你分析下公司为啥不挣钱...或者说啥子原因导致的不盈利...这时候该算法就应该出场了。

    不过从最近的市场中发现,该算法的在"文本挖掘"中特别火,而且更在微软中得到充分利用,比如当前的:微软小冰,各种平台下的语音识别,并且就连苹果这样的孤傲的公司也在慢慢的臣服于该算法的魅力下,有兴趣可以查看本篇文章:http://www.yeeworld.com/article/info/aid/4039.html

    结语

    本篇文章到此结束了,满篇的只是简要的介绍了神经网络算法的一些基础和原理,当然因为该算法的高大上我暂且不做深入分析,只是记住其典型的应用场景即可,下一篇的文章我们将通过微软的VS工具使用该算法做一个详细的数据挖掘应用方法介绍。有兴趣的可以提前关注。


    展开全文
  • 神经网络算法--数据挖掘

    千次阅读 2009-12-01 09:23:00
    在 SQL Server Analysis Services 中,Microsoft 神经网络算法组合输入属性的每个可能状态和可预测属性的每个可能状态,并使用定型数据计算概率。之后,可以根据输入属性,将这些概率用于分类或回归,并预测被预测...
  • 数据挖掘-分类与预测-神经网络算法

    千次阅读 2018-08-12 18:57:18
    # 使用神经网络算法预测销量高低 import sys reload(sys) sys.setdefaultencoding('utf-8') #导入sys,重新设置编码格式主要是为了解决执行代码报:UnicodeDecodeError: 'ascii' codec can't decode by...
  • 不可多得的数据挖掘的好东东!压缩包内含有数据挖掘的完整文档,长达数十页。同时,附有全套的程序代码,由VC写成,代码又分两部分:数据...总之,压缩包内已经含有了基于神经网络的手写数字数据挖掘的全部资料了!!!
  • 1.人工神经网络: BP神经网络 误差逆传播算法训练的多层前馈网络 LM神经网络 基于梯度下降和牛顿法结合点多层前馈网络,迭代少,精度高 RBF径向积神经网络 可以任意精度逼近连续函数,适合解决...
  • 介绍了数据挖掘的定义和常用方法,研究了基于遗传BP神经网络数据挖掘算法,并对其交叉算子进行了改进,提高算法训练速度。实验结果表明,将该方法应用于油气识别中,效果良好,具有一定的实际应用价值。
  • 神经网络分类算法 数据挖掘

    万次阅读 2017-02-09 16:36:47
    神经网络分类介绍:  神经网络就是一组相互连接的输入输出单元,这些单元之间的每个连接都关联一个权重。...神经网络的优点就是对噪声数据有较好适应能力,并且对未知数据也具有较好的预测分类能力
  • 顺便说下,什么机器学习,数据挖掘,人工智能,这几个词语很多,也很容易用的模糊了,边界不是很清晰,我也不想做过多的解读与区分,免得弄巧成拙,或者班门弄斧。还是埋头实践吧。  后面的几篇主要从这么几个类别...
  • 有了上篇的基本理论之后,我们可以尝试去代码实现基本的一个BPN算法。  具体的算法代码,后面给出。... 除了自己代码实现外,还有很多工具可以帮助我们实现和理解神经网络算法,现在举例说明下。  1
  • /*人工神经网络BP算法思想: 神经网络一般分为3层(也可以多层),包括输入层,隐含层和输出层。通过有监督的学习拟合非线性函数。假如输入层有3个神经元,隐含层有5个神经元,输出层有1个神经元。有监督的学习是指既...
  • 原文出处: fengfenggirl(@也爱数据挖掘) 欢迎分享原创到伯乐头条 ...神经网络曾经很火,有过一段低迷期,现在因为深度学习的原因...本文介绍基本的反向传输神经网络(Backpropagation 简称BP),主要讲述算法
  • 本篇我们将要总结的算法为:Microsoft 神经网络分析算法,此...关于Microsoft神经网络算法的应用场景还是蛮多的,在上一篇原理篇我们就介绍过,其主要是应用在以下领域: 营销和促销分析,如评估直接邮件促销或一个
  • 本文介绍基本的反向传输神经网络(Backpropagation 简称BP),主要讲述算法的基本流程和自己在训练BP神经网络的一些经验。 BP神经网络的结构  神经网络就是模拟人的大脑的神经单元的工作方式,但进行了很大的...
  • BP神经网络R实现 ##设置工作空间 #先用setwd设置工作空间,如D盘,并将相关数据拷贝到该目录下 setwd("D:/BP") #读入数据 Data=read.csv("D:/BP/data") #数据命名 library(nnet) colnames(Data) ###最终...
  • 数据挖掘一种用于预测的神经网络BP算法结合Cauchy训练的改进,在收敛速度,局部极小点、网络瘫痪等问题上有所改善。
  • 有段时间没有进行我们的微软数据挖掘算法系列了,最近手头有点忙,鉴于上一篇的神经网络分析算法原理篇后,本篇将是一个实操篇,当然前面我们总结了其它的微软一系列算法,为了方便大家阅读,我特地整理了一篇目录...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 856
精华内容 342
关键字:

数据挖掘神经网络算法