首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非确定性分析的优势?

非确定性分析的优势?
EN

Software Engineering用户
提问于 2015-06-03 20:00:41
回答 2查看 567关注 0票数 0

我正在使用一个Java库来识别给定文本的语言。它依靠对文本的n-图分析来返回一组可能是的语言,并“信任”它就是那一种语言。

我编写了一个包装类来运行它,但是,它是不确定的(对于<200个字符的输入,结果通常是不正确的,不要担心):

代码语言:javascript
复制
C:\wamp\www\langdetect [master]> java Detect viking rowboat
af:0.8571411945873898 lt:0.1428569473433962
C:\wamp\www\langdetect [master]> java Detect viking rowboat
af:0.5714268373011915 sw:0.2857137271014559 lt:0.14285898741269984
C:\wamp\www\langdetect [master]> java Detect viking rowboat
af:0.9999958253321346

在默认情况下,分析是不确定的(可以像这样:https://code.google.com/p/language-detection/issues/detail?id=64那样进行确定性分析),但我的问题是:

这种分析不确定有什么好处吗?

我唯一能想到的好处是,在统计上,确定性算法会在一定的时间内(即使有有效的输入)是不正确的,而不确定的算法会消除这种保证(但有时仍然是不正确的)。这有意义吗?

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2015-07-16 11:51:24

通常,使用非确定性算法的好处很简单:运行时。

它通常在蒙特卡罗算法中使用,它基本上尝试了一些预定义的可能性(例如,“这是德文吗?”--“不是”,“这是西班牙文文本吗?”--“不”,“嗯,那就不知道了”)。而确定性的解决办法是尝试每一种可能性,这有时是不可能的。

但是,在您的示例中,情况并非如此。在您的库中,从种子中生成一组随机数。如果该种子是随机计算的,则ralgorithm是不确定的,并将为不同的运行产生不同的结果。

但是,如果种子是常量(在本例中为零),则每次运行都会产生相同的结果。这不仅没有改善结果,而且还消除了一个重要的优点:运行非确定性程序的频率越高,结果就会变得越好。这不适用于确定性方法。

那么,你为什么要使用确定性的方法呢?我能想到的一个例子是测试。对随机结果的单元测试是您所能体验到的最大痛苦。假设您对程序的某一部分进行了更改,但由于某种原因,单元测试失败了。你再运行一次,它又失败了。所以你开始挖掘,那里没有什么可找的。

TL;DR:

如果你想要好的结果:运行你的非确定性程序(可能多次)。

如果您想要可复制的结果(例如测试):使用确定性方法。

票数 1
EN

Software Engineering用户

发布于 2015-06-03 20:17:10

听起来好像是在结果还没有真正收敛之前就返回了结果。我会发现不同的结果令人不安,也不可信。解决方法应该是运行更多的示例,而不是使用“确定性”算法,该算法始终返回相同的误导性结果。此外,如果输入字符串短,结果不可靠,则不应信任高度自信的百分比(如0.99999 ):我将对置信号进行折扣,或者假设错误条为0.99999±0.9。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/286885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档