导航:首页 > 源码编译 > 改进40算法1

改进40算法1

发布时间:2023-05-15 04:48:35

1. 个位数相加和为40有多少种算法

40=1+39=2+38=3+37=……=18+22=19+21=20+20
可见40可以分成20组两数相加
单数和双数各一半
所姿蔽氏以两个单数迹散的分法有并行10种

2. 【混合数据聚类分析】 聚类分析数据

种混合属性数据的聚类算法

摘 要: 提出一种基于属性分解的随机分组的改进方法,以提高聚类算法的稳定性和适用性。实验仿真结果表明,改进算法具有很好的稳定性和应用性。

关键词: 聚类;混合数据;分类属性

所谓聚类,就是将物理或抽象对象的集合构成为由类似的对象组成多个类或簇的过程。由聚类所生成的簇是一组数据对象的集合,同一簇中的数据对象尽可能相似,不同簇中的数据对象尽可能相异[1]。聚类算法在许多领域获得了广泛应用[2],但是,由于在实际应用中,许多数据集不仅包含数值属性的数据,同时也包含如地图颜色、几何纹理等分类属性的数据。因此使得基于传统的欧式距离划分的聚类算法难以适用于混合属性数据集的要求。为此各研究学者就此问题进行了深入地研究和探讨。

MacQueen 所提出的k-means 方法[3]是最早、也是最简单的聚类方法,但是该方法只能对数值属性的对象集进行聚类,无法对分类属性和混合型属性的对象集进行聚类。Huang 提出的k-modes 算法和k-prototypes 算法[4]推广了k-means 方法,使之可以对分类属性和混合型属性的数据集进行聚类。同时陈宁、陈安、周龙骧进一步提出了模糊k-prototypes 算法,并利用引进模糊聚类算法来提高聚类结果的准确性[5]。

上述方法在聚类过程中,均利用分类型属性简单匹配相异度,将分类型属性的数据转化为数值型属性数据间的基于距离的计算问题,从笑灶棚而解决了对混合属性数据集的聚类问题。但是上述方法在对分类属性数据和混合型属性数据辩悄进行聚类时,总会存在一些如聚类结果的随机性和不稳定性等缺点,甚至有时会出现空聚类[6-7]现象。

为此,本文在k-prototypes 算法的基础上进行改进,利用随机分组的思想动态地选取初始原型点,同时对分类属性数据采取属性分解的方法进行处理,从而提高算法的稳定性和适用性,使聚类结果更加理想化。

1 相关观念

聚类是将数据对象分成类或簇的过程,使同一个簇中的对象之间具有很高的相似度,而不同簇中的对象高度相异[2]。其中对象间的相异度度量用来表示对象间的相异程度,代价函数用来表示对象间的相似程度。

2 算法的改进

k-modes 算法和k-prototypes 算法在聚类混合属性数据时,对初值有明显的依赖,导致聚类结果不理想,甚至出现聚类空集的现象。因此本文在原有算法的基础上进一步改进,利用随机分组确定初始原型的方法,然后对随机分组得到的初始原型进一步加工处理,使得聚类结果对初值的依赖性有所降低,从而使聚类结果更合理、稳定,达到改进算法的目的。

2.1 分类属性处理算法

假定数据对象x 是具有m 维属性的数据对象,其中含有m1个数值型数据和m2个分类型属性。那么,可以直观地将数据对象x 看成分别有m1维数值属性和m2维分类属性组成,其中m2维分类属性又可以分别看成碰则由多维数据值组成。例如:表2中的分类型属性“渠道”可以看成是由“直接”、“间接”2维分类数据值组成的;分类型属性“语义范畴”可以看成是由“植物”、“语言”2维分类数据组成的。在计算中,分别将分类型属性看成是由多维的分类属性数据值组成的。

对象1的分解原型表示为:

1={2,{0(直接) ,1(间接)},{1(植物) ,0(语言)}};

对象2的分解原型表示为:

2={2,{1(直接) ,0(间接)},{0(植物) ,1(语言)}};

对象3的分解原型表示为:

3={3,{1(直接) ,0(间接)},{1(植物) ,0(语言)}};

对象4的分解原型表示为:

4={3,{0(直接) ,1(间接)},{1(植物) ,0(语言)}};

对象5的原型表示为:

5={2,{1(直接) ,0(间接)},{0(植物) ,1(语言)}}; 则对象1,2,5组成的聚类Q1的分解原型可以表示为: Q1={2,{2/3(直接) ,1/3(间接)},{0(植物) ,3/3(语言)}}; 则对象3,4组成的聚类Q2的分解原型可以表示为:

Q2={2,{1/2(直接) ,1/2(间接)},{2/2(植物) ,0(语言)}};

然后利用式(2)计算对象与聚类之间的距离,得到其中的最小距离。通过这种方式,可以有效地避免在分类属性中出现频率少的属性值丢失的现象,从而得到更合理的聚类的结果。

2.2 随机分组算法

随机分组算法的基本原理是依据需要聚类的个数k 和数据集中所包含数据的个数n 。将总数为n 的数据集划分为count=n/k组,然后从count 组中分别选择数据对象k 次,构成k 个聚类的初始原型值。

算法流程:

