精华内容
下载资源
问答
  • 如何评价一个算法的好坏

    千次阅读 2019-04-27 21:38:39
    个算法还需要足够健壮,即当输入的数据非法或合理时,也能适当的做出正确的反应或进行相应的处理 最后它还必须拥有高效率和低存储量要求。 也就是所谓的时间复杂度和空间复杂度 1.时间复杂度 定义:在计算机科学...

    首先,这个算法必须是正确的
    其次,好的算法应该是友好的,便于人们理解和交流,并且是机器可执行的。
    这个算法还需要足够健壮,即当输入的数据非法或不合理时,也能适当的做出正确的反应或进行相应的处理
    最后它还必须拥有高效率和低存储量要求。
    也就是所谓的时间复杂度空间复杂度

    1.时间复杂度

    定义:在计算机科学中,算法的时间复杂度是一个函数,他定量描述了该算法的运行时间.一个算法执行所耗费的时间,从理论上讲,只有你把你的程序放机器上跑起来,才能知道.然而我们有一套时间复杂度的分析方式.一个算法所花费的时间与其中语句的执行次数成正比例.算法中的基本操作的执行次数,为算法的时间复杂度.

    2.时间复杂度为什么不使用时间来衡量而使用基本语句的运行次数来衡量

    算法的执行时间依赖于具体的软硬件环境,所以,不能用执行时间的长短来衡量算法的时间复杂度,而要通过基本语句执行次数的数量级来衡量。

    3.时间复杂度的O渐进表示法 (Big O notation)

    是用于描述函数渐进行为的数学符号.

    大O阶方法推导:
    计算基本语句的执行次数的数量级; 
    只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂正确即可,可以忽略所有低次幂和最高次幂的系数。这样能够简化算法分析,并且使注意力集中在最重要的一点上:增长率。
     如果算法中包含嵌套的循环,则基本语句通常是最内层的循环体,如果算法中包含并列的循环,则将并列循环的时间复杂度相加。例如:

     for (i=1; i<=n; i++)
      x++;  
      for (i=1; i<=n; i++)
      for (j=1; j<=n; j++)
      x++; 
    

    第一个for循环的时间复杂度为Ο(n),第二个for循环的时间复杂度为Ο(n2),则整个算法的时间复杂度为Ο(n+n2)=Ο(n2)。

    4.时间复杂度的:最优、平均、最差情况,为什么时间复杂度看的是最差情况

    最差情况下的复杂度是所有可能的输入数据所消耗的最大资源,如果最差情况下的复杂度符合我们的要求,我们就可以保证所有的情况下都不会有问题。

    某些算法经常遇到最差情况。比如一个查找算法,经常需要查找一个不存在的值。
    也许你觉得平均情况下的复杂度更吸引你,可是平均情况也有几点问题。第一,难计算,多数算法的最差情况下的复杂度要比平均情况下的容易计算的多,第二,有很多算法的平均情况和最差情况的复杂度是一样的. 第三,什么才是真正的平均情况?如果你假设所有可能的输入数据出现的概率是一样的话,也是不合理的。其实多数情况是不一样的。而且输入数据的分布函数很可能是你没法知道。
    考虑最好情况的复杂度更是没有意义。

    5.如何求解:二分查找、递归求阶乘、递归斐波那契的时间复杂度?

    二分查找:通过折纸查找求解时间复杂度为O(logN);
    递归求阶乘:数基本操作递归N次得到时间复杂度为O(N);
    递归斐波那契:分析得出基本操作递归了2N次,时间复杂度为O(2N);

    6.什么是空间复杂度?

    空间复杂度是对一个算法在运行过程中临时占用存储空间大小的度量.空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数.空间复杂度计算规则基本跟时间复杂度类似,也使用大O渐进法表示.

    7.如何求空间复杂度? 普通函数&递归函数

    一个算法的空间复杂度只考虑在运行过程中为局部变量分配的存储空间的大小,它包括为参数表中形参变量分配的存储空间和为在函数体中定义的局部变量分配的存储空间两个部分。若一个算法为 递归算法,其空间复杂度为递归所使用的堆栈空间的大小,它等于一次调用所分配的临时存储空间的大小乘以被调用的次数(即为递归调用的次数加1,这个1表示开始进行的一次非递归调用)。算法的空间复杂度一般也以数量级的形式给出。如当一个算法的空间复杂度为一个常量,即不随被处理数据量n的大小而改变时,可表示为O(1);当一个算法的空间复杂度与以2为底的n的对数成正比时,可表示为O(log2n);当一个算法的空间复杂度与n成线性比例关系时,可表示为O(n).若形参为数组,则只需要为它分配一个存储由实参传送来的一个地址指针的空间,即一个机器字长空间;若形参为引用方式,则也只需要为其分配存储一个地址的空间,用它来存储对应实参变量的地址,以便由系统自动引用实参变量。
    8. 分析递归斐波那契数列的:时间、空间复杂度,并对其进行优化,伪递归优化—>循环优化

    long long Fib(int N) {
    	if (N < 3)
    		return 1;
    	return Fib(N - 1) + Fib(N - 2);
    }
    

    普通递归实现的斐波那契数列:
    时间复杂度:O(2^n)
    在这里插入图片描述
    计算并根据O渐进表示法得出时间复杂度.

    空间复杂度:O(N);递归深度乘以(每一次递归的空间占用{有辅助空间或常量})

    伪递归优化:

    long long fib (long long first, longlong second, int N) {
    	if(N <3)
    	return 1;
    	if(N == 3)
    	return first + second;
    	return fib(second, first+second,N-1);
    }
    

    时间复杂度:
    O(N);
    递归深度乘以每次递归的循环次数
    空间复杂度:
    O(1)或O(N)
    关键看编译器是否优化,优化则为O(1)否则O(N);

    循环优化:

    long long  Fib(int N) {
    	long long first = 1;
    	long long second = 1;
    	long long ret = 0;
    	
    	for (int i = 3; i <= N ; ++i) {
    		ret = first + second;
    		first = second;
    		second = ret;
    	}
    	return second;
    }
    

    时间复杂度:O(N);

    空间复杂度:O(1);

    9.常见时间复杂度

    常见的算法时间复杂度由小到大依次为:  Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)<…<Ο(2n)<Ο(n!)  Ο(1)表示基本语句的执行次数是一个常数,一般来说,只要算法中不存在循环语句,其时间复杂度就是Ο(1)。Ο(log2n)、Ο(n)、Ο(nlog2n)、Ο(n2)和Ο(n3)称为多项式时间,而Ο(2n)和Ο(n!)称为指数时间。

    展开全文
  • 算法性能评价

    千次阅读 2019-09-23 08:05:25
    种数据结构的优劣是由实现其各种运算的算法具体体现的,数据结构的分析实质上就是实现运算算法的分析,除了要验证算法是否正确解决该问题之外,还需要对算法的效率作性能评价。在计算机程序设计中,算法分析是...

    一种数据结构的优劣是由实现其各种运算的算法具体体现的,对数据结构的分析实质上就是实现运算算法的分析,除了要验证算法是否正确解决该问题之外,还需要对算法的效率作性能评价。在计算机程序设计中,算法分析是十分重要的。

    算法分析是每个程序设计人员应该掌握的技术。评价算法性能的标准主要从算法执行时间与占用内存空间两方面考虑,即算法执行所需的时间和存储空间来判断一个算法的优劣。

    1.性能评价

    对问题规模与该算法在运行时所占用空间与所耗费时间给出一个数量关系的评价。

    数量关系评价体现在时间上,即算法经编程实现后在计算机中运行所耗费的时间。

    数量关系评价体现在空间上,即算法经编程实现后再计算机中运行所占用的存储量。

    2.问题规模

    算法性能与问题规模相关。问题规模是问题大小的本质表示,对不同的问题其表现形式不同,算法求解问题的输入量称为问题的规模,一般用整数表示。一个图论问题的规模则是图中的顶点数或边数,对矩阵而言是其阶数,对多项式运算而言是多项式项数,对集合运算而言是集合中的元素个数,可以说算法效率应是问题规模的函数。

    算法的时间性能分析

    1.算法耗费的时间

    一个算法的执行时间是指算法中所有语句执行时间的总和。每条语句的执行时间等于该条语句的执行次数乘以执行一次所需实际时间。

    由于语句的执行要由源程序经编译程序翻译成目标代码,目标代码经装配后再执行,语句执行一次实际所需的具体时间是与计算机的软、硬件环境(计算机速度、编译程序质量、输入数据量等)密切相关的,故难以精确估计。

    2.语句频度

    质量一个算法的效率应当抛弃具体计算机条件,仅仅考虑算法本身的效率高低。算法时间分析质量的标准并不是针对实际执行时间精确算法执行的时间,而是根据算法中语句的执行次数做出估计,从中得到算法执行时间的信息。

    语句频度是指该语句在一个算法中重复执行的次数。一个算法的时间耗费就是该算法中所有语句频度之和。

    例1.   求两个n阶方阵的乘积C=A*B。

    #define n 100      /*n可根据需求定义,这里假定为100*/

    void MatrixMulti(int a[n][n],int b [n][n],int c[n][n])

    {                                                                                             该算法每一语句的语句频度为

    (1)for(i=0;i<n;i++)                                                                   n+1

    (2)  for(j=0;j<n;j++)                                                                 n(n+1)

    (3)    {   c[i][j]=0;                                                                      n^2

    (4)        for(k=0;k<n;k++)                                                        n^2(n+1)

    (5)           c[i][j]=c[i][j]+a[i][k]*b[k][j];                                         n^3

                 }

    }

    【分析】语句(1)的循环控制变量i从0增加到n,测试条件i=n成立才会终止,故它的语句频度是n+1,但是它的循环体却只能执行n次。语句(2)作为语句(1)循环体内的语句应该执行n次,但语句(2)作为语句(1)循环体内的语句应该执行n次,但语句(2)本身要执行n+1次,所以语句(2)的频度是n(n+1).同理可得语句(3)、(4)和(5)的频度分别是n^2、n^2(n+1)和n^3.

    该算法中所有语句的频度之和(即算法的时间耗费)为

    f(n)=2n^3+3n^2+2n+1

    也就是说、该矩阵乘积算法的问题规模是矩阵的阶数n,时间耗费是矩阵阶数n的函数。

    3.算法的时间复杂度

    为便于比较解决同一问题的不同算法,通常以算法中基本操作重复执行的频度作为度量标准。基本操作是指算法中选取一种对所研究问题是基本运算的操作,用随着问题规模增加的函数来表征,以此作为时间量度。

    对于算法分析,关心的是算法中语句总的执行次数f(n)是问题规模n的函数,进而分析f(n)随n的变化情况并确定T(n)的数量级(Order of Magnitude)。这里用“O”来表示数量级,给出算法的时间复杂度概念。算法的时间复杂度T(n)是该算法的时间度量,记作

    T(n)=O(f(n))

    它表示随问题规模n的增大,算法的执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称时间复杂度。

    在例1中算法MatrixMulti中,当n充分大时,f(n)和n^3之比是一个不等于零的常数,即f(n)和n^3是同阶的,或者说f(n)和n^3的数量级相同,O(n^3)是算法MatrixMulti的渐进时间复杂度。

    数学符号“O”的严格数学定义为:

    若T(n)和f(n)是定义在正整数集合上的两个函数,则T(n)=O(f(n))表示存在正的常数C和n0,使得当n>=n0时都满足0<=T(n)<=Cf(n).

    4.渐进时间复杂度

    由于算法执行的实际机器时间难以精确统计,因此主要考虑用算法时间复杂度的数量级(即算法的渐进时间复杂度)来评价一个算法的时间性能。

    例如,由两个算法A1和A2求解同一问题,时间复杂度分别是T1(n)=100n^2,T2(n)=5n^3.

    ①当输入量n<20时,有T1(n)>T2(n),后者花费的时间较少。

    ②随着问题规模的增大,两个算法的时间开销之比5n^3/100n^2=n/20亦随着增大。即当问题规模较大时,算法A1比算法A2有效的多。

    它们的渐进时间复杂度O(n^2)和O(n^3)从宏观上评价了这两个算法在时间方面的质量。在算法分析时,往往对算法的时间复杂度渐进时间复杂度不予区分,而经常是讲渐进时间复杂度T(n)=O(f(n))简称为时间复杂度,其中的f(n)一般是算法中频度最大的语句频度。例1中的算法MatrixMulti的时间复杂度为T(n)=O(n^3),f(n)=n^3是该算法中语句(5)的频度。

    下面在举例说明如何求算法的时间复杂度。

    例1.4   常数阶实例

    temp=i;

    i=j;

    j=temp;

    以上三条单个语句的频度均为1,该程序段的执行时间是一个与问题规模n无关的常数。算法的时间复杂度为常数阶,记作T(n)=O(1)。如果算法执行的时间不随着问题规模n的增大而增长,即使算法中有上千条语句,其执行时间也不过是一个较大的常数。此类算法的时间复杂度是O(1)。

    例1.5  线性阶实例

    for(i=1;i<=n;i++)

    x=x+1;

    其时间复杂度为O(n),称为线性阶。

    例1.6  平方阶实例

    (1)x=0;y=0;

    (2)for(k=1;k<=n;k++)

    (3)x++;

    (4)for(i=1;i<=n;i++)

    (5)for(j=1;j<=n;j++)

    (6)y++;

    一般情况下,对步进循环语句只需考虑循环体中语句的执行次数,忽略该语句中步长加1、终值判断、控制转移等成分。因此,以上程序段中频度最大的是语句(6),其频度为f(n)=n^2,所以该程序段的时间复杂度为T(n)=O(n^2).

    当有若干个循环语句时,算法的时间复杂度是由嵌套层数最多的循环语句中最内层语句的频度f(n)决定的。

    例1.7给出源操作x=x+1;语句频度及程序的时间复杂度分析。

    (1)x=1;

    (2)for(i=1;i<=n;i++)

    (3)for(j=1;j<=i;j++)

    (4)x=x+1

    该程序段中频度最大的是语句(4),内循环的执行次数虽然与问题规模n没有直接关系,但是却与外层循环的变量取值有关,而最外层循环的次数直接与n有关,因此可以从内层循环向外层分析语句(4)的执行次数:当i=1时,j取值范围是1~1,原操作执行次数为1;当i=2时,j取值范围是1~2;当i=3时,j取值范围是1~3,执行次数为3,以此类推,故原操作x=x+1;执行的总次数为

    f(n)=(1+2+3+...+n)=n(n+1)/2=n^2/2+n/2

    则该程序段的时间复杂度为T(n)=O(n^2/2+n/2)=O(n^2).

    5.常用算法时间复杂度

    数据结构中常用的时间复杂度频率计数有以下7种:

    O(1)常数型,O(n)线性型,O(n^2)平方型,O(n^3)立方型,O(2^n)指数型,O(log2n)对数型(ps:以2为底n的对数),O(nlog2n)二维型(ps:同上)

    按时间复杂度由小到大递增排列如下所示。一般来说,前三种可实现,后三种虽理论上是可实现的,但实际上只有当n限制在很小的范围时才有意义,当n较大时实现困难。

                                                                           常用的时间复杂度频率表

    log2n                n                      nlog2n                     n^2                                 n^3                              2^n

    0                       1                         0                             1                                     1                                2

    1                       2                         2                             4                                     8                                4

    2                       4                         8                             16                                   64                              14

    3                       8                        24                            64                                  512                            256

    4                      16                       64                            256                                5096                         65536

    5                      32                      160                          1024                               32768                       2147483648

     

    6.最坏时间复杂度和平均时间复杂度

    算法的时间复杂度不仅仅依赖于问题的规模,还输入实例的初始状态有关。

    例1.8  在数值A[0..n-1]中查找给定值k的算法大致如下,分析其时间复杂度。

    (1)i=n-1;

    (2)while(i>=0&&(a[i]!=k))

    (3)i--;

    (4)return i;

    此算法中,语句(3)的频度不仅与问题规模n有关,还与A的各元素值及k的取值有关。

    ①最坏情况:若A中没有与k相等的元素,则语句(3)的频度f(n)=n。

    ②最好情况:若A的最后一个元素等于k,则语句(3)的频度f(n)是常数0.

    最坏情况下的时间复杂度称最坏时间复杂度。一般不特别说明,讨论的时间复杂度均是最坏情况下的时间复杂度。这样做的原因是:最坏情况下的时间复杂度是算法在任何输入实例上运行时间的上界,这就保证了算法的运行时间不会比这一上界更长。由此可知,上述算法的时间复杂度为T(n)=O(n)。

    平均时间复杂度是指所有可能的输入实例均以等概率出现的情况下,算法的期望运行时间。

    算法的空间性能分析

    一般情况下,一个程序在机器执行时,除了需要存储本身所用的指令、常数、变量和输入数据以外,还需要一些对数据进行操作的辅助存储空间。其中,对于输入数据所占用的具体存储量取决于问题本身,与算法无关,这样只需分析该算法在实现时所需要的辅助空间个数即可。

    1.算法耗费的空间

    一个算法的占用空间是指算法实际占用的辅助空间总和。

    由于实际占用空间与计算机的软件(编译系统)、硬件(字长等)环境密切相关,以整形为例,可能在一种系统中需要2字节,在另一个系统中需要4字节,实际占用空间的多少难以相互类比。算法空间分析度量的标准并不是计算实际占用空间,而是计算整个算法的辅助空间单元个数。

    2.算法的空间复杂度

    算法的空间复杂度S(n)定义为该算法所耗费的存储空间数量级,它是问题规模n的函数。记作

    S(n)=O(f(n))

    若算法执行时所需的辅助空间相对于输入数据量而言是一个常数,则称这个算法为原地工作。辅助空间为O(1)。

    例1.9  将一维数组a中的n个数据逆序存放到原数组中,给出实现该问题的两种算法。

    【算法1】

    for (i=0;<n;i++)

      b[i]=a[n-i-1];

    for(i=0;<n;i++)

      a[i]=b[i];

    【算法2】

    for(i=0;i<n/2;i++)

    {

      t=a[i];

      a[i]=a[n-i-1];

      a[n-i-1]=t;

      }

    算法1的空间复杂度为O(n),需要一个大小为n的辅助数组b。

    算法2的空间复杂度为O(1),仅需要一个变量t,与问题规模没有关系。

    算法的时间复杂度和空间复杂度合称为算法的复杂度。

    算法性能选择

    要想使一个算法即占用存储空间少,又运行时间短,而且其他性能也好,这是很难做到的。原因是上述要求有时相互抵触:要节约算法的执行时间往往要以牺牲更多的空间为代价,而为了节约空间可能要耗费更多的计算时间。因此,只要根据具体的情况进行取舍。

    ①若程序使用次数少,则力求算法简明易懂

    ②对于反复使用的程序,应尽可能选用快速的算法。

    ③若待解决的问题数据量较大,计算机存储空间较小,则相应算法主要考虑如何节省空间。

    展开全文
  • 算法常用评价指标

    2019-11-26 10:49:27
    评价指标是针对将相同的数据,输入不同的算法模型,或者输入不同参数的同算法模型,而给出这个算法或者参数好坏的定量指标。 在模型评估过程中,往往需要使用多种不同的指标进行评估,在诸多的评价指标中,大...

    评价指标是针对将相同的数据,输入不同的算法模型,或者输入不同参数的同一种算法模型,而给出这个算法或者参数好坏的定量指标。

    在模型评估过程中,往往需要使用多种不同的指标进行评估,在诸多的评价指标中,大部分指标只能片面的反应模型的一部分性能,如果不能合理的运用评估指标,不仅不能发现模型本身的问题,而且会得出错误的结论。

    1、名词解释

    真正例(True Positive,TP):预测为真,实际为真

    真负例(True Negative,TN):预测为假,实际为假

    假正例(False Positive,FP):预测为真,实际为假

    假负例(False Negative,FN):预测为假,实际为真

    2、准确率Accuracy

    定义:预测正确的结果占总样本的百分比;

    公式:在这里插入图片描述

    准确率是分类问题中最为原始的评价指标,但是,准确率评价算法有一个明显的弊端问题,就是在数据的类别不均衡,特别是有极偏的数据存在的情况下,准确率这个评价指标是不能客观评价算法的优劣的。

    例如下面这个例子:

    在测试集里,有100个sample,99个反例,只有1个正例。如果我的模型不分青红皂白对任意一个sample都预测是反例,那么我的模型的准确率就为0.99,从数值上看是非常不错的,但事实上,这样的算法没有任何的预测能力,于是我们就应该考虑是不是评价指标出了问题,这时就需要使用其他的评价指标综合评判了。

    3、精确率Precision

    定义:又叫查准率,它是针对预测结果而言的,它的含义是在所有被预测为正的样本中实际为正的样本的概率,意思就是在预测为正样本的结果中,我们有多少把握可以预测正确。

    公式:在这里插入图片描述

    精准率和准确率看上去有些类似,但是完全不同的两个概念。精准率代表对正样本结果中的预测准确程度,而准确率则代表整体的预测准确程度,既包括正样本,也包括负样本。

    4、召回率Recall

    定义:又叫查全率,它是针对原样本而言的,它的含义是在实际为正的样本中被预测为正样本的概率

    公式:在这里插入图片描述

    在不同的应用场景下,我们的关注点不同,例如,在预测股票的时候,我们更关心精准率,即我们预测升的那些股票里,真的升了有多少,因为那些我们预测升的股票都是我们投钱的。而在预测病患的场景下,我们更关注召回率,即真的患病的那些人里我们预测错了情况应该越少越好。

    精确率和召回率是一对此消彼长的度量。例如在推荐系统中,我们想让推送的内容尽可能用户全都感兴趣,那只能推送我们把握高的内容,这样就漏掉了一些用户感兴趣的内容,召回率就低了;如果想让用户感兴趣的内容都被推送,那只有将所有内容都推送上,宁可错杀一千,不可放过一个,这样准确率就很低了。

    在实际工程中,我们往往需要结合两个指标的结果,去寻找一个平衡点,使综合性能最大化。
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 1. 典型聚类算法 1.1 基于划分的方法 代表:kmeans算法 ·指定k聚类中心 ·(计算数据点与初始聚类中心的距离) ·(对于数据点,找到最近的{i}ci(聚类...·每样本作为单独的一个类别 · ·合并,为 ·遍历...

     

    1. 典型聚类算法

    1.1 基于划分的方法

    代表:kmeans算法

    ·指定k个聚类中心640?wx_fmt=png
    ·640?wx_fmt=png(计算数据点与初始聚类中心的距离)
    ·640?wx_fmt=png(对于数据点640?wx_fmt=png,找到最近的640?wx_fmt=png{i}ci(聚类中心),将640?wx_fmt=png分配到640?wx_fmt=png{i}ci中)
    ·640?wx_fmt=png(更新聚类中心点,640?wx_fmt=png是新类别数值的均值点)
    ·640?wx_fmt=png(计算每一类的偏差)
    ·640?wx_fmt=png返回640?wx_fmt=png
    640?wx_fmt=png返回第二步

    1.2 基于层次的方法

    代表:CURE算法

    ·每个样本作为单独的一个类别640?wx_fmt=png
    ·640?wx_fmt=png
    ·合并640?wx_fmt=png,640?wx_fmt=png640?wx_fmt=png
    ·遍历完本次样本,合并成新的类别后,若存在多个类别,则返回第二步
    ·遍历完本次样本,合并成新的类别后,若所有样本为同一类别,跳出循环,输出每层类别

    1.3 基于网格的方法

    代表:STING算法

    ·将数据集合X划分多层网格结构,从某一层开始计算
    ·查询该层网格间的属性值,计算属性值与阈值的关系,判定网格间的相关情况,不相关的网格不作考虑
    ·如果网格相关,则进入下一层的相关区域继续第二步,直到下一层为最底层
    ·返回相关网格结果

    1.4 基于密度的方法

    代表:DBSCAN算法

    ·输入数据集合X,随机选取一点,并找出这个点的所有高密度可达点
    ·遍历此点的所有640?wx_fmt=png邻域内的点,并寻找这些密度可达点,判定某点640?wx_fmt=png邻域内的点,并寻找这些点密度可达点,判定某点的640?wx_fmt=png邻域内的点数是否超过阈值点数,超过则构成核心点
    ·扫描数据集,寻找没有被聚类的数据点,重复第二步
    ·输出划分的类,并输出异常值点(不和其他密度相连)

    1.5 神经网络的方法

    代表:SOM算法

    ·数据集合640?wx_fmt=png,权重向量为640?wx_fmt=png640?wx_fmt=png,归一化处理640?wx_fmt=png
    ·寻找获胜的神经元,找到最小距离,对于每一个输入数据,找到与之最相匹配的节点
    640?wx_fmt=png640?wx_fmt=png640?wx_fmt=png的距离,更新权重:640?wx_fmt=png
    ·更新临近节点,640?wx_fmt=png,其中640?wx_fmt=png代表学习率

    1.6 基于图的聚类方法

    代表:谱聚类算法

    ·计算邻接矩阵640?wx_fmt=png,度矩阵640?wx_fmt=png640?wx_fmt=png
    ·计算拉普拉及矩阵640?wx_fmt=png
    ·计算归一化拉普拉斯矩阵640?wx_fmt=png
    ·计算640?wx_fmt=png的特征值和特征向量640?wx_fmt=png
    ·对Q矩阵进行640?wx_fmt=png聚类,得到聚类结果

    2. 聚类算法的评价指标

    一个好的聚类方法可以产生高品质簇,是的簇内相似度高,簇间相似度低。一般来说,评估聚类质量有两个标准,内部质量评价指标和外部评价指标。

    2.1 内部质量评价标准

    内部评价指标是利用数据集的属性特征来评价聚类算法的优劣。通过计算总体的相似度,簇间平均相似度或簇内平均相似度来评价聚类质量。评价聚类效果的高低通常使用聚类的有效性指标,所以目前的检验聚类的有效性指标主要是通过簇间距离和簇内距离来衡量。这类指标常用的有CH(Calinski-Harabasz)指标等

    CH指标

    CH指标定义为:
    640?wx_fmt=png
    其中640?wx_fmt=png表示类间距离差矩阵的迹,640?wx_fmt=png表示类内离差矩阵的迹,640?wx_fmt=png是整个数据集的均值,640?wx_fmt=png是第640?wx_fmt=png个簇640?wx_fmt=png的均值,640?wx_fmt=png代表聚类个数,640?wx_fmt=png代表当前的类。640?wx_fmt=png值越大,聚类效果越好,640?wx_fmt=png主要计算簇间距离与簇内距离的比值

    簇的凝聚度

    簇内点对的平均距离反映了簇的凝聚度,一般使用组内误差平方(SSE)表示:
    640?wx_fmt=png

    簇的邻近度

    簇的邻近度用组间平方和(SSB)表示,即簇的质心640?wx_fmt=png到簇内所有数据点的总平均值640?wx_fmt=png的距离的平方和

    2.2 外部质量评价标准

    外部质量评价指标是基于已知分类标签数据集进行评价的,这样可以将原有标签数据与聚类输出结果进行对比。外部质量评价指标的理想聚类结果是:具有不同类标签的数据聚合到不同的簇中,具有相同类标签的数据聚合相同的簇中。外部质量评价准则通常使用熵,纯度等指标进行度量。

    熵:

    簇内包含单个类对象的一种度量。对于每一个簇,首先计算数据的类分布,即对于簇640?wx_fmt=png,计算簇640?wx_fmt=png的成员属于类640?wx_fmt=png的概率
    640?wx_fmt=png
    其中640?wx_fmt=png表示簇640?wx_fmt=png中所有对象的个数,而640?wx_fmt=png是簇640?wx_fmt=png中类640?wx_fmt=png的对象个数。使用类分布,用标准公式:
    640?wx_fmt=png
    计算每个簇640?wx_fmt=png的熵,其中K是类个数。簇集合的总熵用每个簇的熵的加权和计算即:
    640?wx_fmt=png
    其中640?wx_fmt=png是簇的个数,而640?wx_fmt=png是簇内数据点的总和

    纯度:

    簇内包含单个类对象的另外一种度量。簇640?wx_fmt=png的纯度为640?wx_fmt=png,而聚类总纯度为:
    640?wx_fmt=png

     

    欢迎关注磐创博客资源汇总站:
    http://docs.panchuang.net/

    欢迎关注PyTorch官方中文教程站:
    http://pytorch.panchuang.net/

    展开全文
  • 多目标跟踪算法评价指标

    千次阅读 2019-02-21 18:21:07
    标准CLEAR-MOT测量,包括: Multi-Object Tracking Accuracy(MOTA) Multi-ObjectTracking Precision (MOTP)这两个评价标准。 此外,额外引入了若干指标来进行评价:↑:表示得分越高越好,反之亦然。...
  • 算法的性能评价一般来说考虑一下四方面...算法评价中的时间复杂度: (1)时间频度一个算法执行所耗费的时间,从理论上是能算出来的,必须上机运行测试才能知道。但我们可能也没有必要算法都上机测试...
  • 分类算法评价(集合)

    千次阅读 2016-10-14 12:02:22
    、引言  分类算法有很多,不同分类算法又用很多不同的变种。不同的分类算法有不同的特定,... 正确率确实是一个很好很直观的评价指标,但是有时候正确率高并能代表一个算法就好。比如某个地区某天地震的预测,假
  • 聚类算法及其评价

    千次阅读 2018-05-29 00:28:21
    姓名:Jyx ...聚类往往单独存在,而是作为一个大的监督学习算法部分存在 聚类的原则。 类内散度最小,类间散度最大 聚类的用途 3.1 减少计算量。通过样本分类,以分类标签代替原始向量,大大...
  • 文章目录那么我们过去是怎么评价的?客观评价-基于指标客观评价-基于模型R&S®UPV音频分析仪小结那么我们现在用哪些评价方法呢?基于深度学习的方法:AutoMOS, QualityNe, NISQA, MOSNetMOSNet(`absolute....
  • 给你一个算法应该怎么写程序(数学建模 matlab)

    万次阅读 多人点赞 2017-08-27 13:29:52
    本文写作初衷:有可爱的学妹问我在看到一个算法编程时的步骤是什么,然而作为伪大神的我,感觉并知道怎么回答,感觉我编程就俩字死磕,错了咋办?再来遍!不行咋办?换写法试试!还不行?百度!不过既然人家...
  • 介绍论文名: “classification, ranking, and top-k ...与常规准确率比较的方式不同, 本文从另一个角度, 即推荐算法稳定性方面进行比较.详细参与比较的推荐算法包括: baseline 传统基于用户 传统基于物品 oneSlope s
  • 算法评价标准

    千次阅读 2015-08-20 15:45:00
    通常从四方面评价算法的质量:_________、_________、_________和_________。 正确性、易读性、强壮性和高效性 转载于:https://www.cnblogs.com/fthjane/p/4745386.html
  • 并行算法评价方法

    千次阅读 2011-10-07 11:20:16
    并行算法通常包含三种评价的方法,用来评价算法各方面的优劣。 1.speedup 评测speedup的方法是,保持数据不变,增加计算机的数目。计算机数目为m时的speedup计算方法如下: speedup(m)=在台机器上面使用...
  • 无监督聚类算法该如何评价

    万次阅读 多人点赞 2017-07-03 21:57:29
    学过机器学习的小伙伴应该都很清楚:几乎所有的机器学习理论与实战教材里面都有非常详细的理论化的有监督分类学习算法评价指标。例如:正确率、召回率、精准率、ROC曲线、AUC曲线。但是几乎没有任何教材上有明确的...
  • ROUGE评价算法学习

    千次阅读 2018-06-15 00:38:30
    ROUGE(Recall-Oriented Understudy for Gisting Evaluation),在2004年由ISI的Chin-Yew Lin提出的种自动摘要评价方法,现被广泛应用于DUC(Document Understanding Conference)的摘要评测任务中。ROUGE基于...
  • 、图像质量评价数据库 ...LIVE:由德克萨斯大学的图像与视频工程实验室(Laboratory for Image and Video Engineering,LIVE)开发,包含不同大小的29参考图像和779失真图像,格式为BMP,失真包括高斯模...
  • 心电算法准确性评价总结

    千次阅读 2018-03-20 18:32:05
    花两天时间调研了心电算法评价路径,受到数据库无法获取的限制,企业拥有算法验证能力,既有利于产品性能也保证算法的优化迭代方向。1、相关标准:国内记录盒分析型心电图机的检测要同时执行YY1139-2013和YY0782-...
  • 主要介绍了用于评价电阻抗成像图像重建算法评价指标和相应的计算方法
  • 调度算法评价指标

    千次阅读 2020-02-11 12:43:45
    一个作业总共需要被CPU服务多久,被I/O设 备服务多久一般是确定不变的,因此调度算法其实只会影响作业/进程的等待时间。 6.响应时间 对于计算机用户来说,会希望自己的提交的请求(比如通过键盘输入了一个调试...
  • 并利用匈牙利算法Kuhn-Munkres实现聚类标签和真实标签的映射,结果进行聚类精度Accuracy评价和标准互信息Nmi评价思路输入数据为经典MNIST数据集利用Matlab中Kmeans算法对数据进行聚类聚类精度Acc评价标准互信息...
  • 搜索算法相关性评价指标

    千次阅读 2019-01-11 13:01:44
    它是一个搜索结果相关性分数的总和。置顶位置p上的CG为: CGp=∑i=1preliCG_p = \sum^{p} _{i=1}rel_iCGp​=i=1∑p​reli​ relirel_ireli​代表i这位置上的相关度。 eg:搜索“篮球”结果,最理想的结果是:B1、...
  • 路由算法分析
  • 算法模型好坏的评价通用标准: 1、解的精确性与最优性。基于正确性基础上。 2、计算复杂度,时间成本。 3、适应性。适应变化的输入和各种数据类型。 4、可移植性。 5、鲁棒性。健壮性。 鲁棒性(robustness...
  • 图像全参考客观评价算法比较

    万次阅读 多人点赞 2014-08-05 00:06:17
    Lin Zhang等人在论文《A COMPREHENSIVEEVALUATION OF FULL REFERENCE IMAGE QUALITY ASSESSMENT ALGORITHMS》中,比较了几种全参考图像质量评价算法,在此记录一下他们的结果。下表所示是他们所用的图像库,包含了:...
  • 当我们需要评估一个SLAM/VO算法的表现时,可以从时耗、复杂度、精度多角度切入,其中精度的评价是我们最关注的,这过程中我们可避免会遇到两精度指标ATE和RPE。这两evaluation metrics最早是在TUM数据集...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 96,974
精华内容 38,789
关键字:

对一个算法的评价不包括