精华内容
下载资源
问答
  • 软件规模的估算方法

    千次阅读 2011-01-14 10:06:00
    软件项目规模估算历来比较复杂事,因为软件本身复杂性、历史经验缺乏、估算工具缺乏以及一些人为错误,导致软件项目规模估算往往和实际情况相差甚远。 因此,估算错误已被列入软件项目失败四大原因之...
    软件项目的规模估算历来是比较复杂的事,因为软件本身的复杂性、历史经验的缺乏、估算工具缺乏以及一些人为错误,导致软件项目的规模估算往往和实际情况相差甚远。 因此,估算错误已被列入软件项目失败的四大原因之一。
    软件工程师经常会被问到,编一个什么什么样的软件需要多长时间、多少钱。面对这个问题,有不少人很犯难,因为,第一用户的需求太不具体,第二,自己缺乏一个科学的估计方法。这里向大家介绍几种软件项目规模的估计方法。
    概念介绍
    先介绍一个衡量软件项目规模最常用的概念--LOC(Line of Code),LOC指所有的可执行的源代码行数,包括可交付的工作控制语言(JCL:Job Control Language)语句、数据定义、数据类型声明、等价声明、输入/输出格式声明等。一代码行(1LOC)的价值和人月均代码行数可以体现一个软件生产组织的生产能力。组织可以根据对历史项目的审计来核算组织的单行代码价值。
    例如,某软件公司统计发现该公司每一万行C语言源代码形成的源文件(.c和.h文件)约为250K。某项目的源文件大小为3.75M,则可估计该项目 源代码大约为15万行,该项目累计投入工作量为240人月,每人月费用为10000元(包括人均工资、福利、办公费用公滩等),则该项目中1LOC的价值 为:
    (240×10000)/150000=16元/LOC
    改项目的人月均代码行数为:
    150000/240=625LOC/人月
    方法一、Delphi 法
    Delphi法是最流行的专家评估技术,在没有历史数据的情况下,这种方式适用于评定过去与将来,新技术与特定程序之间的差别,但专家"专"的程度及 对项目的理解程度是工作中的难点,尽管Delphi技术可以减轻这种偏差,专家评估技术在评定一个新软件实际成本时通常用得不多,但是,这种方式对决定其 它模型的输入时特别有用。Delphi法鼓励参加者就问题相互讨论。这个技术,要求有多种软件相关经验人的参与,互相说服对方。
    Delphi法的步骤是:
    1、协调人向各专家提供项目规格和估计表格;
    2、协调人召集小组会各专家讨论与规模相关的因素;
    3、各专家匿名填写迭代表格;
    4、协调人整理出一个估计总结,以迭代表的形式返回专家;
    5、协调人召集小组会,讨论较大的估计差异;
    6、专家复查估计总结并在迭代表上提交另一个匿名估计;
    7、重复4-6, 直到达到一个最低和最高估计的一致。
    方法二、 类比法
    类比法适合评估一些与历史项目在应用领域、环境和复杂度的相似的项目,通过新项目与历史项目的比较得到规模估计。类比法估计结果的精确度取决于历史项 目数据的完整性和准确度,因此,用好类比法的前提条件之一是组织建立起较好的项目后评价与分析机制,对历史项目的数据分析是可信赖的。
    其基本步骤是:
    1、整理出项目功能列表和实现每个功能的代码行;
    2、标识出每个功能列表与历史项目的相同点和不同点,特别要注意历史项目做得不够的地方;
    3、通过步骤1和2得出各个功能的估计值;
    4、产生规模估计。
    软件项目中用类比法,往往还要解决可重用代码的估算问题。估计可重用代码量的最好办法就是由程序员或系统分析员详细地考查已存在的代码,估算出新项目可重用的代码中需重新设计的代码百分比、需重新编码或修改的代码百分比以及需重新测试的代码百分比。根据这三个百分比,可用下面的计算公式计算等价新代码行:
    等价代码行 = [(重新设计% +重新编码% +重新测试%)/3]× 已有代码行
    比如:有10,000行代码,假定30%需要重新设计,50%需要重新编码,70%需要重新测试,那么其等价的代码行可以计算为:
    [ (30% + 50% + 70%)/3 ]× 10,000 = 5,000 等价代码行。
    意即:重用这10000代码相当于编写5000代码行的工作量。
    方法三、功能点估计法
    功能点测量是在需求分析阶段基于系统功能的一种规模估计方法。通过研究初始应用需求来确定各种输入、输出、计算和数据库需求的数量和特性。通常的步骤是:
    1、计算输入,输出,查询,主控文件,和接口需求的数目。
    2、将这些数据进行加权乘。下表为一个典型的权值表。
    功能类型权值
    输入4
    输出5
    查询4
    主控文件10
    接口10
    3、估计者根据对复杂度的判断,总数可以用+25%、0、或-25%调整。
    据发现,对一个软件产品的开发,功能点对项目早期的规模估计很有帮助。然而,在了解产品越多后,功能点可以转换为软件规模测量更常用的LOC。
    方法四、PERT估计法
    PERT对各个项目活动的完成时间按三种不同情况估计:一个产品的期望规模,一个最低可能估计,一个最高可能估计。用这三个估计用来得到一个产品期望规模和标准偏差的Pert 统计估计。Pert 估计可得到代码行的期望值E, 和标准偏差SD。

     

    展开全文
  • 摘要:本文主要介绍最常用的两种估算方法:计划扑克估算和敏捷估算2.0。...经了解,团队目前的估算方法很简单,基本上架构师和团队中有丰富开发经验的成员一言堂。估算的速度也很快。对于有些有疑问的需求,开发..

    摘要:本文主要介绍最常用的两种估算方法:计划扑克估算和敏捷估算2.0。

     

    背景

    在某开发团队辅导的回顾会议上,团队成员对于优化估计具体方法上达成了一致意见。询问是否有什么具体的估计方法来做估算。

     

    问题分析

    回顾意见上大家对本次Sprint的效果做回顾,其中80%的成员对于本次Sprint的估算效果不满意,最终团队希望在下一个Sprint中,估算活动能有所改善。

    经了解,团队目前的估算方法很简单,基本上是架构师和团队中有丰富开发经验的成员一言堂。估算的速度也很快。对于有些有疑问的需求,开发成员也是保持沉默,草草认领了任务。

    团队迫切希望学习新的估算方法来优化目前的估算活动,因此分享几个具体的估算方法给团队实践,让他们自己选择适合、喜欢的估算方法是解决问题的关键。

     

    解决措施

    我们来学习下具体的故事点估算的实践,感受一下估算。这里介绍最常用的两种估算方法:一个是计划扑克估算,另一个是敏捷估算2.0。下表内容展示了这两种估算方法在什么情形下选择。

    估算方法

    选择理由

    计划扑克估算

    ü  使不同技术水平和工作速度的人在估算结果上保持一致。

    ü  激发对工作项细节的思考,让所有假设都显露出来,充分了解工作项。

    ü  需要估算的用户故事量不是非常大(例如,500个就非常大,采用此方法会非常耗时)。

    敏捷估算2.0

    ü  通常耗费的时间会缩短。

    ü  需要估算的用户故事非常多。

     

    计划扑克估算

    在敏捷开发中,最典型的使用故事点做估算的方法是计划扑克(Planning Poker)。

    计划扑克由James Grenning在2002年首次提出。计划扑克集合了专家意见(Expert Opinion),类比(Analogy)以及分解(Disaggregation)这三种常用的估算方法,使团队通过一个愉快的过程快速而准确的得出估算结果。

    计划扑克的参与者是团队的所有成员。典型的敏捷团队规模推荐为7±2人,如规模比较大可以考虑拆分成为多个小团队各自独立进行估算。Product Owner也需要参加,但不参与估算。

    计划扑克开始时,每个参与估算的组员都会得到一副计划扑克,每一张牌上写有一个Fibonacci数字 (典型的计划扑克由12张牌组成:?,0, ½,1, 2, 3, 5, 8, 13, 20, 40, 100,∞,其中?代表信息不够无法估算,∞代表该用户故事太大)。

    开始对一个用户故事进行估算时,首先由Product Owner介绍这个用户故事的描述。过程中Product Owner回答组员任何关于该用户故事的问题。展开讨论时主持人(通常由Scrum Master担任)应注意控制时间与细节程度,只要团队觉得对用户故事信息已经了解到可以估算了,就应当中止讨论开始估算。

    所有问题都被澄清后,每一个组员从 扑克中挑选他/她觉得可以表达这个用户故事大小的一张牌,但是不亮牌,也不让别的组员知道自己的分数。所有人都准备好后,主持人发口令让所有人同时亮牌,并保证每个人的估算值都可以被其他人清楚的看到。

    经常会出现不同组员亮出的分值差距很大的现象。当出现有很多不同分值的时候,出分最高的人和出分最低的人需要向整个团队解释出分的依据。(主持人需要注意控制会议氛围,避免出现意见不一导致的攻击性言论。)所有的讨论应集中于出分者的想法是否值得团队其他成员进行更深入的思考。

    随后全组可以针对这些想法进行几分钟的自由讨论。讨论之后,团队进行下一轮的全组估算。一般来说,很多用户故事在进行第二轮估算的时候就能得到一个全组统一的分值,但是如果不能达到全组意见一致,那么就重复的进行下一轮直到得到统一结论。

     

    敏捷估算2.0(Agile Estimating 2.0)

    计划扑克是Scrum团队应用最广泛的敏捷估算方法,但是有时候计划扑克玩起来耗费比较多的时间,尤其是在十人左右的团队中。Ken Schwaber在他的书《Agile Project Management with Scrum》中指出,在进行迭代规划时,迭代计划环节应该控制为一个4小时的固定时间,但是从战术的角度看,如果一个会议持续4小时,大部分的参会者会有精疲力竭的感觉,并且很难保持持久的注意力。

    为了解决这个问题,Brad Swanson 和 Björn Jensen在上海Scrum Gathering (2010/4/19)上介绍了Agile Estimating 2.0技术。这个新的估算技术同样基于的专家意见,类比和分解,同样适用Fibonacci数列,但是它可以显著地缩短会议时间。它的估算过程大致分为主要四步,如下图所示:

    第一步:由Product Owner向团队介绍每一个用户故事,确保所有需求相关的问题都在做估算前得到解决。

    第二步:整个团队一起参与这个游戏。

    只有一个简单的游戏规则:一次仅由一个人将一个用户故事卡放在白板的合适位置上:规模小的故事在左,大的在右,一样大的竖向排成一列。整个团队轮流移动故事卡,直到整个团队都认同白板上的故事卡的排序为止。

      第三步:团队将故事点(Story Point)分配给每个用户故事(列)。

    最简单的做法是使用投票来决定每个用户故事分配到哪一个Fibonacci数字。

    最后一步:使用不同颜色来区分影响估算大小的不同方面,并且重新考虑是否需要修改估算值。

    例如,我们使用红色来表示那些无法被自动化测试脚本覆盖的用户故事,因此那些用户故事需要一个更大的数字来容纳手工回归测试的代价。

    在国内一些企业多次实践Agile Estimating 2.0之后,反馈的结果还是令人兴奋。据称,团队对于估算的准确性更有信心了,并且只耗费原先的1/2时间。

    通过以上介绍,相信了解了如何使用用户故事来分析了解需求。在学习了估算的核心概念及故事点后,对于估算方法的实践也有了更深的体会。不论是计划扑克估算还是敏捷估算2.0都只是估算的一种实践,不是固定的唯一方法。只要理解估算的意义和核心概念,选择适合的方法就是没有问题的。另外补充一下,这里讲的估算偏重于用故事点估算,如果团队成员一致达成共识,用工时或理想人天效果更好,便可以尝试,给予团队试错的机会,说不定也有意想不到的收获。

    完成了估算后,我们需要对估算的内容进行管理。华为云DevCloud在用户故事或者Task中均有一个记录估算结果的属性,比如预计工时。所有工作项估算结果记录以后就可以以列表的方式进行查看。可以按处理人排序,查看每个成员认领的任务是否饱和。

    开发团队完成的工作内容可以时时更新实际数据,这样每轮迭代也可以就估算准确度进行统计和分析。看看估算结果和实际结果的差别,以便可以后续做估算调整和改善。

     

    参考附录

    1. Kenneth S. Rubin. Scrum精髓[M].北京:清华大学出版社。
    2. Mark C. Layton. 敏捷项目管理[M].北京:人民邮电出版社。

     

    相关推荐

    【DevCloud · 敏捷智库】估算第一篇:利用用户故事了解需求

    【DevCloud · 敏捷智库】估算第二篇:利用核心概念解决估算常见问题

    【DevCloud · 敏捷智库】估算第三篇:利用故事点做估算

    展开全文
  • 先来看一下SOC定义——SOC,全称State of Charge,电池荷电状态,也叫剩余电量,代表的是电池使用一段时间或长期搁置不用后剩余可放电电量与其完全充电状态电量比值,常用百分数表示。其一般用一个字节也...

    (1)什么叫SOC?

    先来看一下SOC的定义——SOC,全称是State of Charge,电池荷电状态,也叫剩余电量,代表的是电池使用一段时间或长期搁置不用后的剩余可放电电量与其完全充电状态的电量的比值,常用百分数表示。其一般用一个字节也就是两位的十六进制表示(取值范围为0~100),含义是剩余电量为0%~100%,当SOC=0时表示电池放电完全,当SOC=100%时表示电池完全充满。SOC与我们的生活息息相关,如常见的手机电量,智能手表电量,电动车电量......。

    (2)SOC估算难点?

    1、电池开路电压(OCV)特性。电池开路电压指的是电池在静置状态下,正负电极之间的电位差。不同的电池其特性都不一样,要充分考虑具体的电池类型。

    2、充放电倍率与端电压对应关系特性。电池动态情况下,我们测量到的电池电压,实际上电池的端电压。在定温度和恒流状态下它们的关系还是相对稳定的,但是电池只要工开始非恒流工作就会打乱对应关系。

    3、温度状态。不同材料的电池都会受到温度的影响,特别是低温(所以系统会有加热功能);反正温度对电池的各个参数都有影响。

    4、电池寿命状态。电池在使用的过程中寿命将逐渐衰减,衰减机理主要在于正负极材料晶体的塌陷和电极的钝化导致了有效锂离子的损失。总电量也将从BOL(Beginning of Life)向EOL(End of Life)状态趋近。因此在计算SOC时需要考虑是采用BOL时刻的总容量,还是当前寿命下的实际总容量。

    5、电池的串并结合。我们在实际使用中电芯肯定不是单个的,都是由于电芯的串并联组合的,这就使SOC的估算情况变得更加复杂。不同电芯间难免存在欧姆内阻、极化内阻、自放电率、初始容量等差别。

    (3)常用SOC估算方法

    目前主流的SOC估算方法有开路电压法电流积分法、卡尔曼滤波法和神经网络法。比较常用的是前两种,后两种算法这里不展开讨论。

    1、开路电压法其原理是利用电池在长时间静置的条件下,开路电压与SOC存在相对固定的函数关系,从而根据开路电压来估算SOC。以前常用的铅蓄电池电动自行车就是使用这种方法估算SOC。开路电压法简单便捷,但也存在很多缺点:

    A、电池须经过长期静置,但电动汽车启动频繁,开路电压短时间内很难稳定;

    B、电池存在电压平台,特别是磷酸铁锂电池,在SOC30%-80%期间,端电压和SOC曲线近似为直线;

    C、电池处于不同温度或不同寿命时期,尽管开路电压一样,但实际上的SOC差别可能较大;

    2、电流积分法估算SOC目前广泛应用于电动自行车、园林工具、储能等领域。虽然很多不同的BMS厂家都是用电流积分法估算SOC,但是由于各自算法设计、硬件电路、电流采样芯片选择的不同精度也各不相同。电流积分法也叫安时积分法(也叫电流积分法或库仑计数法),其本质是在电池进行充电或放电时,通过累积充进或放出的电量来估算电池的SOC。与其它SOC估算方法相比,电流积分法相对可靠,并且可以动态地估算电池的SOC值,因此被广泛使用。

    电流积分法简化公式如下:

    8f3bb44e644429088a7cefe4f1c7f4c0.png

    从以上公式不难看出,该估算方法存在着误差,主要来源于三个方面:

    93e781a1659e6a79680826bd5ed23498.png

    2.1 电流采样造成误差

    采样精度采样间隔

    2.2 电池容量变化造成误差

    温度变化电池老化充放电倍率不同电池自放电

    2. 3 SOC

    初始SOC估算困难

    最终SOC过程取舍误差

    该方法只是以电池的外部特征作为SOC估算依据,在一定程度上忽视了电池自放电率、老化程度和充放电倍率对电池SOC的影响,长期使用也会导致测量误差不断累积扩大,因此需要引入相关修正系数对累积误差进行纠正。

    小结

    就目前来讲SOC的估算精度依然是世界级的难题,希望能早日突破。对与相关企业来讲,也是衡量一个企业技术水平的标准,当然了突破SOC的估算需要很强大的人力物力。(PS-了解了这么多,我还是老老实实的用基本方法去校准吧,差不多就行了⊙ω⊙)

    展开全文
  • 在做分类时常常需要估算不同样本之间的相似性度量(Similarity Measurement),这时通常采用的方法就是计算样本...采用什么样的方法计算距离很讲究,甚至关系到分类的正确与否。  本文的目的就是对常用的相似性
    原帖请见: http://www.cnblogs.com/heaad/archive/2011/03/08/1977733.html
    

    在做分类时常常需要估算不同样本之间的相似性度量(Similarity Measurement),这时通常采用的方法就是计算样本间的“距离”(Distance)。采用什么样的方法计算距离是很讲究,甚至关系到分类的正确与否。

      本文的目的就是对常用的相似性度量作一个总结。


    本文目录:

    1. 欧氏距离

    2. 曼哈顿距离

    3. 切比雪夫距离

    4. 闵可夫斯基距离

    5. 标准化欧氏距离

    6. 马氏距离

    7. 夹角余弦

    8. 汉明距离

    9. 杰卡德距离 & 杰卡德相似系数

    10. 相关系数 & 相关距离

    11. 信息熵


    1. 欧氏距离(Euclidean Distance)

           欧氏距离是最易于理解的一种距离计算方法,源自欧氏空间中两点间的距离公式。

    (1)二维平面上两点a(x1,y1)与b(x2,y2)间的欧氏距离:

     

    (2)三维空间两点a(x1,y1,z1)与b(x2,y2,z2)间的欧氏距离:

     

    (3)两个n维向量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的欧氏距离:

     

      也可以用表示成向量运算的形式:

     

    (4)Matlab计算欧氏距离

    Matlab计算距离主要使用pdist函数。若X是一个M×N的矩阵,则pdist(X)将X矩阵M行的每一行作为一个N维向量,然后计算这M个向量两两间的距离。

    例子:计算向量(0,0)、(1,0)、(0,2)两两间的欧式距离

    X = [0 0 ; 1 0 ; 0 2]

    D = pdist(X,'euclidean')

    结果:

    D =

        1.0000    2.0000    2.2361

     


    2. 曼哈顿距离(Manhattan Distance)

           从名字就可以猜出这种距离的计算方法了。想象你在曼哈顿要从一个十字路口开车到另外一个十字路口,驾驶距离是两点间的直线距离吗?显然不是,除非你能穿越大楼。实际驾驶距离就是这个“曼哈顿距离”。而这也是曼哈顿距离名称的来源, 曼哈顿距离也称为城市街区距离(City Block distance)

    (1)二维平面两点a(x1,y1)与b(x2,y2)间的曼哈顿距离

     

    (2)两个n维向量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的曼哈顿距离

     

    (3) Matlab计算曼哈顿距离

    例子:计算向量(0,0)、(1,0)、(0,2)两两间的曼哈顿距离

    X = [0 0 ; 1 0 ; 0 2]

    D = pdist(X, 'cityblock')

    结果:

    D =

         1     2     3


    3. 切比雪夫距离 ( Chebyshev Distance )

           国际象棋玩过么?国王走一步能够移动到相邻的8个方格中的任意一个。那么国王从格子(x1,y1)走到格子(x2,y2)最少需要多少步?自己走走试试。你会发现最少步数总是max( | x2-x1 | , | y2-y1 | ) 步 。有一种类似的一种距离度量方法叫切比雪夫距离。

    (1)二维平面两点a(x1,y1)与b(x2,y2)间的切比雪夫距离

     

    (2)两个n维向量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的切比雪夫距离

     

      这个公式的另一种等价形式是

     

           看不出两个公式是等价的?提示一下:试试用放缩法和夹逼法则来证明。

    (3)Matlab计算切比雪夫距离

    例子:计算向量(0,0)、(1,0)、(0,2)两两间的切比雪夫距离

    X = [0 0 ; 1 0 ; 0 2]

    D = pdist(X, 'chebychev')

    结果:

    D =

         1     2     2

     


    4. 闵可夫斯基距离(Minkowski Distance)

    闵氏距离不是一种距离,而是一组距离的定义。

    (1) 闵氏距离的定义

           两个n维变量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的闵可夫斯基距离定义为:

     

    其中p是一个变参数。

    当p=1时,就是曼哈顿距离

    当p=2时,就是欧氏距离

    当p→∞时,就是切比雪夫距离

           根据变参数的不同,闵氏距离可以表示一类的距离。

    (2)闵氏距离的缺点

      闵氏距离,包括曼哈顿距离、欧氏距离和切比雪夫距离都存在明显的缺点。

      举个例子:二维样本(身高,体重),其中身高范围是150~190,体重范围是50~60,有三个样本:a(180,50),b(190,50),c(180,60)。那么a与b之间的闵氏距离(无论是曼哈顿距离、欧氏距离或切比雪夫距离)等于a与c之间的闵氏距离,但是身高的10cm真的等价于体重的10kg么?因此用闵氏距离来衡量这些样本间的相似度很有问题。

           简单说来,闵氏距离的缺点主要有两个:(1)将各个分量的量纲(scale),也就是“单位”当作相同的看待了。(2)没有考虑各个分量的分布(期望,方差等)可能是不同的。

    (3)Matlab计算闵氏距离

    例子:计算向量(0,0)、(1,0)、(0,2)两两间的闵氏距离(以变参数为2的欧氏距离为例)

    X = [0 0 ; 1 0 ; 0 2]

    D = pdist(X,'minkowski',2)

    结果:

    D =

        1.0000    2.0000    2.2361



    5. 标准化欧氏距离 (Standardized Euclidean distance )

    (1)标准欧氏距离的定义

      标准化欧氏距离是针对简单欧氏距离的缺点而作的一种改进方案。标准欧氏距离的思路:既然数据各维分量的分布不一样,好吧!那我先将各个分量都“标准化”到均值、方差相等吧。均值和方差标准化到多少呢?这里先复习点统计学知识吧,假设样本集X的均值(mean)为m,标准差(standard deviation)为s,那么X的“标准化变量”表示为:

      而且标准化变量的数学期望为0,方差为1。因此样本集的标准化过程(standardization)用公式描述就是:

      标准化后的值 =  ( 标准化前的值  - 分量的均值 ) /分量的标准差

      经过简单的推导就可以得到两个n维向量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的标准化欧氏距离的公式:

      如果将方差的倒数看成是一个权重,这个公式可以看成是一种加权欧氏距离(Weighted Euclidean distance)

    (2)Matlab计算标准化欧氏距离

    例子:计算向量(0,0)、(1,0)、(0,2)两两间的标准化欧氏距离 (假设两个分量的标准差分别为0.5和1)

    X = [0 0 ; 1 0 ; 0 2]

    D = pdist(X, 'seuclidean',[0.5,1])

    结果:

    D =

        2.0000    2.0000    2.8284

     


    6. 马氏距离(Mahalanobis Distance)

    (1)马氏距离定义

           有M个样本向量X1~Xm,协方差矩阵记为S,均值记为向量μ,则其中样本向量X到u的马氏距离表示为:

     

           而其中向量Xi与Xj之间的马氏距离定义为:

           若协方差矩阵是单位矩阵(各个样本向量之间独立同分布),则公式就成了:

           也就是欧氏距离了。

      若协方差矩阵是对角矩阵,公式变成了标准化欧氏距离。

    (2)马氏距离的优缺点:量纲无关,排除变量之间的相关性的干扰。

    (3) Matlab计算(1 2),( 1 3),( 2 2),( 3 1)两两之间的马氏距离

    X = [1 2; 1 3; 2 2; 3 1]

    Y = pdist(X,'mahalanobis')

     

    结果:

    Y =

        2.3452    2.0000    2.3452    1.2247    2.4495    1.2247

     


    7. 夹角余弦(Cosine)

           有没有搞错,又不是学几何,怎么扯到夹角余弦了?各位看官稍安勿躁。几何中夹角余弦可用来衡量两个向量方向的差异,机器学习中借用这一概念来衡量样本向量之间的差异。

    (1)在二维空间中向量A(x1,y1)与向量B(x2,y2)的夹角余弦公式:

    (2) 两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n)的夹角余弦

           类似的,对于两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n),可以使用类似于夹角余弦的概念来衡量它们间的相似程度。

      即:

           夹角余弦取值范围为[-1,1]。夹角余弦越大表示两个向量的夹角越小,夹角余弦越小表示两向量的夹角越大。当两个向量的方向重合时夹角余弦取最大值1,当两个向量的方向完全相反夹角余弦取最小值-1。

           夹角余弦的具体应用可以参阅参考文献[1]。

    (3)Matlab计算夹角余弦

    例子:计算(1,0)、( 1,1.732)、( -1,0)两两间的夹角余弦

    X = [1 0 ; 1 1.732 ; -1 0]

    D = 1- pdist(X, 'cosine')  % Matlab中的pdist(X, 'cosine')得到的是1减夹角余弦的值

    结果:

    D =

        0.5000   -1.0000   -0.5000

     


    8. 汉明距离(Hamming distance)

    (1)汉明距离的定义

           两个等长字符串s1与s2之间的汉明距离定义为将其中一个变为另外一个所需要作的最小替换次数。例如字符串“1111”与“1001”之间的汉明距离为2。

           应用:信息编码(为了增强容错性,应使得编码间的最小汉明距离尽可能大)。

    (2)Matlab计算汉明距离

      Matlab中2个向量之间的汉明距离的定义为2个向量不同的分量所占的百分比。

           例子:计算向量(0,0)、(1,0)、(0,2)两两间的汉明距离

    X = [0 0 ; 1 0 ; 0 2];

    D = PDIST(X, 'hamming')

    结果:

    D =

        0.5000    0.5000    1.0000

     


    9. 杰卡德相似系数(Jaccard similarity coefficient)

    (1) 杰卡德相似系数

           两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号J(A,B)表示。

      杰卡德相似系数是衡量两个集合的相似度一种指标。

    (2) 杰卡德距离

           与杰卡德相似系数相反的概念是杰卡德距离(Jaccard distance)。杰卡德距离可用如下公式表示:

      杰卡德距离用两个集合中不同元素占所有元素的比例来衡量两个集合的区分度。

    (3) 杰卡德相似系数与杰卡德距离的应用

           可将杰卡德相似系数用在衡量样本的相似度上。

      样本A与样本B是两个n维向量,而且所有维度的取值都是0或1。例如:A(0111)和B(1011)。我们将样本看成是一个集合,1表示集合包含该元素,0表示集合不包含该元素。

    p :样本A与B都是1的维度的个数

    q :样本A是1,样本B是0的维度的个数

    r :样本A是0,样本B是1的维度的个数

    s :样本A与B都是0的维度的个数


    那么样本A与B的杰卡德相似系数可以表示为:

    这里p+q+r可理解为A与B的并集的元素个数,而p是A与B的交集的元素个数。

    而样本A与B的杰卡德距离表示为:

    (4)Matlab 计算杰卡德距离

    Matlab的pdist函数定义的杰卡德距离跟我这里的定义有一些差别,Matlab中将其定义为不同的维度的个数占“非全零维度”的比例。

    例子:计算(1,1,0)、(1,-1,0)、(-1,1,0)两两之间的杰卡德距离

    X = [1 1 0; 1 -1 0; -1 1 0]

    D = pdist( X , 'jaccard')

    结果

    D =

    0.5000    0.5000    1.0000

     


    10. 相关系数 ( Correlation coefficient )与相关距离(Correlation distance)

    (1) 相关系数的定义

    相关系数是衡量随机变量X与Y相关程度的一种方法,相关系数的取值范围是[-1,1]。相关系数的绝对值越大,则表明X与Y相关度越高。当X与Y线性相关时,相关系数取值为1(正线性相关)或-1(负线性相关)。

    (2)相关距离的定义

     

    (3)Matlab计算(1, 2 ,3 ,4 )与( 3 ,8 ,7 ,6 )之间的相关系数与相关距离

    X = [1 2 3 4 ; 3 8 7 6]

    C = corrcoef( X' )   %将返回相关系数矩阵

    D = pdist( X , 'correlation')

    结果:

    C =

        1.0000    0.4781

        0.4781    1.0000

    D =

    0.5219

          其中0.4781就是相关系数,0.5219是相关距离。


    11. 信息熵(Information Entropy)

           信息熵并不属于一种相似性度量。那为什么放在这篇文章中啊?这个。。。我也不知道。 (╯▽╰)

    信息熵是衡量分布的混乱程度或分散程度的一种度量。分布越分散(或者说分布越平均),信息熵就越大。分布越有序(或者说分布越集中),信息熵就越小。

           计算给定的样本集X的信息熵的公式:

    参数的含义:

    n:样本集X的分类数

    pi:X中第i类元素出现的概率

           信息熵越大表明样本集S分类越分散,信息熵越小则表明样本集X分类越集中。。当S中n个分类出现的概率一样大时(都是1/n),信息熵取最大值log2(n)。当X只有一个分类时,信息熵取最小值0


    参考资料: 

    [1]吴军. 数学之美 系列 12 - 余弦定理和新闻的分类.

    http://www.google.com.hk/ggblog/googlechinablog/2006/07/12_4010.html

    [2] Wikipedia. Jaccard index.

    http://en.wikipedia.org/wiki/Jaccard_index

    [3] Wikipedia. Hamming distance

    http://en.wikipedia.org/wiki/Hamming_distance

    [4] 求马氏距离(Mahalanobis distance )matlab版

    http://junjun0595.blog.163.com/blog/static/969561420100633351210/

    [5] Pearson product-moment correlation coefficient

    http://en.wikipedia.org/wiki/Pearson_product-moment_correlation_coefficient


    展开全文
  • Market sizing咨询及很多行业工作种常用的一种技能,或是拿到一些二手市场规模数据后进行检验,一些咨询公司常提到的business sense ,有很大一部分来自market sizing 所体现的能力。 万变不离其宗方法论 market ...
  • 常用的距离度量总结

    2017-03-16 16:09:40
    采用什么样的方法计算距离很讲究,甚至关系到分类的正确与否。  本文的目的就是对常用的相似性度量作一个总结。 本文目录: 1. 欧氏距离 2. 曼哈顿距离 3. 切比雪夫距离 4. 闵可夫斯基距离 5. 标准化...
  • 采用什么样的方法计算距离很讲究,甚至关系到分类的正确与否。  本文的目的就是对常用的相似性度量作一个总结。 本文目录: 1. 欧氏距离 2. 曼哈顿距离 3. 切比雪夫距离 4. 闵可夫斯基距离 5. 标准化欧氏距离 6....
  • 采用什么样的方法计算距离很讲究,甚至关系到分类的正确与否。  本文的目的就是对常用的相似性度量作一个总结。 本文目录: 1.欧氏距离 2.曼哈顿距离 3. 切比雪夫距离 4. 闵可夫斯基距离 5.标准化欧氏...
  • 采用什么样的方法计算距离很讲究,甚至关系到分类的正确与否。  本文的目的就是对常用的相似性度量作一个总结。 本文目录: 1.欧氏距离 2.曼哈顿距离 3. 切比雪夫距离 4. 闵可夫斯基距离
  • 数学中几种常用的距离

    千次阅读 2016-03-24 11:01:30
    数学中有很多不同种类距离,常用于几何、高等代数等数学研究。多种多样距离在数学建模、计算机学习中有着不小应用...采用什么的方法计算距离很讲究,甚至关系到分类正确与否。欧氏距离(Euclidean Distance
  • 采用什么样的方法计算距离很讲究,甚至关系到分类的正确与否。 本文的目的就是对常用的相似性度量作一个总结 本文目录: 1. 欧氏距离 2. 曼哈顿距离 3. 切比雪夫距离 4. 闵可夫斯基距离 5. 标准化欧氏距离
  • 计算文本相似度的方法

    千次阅读 2018-11-16 15:02:19
    采用什么样的方法计算距离很讲究,甚至关系到分类的正确与否。  本文的目的就是对常用的相似性度量作一个总结。 本文目录: 1. 欧氏距离 2. 曼哈顿距离 3. 切比雪夫距离 4. 闵可夫斯基距离 5. 标准化欧氏...
  • 计算距离的方法总结

    2018-08-30 10:31:26
    采用什么样的方法计算距离很讲究,甚至关系到分类的正确与否。  本文的目的就是对常用的相似性度量作一个总结。 本文目录: 欧氏距离 曼哈顿距离 切比雪夫距离 闵可夫斯基距离 标准化欧氏距离 马氏距离 夹角...
  • 采用什么样的方法计算距离很讲究,甚至关系到分类的正确与否。  本文的目的就是对常用的相似性度量作一个总结: 1. 欧氏距离(Euclidean Distance)  欧氏距离最易于理解的一种距离计算方法...
  • 距离计算方法总结

    千次阅读 2013-04-26 18:40:55
    采用什么样的方法计算距离很讲究,甚至关系到分类的正确与否。 本文的目的就是对常用的相似性度量作一个总结。本文目录:1. 欧氏距离2. 曼哈顿距离3. 切比雪夫距离4. 闵可夫斯基距离5. 标准化欧氏距离6. 马氏距离...
  • 采用什么样的方法计算距离很讲究,甚至关系到分类的正确与否。  本文的目的就是对常用的相似性度量作一个总结。 本文目录: 1. 欧氏距离 2. 曼哈顿距离 3. 切比雪夫距离 4. 闵可夫斯基距离 5. 标准...
  • 注:本文来自网络,具体出处不清,如有,请帮忙提供,定当更新...采用什么样的方法计算距离很讲究,甚至关系到分类的正确与否。本文的目的就是对常用的相似性度量作一个总结,用于相似性度量的方法有: 1. 欧氏距离
  • 采用什么样的方法计算距离很讲究,甚至关系到分类的正确与否。 本文的目的就是对常用的相似性度量作一个总结。 本文目录: 1. 欧氏距离 2. 曼哈顿距离 3. 切比雪夫距离 4. 闵可夫斯基距离 5
  • 机器学习几种相似性度量方法

    千次阅读 2013-04-01 20:52:44
    采用什么样的方法计算距离很讲究,甚至关系到分类的正确与否。  本文的目的就是对常用的相似性度量作一个总结。   本文目录: 1. 欧氏距离 2. 曼哈顿距离 3. 切比雪夫距离 4. 闵可夫斯基距离 5. 标准化...
  • 机器学习中的相似性度量,方法汇总对比 人工智能 林1周前 (01-10)876℃0评论 ...采用什么样的方法计算距离很讲究,甚至关系到分类的正确与否。 本文的目的就是对常用的相似性度量作一个总结。 本文目...
  • 描述样本之间相似度的方法有很多种,一般来说常用的有相关系数和欧式距离。...采用什么样的方法计算距离很讲究的,甚至关系到分类的正确与否。欧式距离曼哈顿距离切比雪夫距离闵可夫斯基距离标准化欧氏距离...

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 324
精华内容 129
关键字:

常用的估算方法是什么