(1)分组数据集。已知数据集X={x1,x2,…,xn}是包含n 个数据对象的集合。依据数据集中数据个数n 和需要聚类的个数k ,将整个数据集分组成为count=n/k组,即数据集X={[x1,x2,…,xk],[xk+1,…,x2k],…}。如果分组后数据集中还有剩余的对象未分配,则将剩余的对象分配到任意组中,本文选择将其分配到第一个分组中。

(2)随机获得一个初始点。将数据集分组成为子数据集后,依次从count 个子数据集中随机选择一个数据对象,形成由count 个数据对象组成的新的子数据集。将这个新的子数据集中的所有m1个数值型属性中的值利用式(5)计算平均值作为初始点的对应的数值型属性的值,对于分类型属性的值,则利用2.1节的分类属性数据处理方法进行处理后作为初始值的对应分类型属性的值。

3) 重复步骤(2)k次,得到k 个初始点,作为聚类分析的k 个原型点。

2.3 聚类算法描述

改进算法的流程和k-prototypes 算法的流程基本相同。具体算法描述如下:

(1)将数据集中的每一个数据对象按照2.1节中的分类属性数据值的处理方法进行处理。

(2)利用随机分组算法获得k 个初始原型点,每一个初始原型点对应一个聚类原型初值。

(3)将数据集中剩下的任一个对象分配给一个聚类,根据相异度度量的距离公式计算的结果确定一个聚类的原型与它最近,分配给该聚类后,将聚类的原型更新。

4) 在所有的数据对象全部分配给聚类之后,重新计算该数据对象与当前每一个聚类之间的距离。如果发现一个数据对象它的最近原型属于另一个聚类而不是当前的聚类,将该数据对象重新分配给另一个聚类并更新两个聚类的原型。

(5)重复算法(4),直到数据集中的所有数据对象再没有对象变更聚类为止。

3 实验分析

一般评价聚类结果均是采用“误分率”等统计方法。在本文的仿真实验中,通过将本文的改进算法和k-prototypes 算法进行比较,采用错误的分类数目来评价聚类算法性能。错误的分类数目,即对算法的聚类结果和数据集本身进行比较,聚类结果中没有被正确分配到相应聚类的数据对象的数目。本文通过两个数据集进行实验。

(1)采用UCI 数据集中的abalone 数据集进行测试。该数据集包括涉及生活领域的8个类别的4 177个数据对象,其中含有1个分类型属性,1个整数型属性和6个实数型属性。分类属性数据对象中含有1 528个记录为F(父) 值,1 307个记录为M(母) 值,还有1 342个记录为I(未成年人) 值。

如图1所示,在改变聚类个数的情况下,通过比较两种算法的聚类结果的错误分类数目可知,改进算法在一定程度上比原有算法的稳定性更高。

(2)采用UCI 数据集中的post-operative patient数据集。该数据集中还有涉及生活领域的9个类别的90个数据对象,其中还有8个分类属性和1个整数型属性,包含有2个记录为I(病人送加护病房) ,24个对象为S(病人准备回家) ,64个对象为A(病人送去普通病房) 。 由图2可知,在分类属性较多的混合属性数据集中,改进算法的稳定性仍在一定程度上优于原型算法,保证了改进算法对于混合属性数据聚类结果的稳定性和有效性。

对于数值型数据和分类型数据的混合数值的聚类,目前虽然有一些算法,如k-modes 算法和k-prototypes 算法。但是这些算法在选择聚类初始点时过于随机,导致聚类结果不理想。因此本文提出了一种基于分类属性数据分解的随机分组选择初始原型的改进算法。但是在本文的改进算法中,仍然存在一些缺点,例如,聚类个数仍是人为确定,不能动态确定适合数据集合理的聚类的个数。因此,为了使改进算法的适应性和稳定性更好,同时使数据集的聚类结果与输入数据对象的顺序无关,动态确定聚类合理的聚类个数是今后的研究重点。 参考文献

[1] 王欣,徐腾飞,唐连章,等.SQL Server2005数据挖掘实例分析[M].北京,中国水利水电出版社,2008.

[2] Han Jiawei, KAMBER M. Data mining concepts and techniques[M]. 北京:机械工业出版社,2001.

[3] CHRISTOPHER J, BURGES C. A tutorial on support vector machines for pattern recognition[J]. Data Mining and knowledge Discovery, 1998: 2(2): 121-167.

[4] VAPNIK V N. An overview of statistical learning theory[J]. IEEE Trans on Neural Network , 1999; 10(5):988-999.

[5] 张文生,王珏. 利用支持向量机构造函数型连接网络的研究[J].计算机科学,2001,28(5):172-177.

[6] 赵立江,黄永青. 混合属性数据聚类初始点选择的改进[J].广西师范大学学报:自然科学报,2007,25(4):102-105.

[7] 林培俊,王宇. 对类属性和混合属性数据聚类的一种有效地算法[J].计算机工程与应用,2004,40(1):190-191.

3. 递归算法的弊端与改进

递归一直给人的感觉是简洁且优雅,但是在面对较大规模的问题时,递归的弊端就渐渐暴露出来了。因为大量栈的使用导致程序运行速度变得很慢,所以递归算法需要改进。

1.尾递郑困兄归:函数返回之前的最后一个操作若是递归调用,则该函数进行了尾递归。

但是我发现尾递归貌似并没有很显着的作用???(值得深究)

2.递归改递推,举例斐波拉切数列

递归算法大于40之后就会变得很慢喊袭,甚至算不出来。而递推算法可以算更大的数而且算得更快( 即使用了long,但是超过50还是会溢出gg )。

所以面额拼凑问题就需要使用 递推法 ,一个一个算,看似非常傻但是却比递归好用,或许这就是 大智若愚 吧。

比较难理解的可能是 m[j]+=m[j-den[i]];其等价于之前提到的递推式(1020,100)=(1020-100,100)+(1020,50),但是我们发现(1020,50)没了,这是因为之前已经加上去了。

在这个两层循环中,第一层就是以不同的面额做循环,例如(5,5)=(0,5)+(5,1),之所以省略掉了(5,1)是因为在之前就已经将(5,1)加上去了( m[j]=1 ),所以可以直接 m[j]+=m[j-den[i]] .当面额为5循环完毕之后,就可以开始面额为10的循环了。(10,10)=(5,10)+(10,1)=(5,5)+(10,1),由于之前(10,1)已经加上去了,所以直接加上(5,5)就可以了。一次类推直到面额100循环完毕,结果就出来了。(感觉没有讲清楚)

碰到的问题:

1.10000的时候出现溢出。原因:之前在intellij(java)中写的时候用long(64位)没问题,但是尺斗 C语言(dev c++和VS)long是32位的 ,所以使用long long

2.dev c++使用的是gcc编译器支持 动态数组 ,VS不支持所以一开始报错。改为 long long *m=new long long[money+1];

4. 编写冒泡排序算法 冒泡排序算法的分析与改进 算法设计

冒泡排序算法的分析与改进

孙伟

(安徽中医学院 医药信息工程学院 09医软一班,安徽合肥,230009)

摘 要: 冒泡排序算法有两个优点:1“编程复杂度”很低,很容易写出代码;2. 具有稳定性,这里的稳定性是指原序列中相同元素的相对顺序仍然保持到排序后的序列,但当需要排序的数据较多且无序时,冒泡排序算法的时间复杂度较大,比较次数较多,本文提出了一种冒泡排序算法的改进方法,可以大大减少比较的次数,降低算法的时间复杂度。 关键让握坦词:交坦桐换排序 扫描 稳定 算法 中图分类号:TU 411.01 文献标识码:A

Bubble sort algorithm analysis and improvement

SUN Wei

(Anhui University of Traditional Chinese Medicine Medical Information Engineering, Hefei 230009, China ;)

Abstract: Bubble sort algorithm has two advantages:1 “Programming complexity”is very low,and it is easy to write code;2.It has the stability, the stability refers to the original sequence in the same element relative sequence remains to sort sequence, but when the need to sort the data and more disordered, bubble sort algorithm time complexity compared to larger, more often, this paper presents a bubble sort algorithm method, can greatly rece the number of comparisons, rece the time complexity of algorithm.

Key words:Exchange sort ; Scanning ; stability ; Algorithm

1. 概述

1.1 冒泡排序简介

冒泡排序法是一种交换排序法皮腊,这种方法的基本思想是,将待排序

的元素看作是竖着排列的“ 气泡”,较小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个“ 气泡”序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即“ 轻”的元素在下面,就交换它们的位置。显然,处理一遍之后,“ 最轻”的元素就浮到了最高位置;处理二遍之后,“ 次轻”的元素就浮到了次高位置。在作第二遍处理时,由于

最高位置上的元素已是“ 最轻”元素,所以不必检查。一般地,第i 遍处理时,不必检查第i 高位置以上的元素,因为经过前面i- 1遍的处理,它们已正确地排好序。

1.2 冒泡排序方法

冒泡排序法是一种最简单的排序算法, 它和气泡从水中往上冒的情况有些类似。其基本算法如下:对1 至n 个记录,先将第n 个和第n- 1 个记录的键值进行比较,如r [n].key

——————————————————————————————————————————————————————— 收稿日期:2012-4-14;

作者简介:孙伟 1992-10-04 女 09713033 09医软一班

实现的功能:将键值最小的记录传到了第1 位。然后,再对2 至n 个记录进行同样操作,则具有次小键值的记录被安置在第2 位上。重复以上过程, 每次的移动都向最终排序的目标前进,直至没有记录需要交换为止。具体实现时,可以用一支旗子flag 表示第i 趟是否出现交换。如果第i 趟没有交换,则表示此时已完成排序,因而可以终止。

1.3 冒泡排序过程示例

设待排序的键值为: 25 17 65 13 94 47 41 94

执行冒泡排序的过程如下图所示。其中,第一列为初始键值序列, 第二列至第八列依次为各趟排序的结果, 图中用方括号括起来的是当前待排序的无序区。

每一次排序都使有序区扩充了一个气泡,在经过i 次排序之后,有序区中就有i 个气泡, 而无序区中气泡的重量总是大于等于有序区中气泡的重量,整个冒泡排序过程至多需要进行n- 1 次排序。但是, 若在某一次排序中未发现气泡位置的交换, 则说明待排序的无序区中所有气泡均满足轻者在上,重者在下的原则因此冒泡排序过程可在此次排序后终止。在上图的示例中,在第四次(图中第五列) 排序过程中就没有气泡交换位置, 此时整个文件已达到有序状态。为此,实际给出的算法中, 我们可以引入一个布尔量flag , 在每一次排序之前, 先将它置为true ,若在一次排序中交换了记录, 则将它置为false 。当一次排序结束时,我们再检查flag ,若未曾交换过记录便终止算法。

该算法的时间复杂性为0(n2), 算法为稳定的排序方法。

2. 对于冒泡算法的改进

2.1 第一种改进方法

如果在某一趟循环中没有任何数据交换发生, 则表明数据已经排序完毕。那么剩余的循环就不需要再执行假设需要排序的数据已经按照从小到大排列,那么第一趟比较就不会有任何数据交换发生。这种改进算法如下:

设置一个标志位,当没有交换的时候这个标志位不会变化,那么说明数据已经排序好了,就不需要再进行剩余的循环。只有在标志位被重新设置的情况下才会进行剩余的循环。

public static

void ImproveBubble1(int [ ]myArray) {

bool isSorted = false;

for(int i = 0; i

// 只有在没有排序的情况下才继续循环 { isSorted =

true; // 设定排序标志

for(int j = 0; j

myArray[j+1] ) { isSorted =

false; // 如果是没有排序,就重新设定标志 Swap(refmyArray, refmyArray[i+1]);

} } } }

从这种算法可以看出,若记录的初始状态是正序( 从小到大) 的,则一趟扫描即可完成排序。所需的较和记录移动的次数分别达到最小值n- 1 和0。即算法最好的时间复杂度为0(n);若初始记录是反序( 从大到小) 的,则需要进行n- 1 趟排序,每趟排序要进行n- i 次关键字的比较,且每次比较都必须移记录三次来达到交换记录位置。在这情况下比较和移动次数达到最大值:比较次数:Cmax= n(n- 1)/2 移动次数: Mmax=3n(n- 1)/2因此这种改进方法的最坏时间复杂度也为0(n^2)。在平均情况下,算法可能在中间的某一趟排序完后就终止,但总的比较次数仍为0(n^2),所以算法的

平均时间复杂度为0(n^2)。因此,这种算法最好的时间复杂度为0(n)。平均,最坏时刻复杂度为0(n^2)。

2.2 第二种改进方法

在冒泡排序的每趟扫描中, 记住最后一次交换发生的位置lastexchange 也能有所帮助。因为该位置之前的相邻记录已经有序,故下一趟排序开始的时候,0 到lastexchange 已经是有序的了,lastexchange 到n- 1是无序区。所以一趟排序可能使当前有序区扩充多个记录。即较大缩小无序区范围,而非递减1,以此减少排序趟数。这种算法如下:

在冒泡排序中,每趟排序实现了将最大(升序) 或最小(降序) 的记录安置到未排序部分的最后位置,即最终位置。通过进一步观察研究,由于每趟排序过程中,通过和邻记录关键字两两比较,大(升序) 或小(降序) 的记录在不断地往下沉或往后靠,小(升序) 或大(降序) 的记录在不断往上冒或往前靠。每经过一趟排序,在最后次交换位置后面的记录都已经排好序。根据上面的思路,对n 个记录进行第k 趟排序,首先需在第k- 1 趟排序时记下最后交换的位置。然后在第k 趟排序时,将第一个记录的关键字与第二个记录的关键字进行比较,符合交换条件时,进行交换。再比较第二个记录和第三个记录的关键字,依次类推,直至第m- 1 个记录和第m 个记录的关键字进行比较,而不需要比较至n- k- 1 个记录。在大部分排序中,m 都小于n- k- 1从而减少了比较趟数和每趟的比较次数。由于在第一趟排序

时,没有上一趟排序的m 值。因此,还要设置m 的初始值为n- 1。

public static

void ImproveBubble2(int[ ]myArray) { int m= myArray.Length -1; int k, j; while(m> 0 )

{ for( k=j=0; j myArray[j+1]) {

Swap(refmyArray[j], refmyArray[j+1]);

k = j; // 记录每次交换的位置 }}

m= k; // 记录最后一个交换的位置 }}

从这种算法可以看出,若记录的初始状态是正序( 从小到大) 的。则一趟扫描即可完成排序, 所的关键比较和记录移动的次数分别达到最小值n- 1 和0。即算法最好的时间复杂度为0(n);若初始记录是反序( 从大到小) 的,则需要进行n- 1 趟排序,每趟排序要进行n- i 次关键字的比较,且每次比较都须移动记录三次来达到交换记录位置。在这情况下比较和移动次数达到最大值:比较次数:Cmax= n(n- 1)/2 移动次数Mmax=3n(n- 1)/2因此,这种办法的最坏时间复杂度也为0(n^2)。在平均情况下,算法较大地改变了无序区的范围,从而减少了比较的次数,但总的比较次数仍为0(n^2)。所以算法的平均时间复杂度为0(n^2)。因此,算法2 最好的时间复杂度为0(n)。平均,最坏时刻复杂度为0(n^2)。 2.3 双向扫描冒泡法

若记录的初始状态为:只有最轻的气泡位于d[n]的位置(或者最重的气泡位于d[0]位置) ,其余的气泡均已排好序。在上述三种算法中都要做n- 1 趟扫描。实际上只需一趟扫描就可以完成排序。所以对于这种不

对称的情况。可对冒泡排序又作一次改进。在排序过程中交替改变扫描方向。即先从下扫到上,再从上扫到下,来回地进行扫描,这样就得到双向冒泡排序算法。

对n 个记录进行排序时,设up 记录了从前面向后面依次进行扫描时最后的交换位置,low 记录了从后面向前面依次进行扫描时最前的交换位置。由上个改进的冒泡排序的原理可知,up 后面的记录和low 前面的记录都已有序。每趟排序都由两次不同方向的比较、交换组成。第一次是从未排好序的第一个记录开始,即从low 记录开始,向后依次两两比较,如果不符合条件,则交换之,

直至比较到未排好序的最后一个记录,即up 记录为止。同时记下最后一次交换的位置,并存于up 。第二次是从未排好序的最后一个记录开始, 即从up 记录开始,向前依次两两比较,如果不符合条件,则交换之,直至比较到未排好序的第一个记

录,即low 记录为止。同时记下最后次交换的位置,并存于low 。这样,就完成了一趟排序。每趟排序都实现了将未排好序部分的关键字大的记录往后移

(升序) ,

关键字小的记录往前移( 升序) ,从而使

两端已排好序( 如果是降序,记录移动的方向则相反) 。未排好序部分的记录的首尾位置分别由low 和up 指明。不断按上面的方法进行排序,使两端已排好序的记录不断增多,未排好序部分的记录逐渐减少。即low 和up 的值不断接近,当low>=up 时,表明已没有未排好序的记录,排序就完成了。由于在第一趟排序时,没有上趟排序的low 和up 值。因此,还要设置low 和up 的初始值分别为0 和n- 1。

public static

void ImproveBubble3(int [ ]myArray) { int low, up, index, i; low= 0;

up = myArray.Length - 1; index = low; while( up > low)

{ for( i=low; imyArray[i+1]) {

Swap(refmyArray, refmyArray[i+1]); index = i; }}

up= index; // 记录最后一个交换的位置

for(i=up; i>low; i- - ) // 从最后一个交换

位置处从下向上扫描

{ if(myArray

Swap(refmyArray, refmyArray[i- 1]); index = i;

}} low= index; // 记录最后一个交换的位



}}

从这种算法可以看出,若记录的初始状态是正

序( 从小到大) 的,则一趟扫描即可完成排序。所需的关键比较和记录移动的次数分别达到最小值n- 1 和0。即算法最好的时间复杂度为0(n);若初始记录是反序( 从大到小) 的,则需要进行[n/2]趟排序。如果只有最重的气泡在最上面( 或者最轻的气泡在最下面) ,其余的有序,这时候就只需要比较1 趟。但是在最坏的情况下,算法的复杂度也为0(n^2)。因此,算法最好的时间复杂度为0(n),最坏时刻复杂度为0(n^2)。

3. 性能分析

为了分析数据两种冒泡排序法的性能, 我们用自编的测试程序对大量数据进行了测试,得出下表,从表中可以直观地看出两种冒泡排序方法的性能差异( 时间单位为毫秒)。

图1 算法运行时间比较表

4. 结束语

从上面的表格可以看出,在数据量比较小的时候,这几种算法基本没有任何区别。当数据量比较大的时候,双向扫描冒泡排序会有更好的效率。但是效率并没有根本的提升。因此冒泡排序确实不是我们排序的首选。在数据量比较大的时候,快速排序等会有非常明显的优势。但是在数据量很小的时候,各种排序算法的效率差别并不是很大。那么冒泡排序也会有自己的用武之地。因此,在实际考虑算法的时候,最重要的是熟悉各种算法的性能表现并且根据数据的数量以及当前运行的环境,开发的进度选择最合适的算法。

[参 考 文 献]

[1]( 美) 莱维丁着. 潘彦译,《算法设计与分析基础》. 清华大学出版社 [2] 胡金初,《计算机算法》. 清华大学出版社

[3] 阿苏外耶(M.H.Alsuwaiyel),朱洪(译),《算法设计技巧与分析》.电子工业出版社 [4](美)Robert sedgewick,《算法分析导论》.机械工业出版社

[5]( 美)Michael T.Goodrich Roberto Tamassia,《算法分析与设计》人民邮电出版社 [6]王晓东,《计算机算法设计与分析》电子工业出版社

[7]Shaffer,Clifford,张铭,《数据结构与算法分析》电子工业出版社 [8]刘任任 ,《算法设计与分析》武汉理工大学出版社,2003

5. BP算法及其改进

传统的BP算法及其改进算法的一个很大缺点是:由于其误差目标函数对于待学习的连接权值来说非凸的,存在局部最小点,对网络进行训练时,这些算法的权值一旦落入权值空间的局部最小点就很难跳出,因而无法达到全局最小点(即最优点)而使得网络训练失败。针对这些缺陷,根据凸函数及其共轭的性质,利用Fenchel不等式,使用约束优化理论中的罚函数方法构造出了带有惩罚项的新误差目标函数。

用新的目标函数对前馈神经网络进行优化训练时,隐层输出也作为被优化变量。这个目标函数的主要特点有:
1.固定隐层输出,该目标函数对连接权值来说是凸的;固定连接权值,对隐层输出来说是凸的。这样在对连接权值和隐层输出进行交替优化时,它们所面对的目标函数都是凸函数,不存在局部最小的问题,算法对于初始权值的敏感性降低;
2.由于惩罚因子是逐渐增大的,使得权值的搜索空间变得比较大,从而对于大规模的网络也能够训练,在一定程度上降低了训练过程陷入局部最小的可能性。

这些特性能够在很大程度上有效地克服以往前馈网络的训练算法易于陷入局部最小而使网络训练失败的重大缺陷,也为利用凸优化理论研究前馈神经网络的学习算法开创了一个新思路。在网络训练时,可以对连接权值和隐层输出进行交替优化。把这种新算法应用到前馈神经网络训练学习中,在学习速度、泛化能力、网络训练成功率等多方面均优于传统训练算法,如经典的BP算法。数值试验也表明了这一新算法的有效性。

本文通过典型的BP算法与新算法的比较,得到了二者之间相互关系的初步结论。从理论上证明了当惩罚因子趋于正无穷大时新算法就是BP算法,并且用数值试验说明了惩罚因子在网络训练算法中的作用和意义。对于三层前馈神经网络来说,惩罚因子较小时,隐层神经元局部梯度的可变范围大,有利于连接权值的更新;惩罚因子较大时,隐层神经元局部梯度的可变范围小,不利于连接权值的更新,但能提高网络训练精度。这说明了在网络训练过程中惩罚因子为何从小到大变化的原因,也说明了新算法的可行性而BP算法则时有无法更新连接权值的重大缺陷。

矿体预测在矿床地质中占有重要地位,由于输入样本量大,用以往前馈网络算法进行矿体预测效果不佳。本文把前馈网络新算法应用到矿体预测中,取得了良好的预期效果。

本文最后指出了新算法的优点,并指出了有待改进的地方。

关键词:前馈神经网络,凸优化理论,训练算法,矿体预测,应用

Feed forward Neural Networks Training Algorithm Based on Convex Optimization and Its Application in Deposit Forcasting
JIA Wen-chen (Computer Application)
Directed by YE Shi-wei

Abstract

The paper studies primarily the application of convex optimization theory and algorithm for feed forward neural networks’ training and convergence performance.

It reviews the history of feed forward neural networks, points out that the training of feed forward neural networks is essentially a non-linear problem and introces BP algorithm, its advantages as well as disadvantages and previous improvements for it. One of the big disadvantages of BP algorithm and its improvement algorithms is: because its error target function is non-convex in the weight values between neurons in different layers and exists local minimum point, thus, if the weight values enter local minimum point in weight values space when network is trained, it is difficult to skip local minimum point and reach the global minimum point (i.e. the most optimal point).If this happening, the training of networks will be unsuccessful. To overcome these essential disadvantages, the paper constructs a new error target function including restriction item according to convex function, Fenchel inequality in the conjugate of convex function and punishment function method in restriction optimization theory.
When feed forward neural networks based on the new target function is being trained, hidden layers’ outputs are seen as optimization variables. The main characteristics of the new target function are as follows:

1.With fixed hidden layers’ outputs, the new target function is convex in connecting weight variables; with fixed connecting weight values, the new target function is convex in hidden layers’ outputs. Thus, when connecting weight values and hidden layers’ outputs are optimized alternately, the new target function is convex in them, doesn’t exist local minimum point, and the algorithm’s sensitiveness is reced for original weight values .
2.Because the punishment factor is increased graally, weight values ’ searching space gets much bigger, so big networks can be trained and the possibility of entering local minimum point can be reced to a certain extent in network training process.

Using these characteristics can overcome efficiently in the former feed forward neural networks’ training algorithms the big disadvantage that networks training enters local minimum point easily. This creats a new idea for feed forward neural networks’ learning algorithms by using convex optimization theory .In networks training, connecting weight variables and hidden layer outputs can be optimized alternately. The new algorithm is much better than traditional algorithms for feed forward neural networks. The numerical experiments show that the new algorithm is successful.

By comparing the new algorithm with the traditional ones, a primary conclusion of their relationship is reached. It is proved theoretically that when the punishment factor nears infinity, the new algorithm is BP algorithm yet. The meaning and function of the punishment factor are also explained by numerical experiments. For three-layer feed forward neural networks, when the punishment factor is smaller, hidden layer outputs’ variable range is bigger and this is in favor to updating of the connecting weights values, when the punishment factor is bigger, hidden layer outputs’ variable range is smaller and this is not in favor to updating of the connecting weights values but it can improve precision of networks. This explains the reason that the punishment factor should be increased graally in networks training process. It also explains feasibility of the new algorithm and BP algorithm’s disadvantage that connecting weigh values can not be updated sometimes.

Deposit forecasting is very important in deposit geology. The previous algorithms’ effect is not good in deposit forecasting because of much more input samples. The paper applies the new algorithm to deposit forecasting and expectant result is reached.
The paper points out the new algorithm’s strongpoint as well as to-be-improved places in the end.

Keywords: feed forward neural networks, convex optimization theory, training algorithm, deposit forecasting, application

传统的BP算法及其改进算法的一个很大缺点是:由于其误差目标函数对于待学习的连接权值来说非凸的,存在局部最小点,对网络进行训练时,这些算法的权值一旦落入权值空间的局部最小点就很难跳出,因而无法达到全局最小点(即最优点)而使得网络训练失败。针对这些缺陷,根据凸函数及其共轭的性质,利用Fenchel不等式,使用约束优化理论中的罚函数方法构造出了带有惩罚项的新误差目标函数。

用新的目标函数对前馈神经网络进行优化训练时,隐层输出也作为被优化变量。这个目标函数的主要特点有:
1.固定隐层输出,该目标函数对连接权值来说是凸的;固定连接权值,对隐层输出来说是凸的。这样在对连接权值和隐层输出进行交替优化时,它们所面对的目标函数都是凸函数,不存在局部最小的问题,算法对于初始权值的敏感性降低;
2.由于惩罚因子是逐渐增大的,使得权值的搜索空间变得比较大,从而对于大规模的网络也能够训练,在一定程度上降低了训练过程陷入局部最小的可能性。

这些特性能够在很大程度上有效地克服以往前馈网络的训练算法易于陷入局部最小而使网络训练失败的重大缺陷,也为利用凸优化理论研究前馈神经网络的学习算法开创了一个新思路。在网络训练时,可以对连接权值和隐层输出进行交替优化。把这种新算法应用到前馈神经网络训练学习中,在学习速度、泛化能力、网络训练成功率等多方面均优于传统训练算法,如经典的BP算法。数值试验也表明了这一新算法的有效性。

本文通过典型的BP算法与新算法的比较,得到了二者之间相互关系的初步结论。从理论上证明了当惩罚因子趋于正无穷大时新算法就是BP算法,并且用数值试验说明了惩罚因子在网络训练算法中的作用和意义。对于三层前馈神经网络来说,惩罚因子较小时,隐层神经元局部梯度的可变范围大,有利于连接权值的更新;惩罚因子较大时,隐层神经元局部梯度的可变范围小,不利于连接权值的更新,但能提高网络训练精度。这说明了在网络训练过程中惩罚因子为何从小到大变化的原因,也说明了新算法的可行性而BP算法则时有无法更新连接权值的重大缺陷。

矿体预测在矿床地质中占有重要地位,由于输入样本量大,用以往前馈网络算法进行矿体预测效果不佳。本文把前馈网络新算法应用到矿体预测中,取得了良好的预期效果。

本文最后指出了新算法的优点,并指出了有待改进的地方。

关键词:前馈神经网络,凸优化理论,训练算法,矿体预测,应用

Feed forward Neural Networks Training Algorithm Based on Convex Optimization and Its Application in Deposit Forcasting
JIA Wen-chen (Computer Application)
Directed by YE Shi-wei

Abstract

The paper studies primarily the application of convex optimization theory and algorithm for feed forward neural networks’ training and convergence performance.

It reviews the history of feed forward neural networks, points out that the training of feed forward neural networks is essentially a non-linear problem and introces BP algorithm, its advantages as well as disadvantages and previous improvements for it. One of the big disadvantages of BP algorithm and its improvement algorithms is: because its error target function is non-convex in the weight values between neurons in different layers and exists local minimum point, thus, if the weight values enter local minimum point in weight values space when network is trained, it is difficult to skip local minimum point and reach the global minimum point (i.e. the most optimal point).If this happening, the training of networks will be unsuccessful. To overcome these essential disadvantages, the paper constructs a new error target function including restriction item according to convex function, Fenchel inequality in the conjugate of convex function and punishment function method in restriction optimization theory.
When feed forward neural networks based on the new target function is being trained, hidden layers’ outputs are seen as optimization variables. The main characteristics of the new target function are as follows:

1.With fixed hidden layers’ outputs, the new target function is convex in connecting weight variables; with fixed connecting weight values, the new target function is convex in hidden layers’ outputs. Thus, when connecting weight values and hidden layers’ outputs are optimized alternately, the new target function is convex in them, doesn’t exist local minimum point, and the algorithm’s sensitiveness is reced for original weight values .
2.Because the punishment factor is increased graally, weight values ’ searching space gets much bigger, so big networks can be trained and the possibility of entering local minimum point can be reced to a certain extent in network training process.

Using these characteristics can overcome efficiently in the former feed forward neural networks’ training algorithms the big disadvantage that networks training enters local minimum point easily. This creats a new idea for feed forward neural networks’ learning algorithms by using convex optimization theory .In networks training, connecting weight variables and hidden layer outputs can be optimized alternately. The new algorithm is much better than traditional algorithms for feed forward neural networks. The numerical experiments show that the new algorithm is successful.

By comparing the new algorithm with the traditional ones, a primary conclusion of their relationship is reached. It is proved theoretically that when the punishment factor nears infinity, the new algorithm is BP algorithm yet. The meaning and function of the punishment factor are also explained by numerical experiments. For three-layer feed forward neural networks, when the punishment factor is smaller, hidden layer outputs’ variable range is bigger and this is in favor to updating of the connecting weights values, when the punishment factor is bigger, hidden layer outputs’ variable range is smaller and this is not in favor to updating of the connecting weights values but it can improve precision of networks. This explains the reason that the punishment factor should be increased graally in networks training process. It also explains feasibility of the new algorithm and BP algorithm’s disadvantage that connecting weigh values can not be updated sometimes.

Deposit forecasting is very important in deposit geology. The previous algorithms’ effect is not good in deposit forecasting because of much more input samples. The paper applies the new algorithm to deposit forecasting and expectant result is reached.
The paper points out the new algorithm’s strongpoint as well as to-be-improved places in the end.

Keywords: feed forward neural networks, convex optimization theory, training algorithm, deposit forecasting, application

BP算法及其改进

2.1 BP算法步骤

1°随机抽取初始权值ω0;

2°输入学习样本对(Xp,Yp),学习速率η,误差水平ε;

3°依次计算各层结点输出opi,opj,opk;

4°修正权值ωk+1=ωk+ηpk,其中pk=,ωk为第k次迭代权变量;

5°若误差E<ε停止,否则转3°。

2.2 最优步长ηk的确定

在上面的算法中,学习速率η实质上是一个沿负梯度方向的步长因子,在每一次迭代中如何确定一个最优步长ηk,使其误差值下降最快,则是典型的一维搜索问题,即E(ωk+ηkpk)=(ωk+ηpk)。令Φ(η)=E(ωk+ηpk),则Φ′(η)=dE(ωk+ηpk)/dη=E(ωk+ηpk)Tpk。若ηk为(η)的极小值点,则Φ′(ηk)=0,即E(ωk+ηpk)Tpk=-pTk+1pk=0。确定ηk的算法步骤如下

1°给定η0=0,h=0.01,ε0=0.00001;

2°计算Φ′(η0),若Φ′(η0)=0,则令ηk=η0,停止计算;

3°令h=2h, η1=η0+h;

4°计算Φ′(η1),若Φ′(η1)=0,则令ηk=η1,停止计算;

若Φ′(η1)>0,则令a=η0,b=η1;若Φ′(η1)<0,则令η0=η1,转3°;

5°计算Φ′(a),若Φ′(a)=0,则ηk=a,停止计算;

6°计算Φ′(b),若Φ′(b)=0,则ηk=b,停止计算;

7°计算Φ′(a+b/2),若Φ′(a+b/2)=0,则ηk=a+b/2,停止计算;

若Φ′(a+b/2)<0,则令a=a+b/2;若Φ′(a+b/2)>0,则令b=a+b/2

8°若|a-b|<ε0,则令,ηk=a+b/2,停止计算,否则转7°。

2.3 改进BP算法的特点分析

在上述改进的BP算法中,对学习速率η的选取不再由用户自己确定,而是在每次迭代过程中让计算机自动寻找最优步长ηk。而确定ηk的算法中,首先给定η0=0,由定义Φ(η)=E(ωk+ηpk)知,Φ′(η)=dE(ωk+ηpk)/dη=E(ωk+ηpk)Tpk,即Φ′(η0)=-pTkpk≤0。若Φ′(η0)=0,则表明此时下降方向pk为零向量,也即已达到局部极值点,否则必有Φ′(η0)<0,而对于一维函数Φ(η)的性质可知,Φ′(η0)<0则在η0=0的局部范围内函数为减函数。故在每一次迭代过程中给η0赋初值0是合理的。

改进后的BP算法与原BP算法相比有两处变化,即步骤2°中不需给定学习速率η的值;另外在每一次修正权值之前,即步骤4°前已计算出最优步长ηk。

6. 三中三求解用10+20+30+40算法

1. 从四个数中随机选择三个数,共有四种选择方式,假设本次选出的三个数为 a、b、c。2. 对于三个数 a、b、c,依次计算它们两两之间的和,共有三个仿塌和值。3. 如果这三个和中有两个和值相等,则这三个数可以组成一组三中三的解法,否则尝试下一组三个数。4. 如果将所有的四种选择方式都走完了,仍然没有找如备到一组合法的三中三解法,则说明输入的四备橡圆个数无法构成任何三中三解法。

7. mod40怎么算

您好,mod40是指取模运算,即取余数运算,又称取余运算。mod40的运算方式是:宴备将一个数除以40,所得的余数就是mod40的结果哗祥液。例如,若一个数是43,则乱物43除以40,余数为3,即mod40的结果为3。mod40的运算可以用于计算机编程中,可以用来求出一个数的模,以及判断一个数是否能被40整除。

8. GPA算法请教

没有任何一中GPA算法是通用的。。。百分比才是通用的。。
大部分中国大学都有百分制成绩,递交的时候交百分制就可以了。。。没有的百分制的,把本学校的GPA计算方法附带进去就行了。。学校会自己计算。。

如果是要看自己够不够资格的话,把你想去的国家发出来,自然会有人告诉你百分制的要求是多少

阅读全文

与改进40算法1相关的资料

热点内容
软通动力程序员节2021 浏览:845
安卓系统如何卸载安装包 浏览:870
短信删除助手文件夹 浏览:688
java办公自动化 浏览:340
php中超链接 浏览:253
linux默认路由设置 浏览:36
linux如何挂载iso 浏览:432
vs程序换文件夹后不能编译 浏览:557
安卓源码编译输入脚本没反应 浏览:47
phpmysql自增 浏览:167
把ppt保存为pdf 浏览:533
汽车密封件加密配件 浏览:887
黑马程序员15天基础班 浏览:560
java调整格式 浏览:521
香港云服务器租用价 浏览:78
linuxsublime3 浏览:560
imac混合硬盘命令 浏览:279
沈阳用什么app租房车 浏览:859
00后高中生都用什么app 浏览:239
戴尔塔式服务器怎么打开独立显卡 浏览:808