我正在学校使用几种AI算法,我发现人们使用模糊逻辑来解释他们可以用几种情况解决的任何情况.当我回到书本时,我刚刚读到关于如何取而代之的状态从On到Off它是一条对角线,有些东西可以在两种状态但在不同的"级别".
我已经阅读了维基百科条目和一些教程,甚至编写了"使用模糊逻辑"(边缘检测器和单轮自控机器人)的东西,但我仍然觉得从理论到代码非常混乱.对于你来说,在不太复杂的定义中,什么是模糊逻辑?
我在Python中搜索一个很好的模糊库,但是我找到的那些并没有被维护,似乎没有添加我创建模糊系统所需的一切.
这些是我到目前为止发现的:PyFuzzy,Peach和Fuzzpy.
你知道有什么好的图书馆吗?如果没有,C#,Java或C++中是否有任何库?
我在我的项目中使用模糊匹配主要是为了找到相同名称的拼写错误和拼写错误.我需要准确理解弹性搜索的模糊匹配如何工作以及它如何使用标题中提到的2个参数.
据我所知,min_similarity是查询字符串与数据库中字符串匹配的百分比.我找不到如何计算此值的确切描述.
据我所知,max_expansions是应该执行搜索的Levenshtein距离.如果这实际上是Levenshtein距离,它将是我理想的解决方案.无论如何,它不起作用,例如我有"Samvel"这个词
queryStr max_expansions matches?
samvel 0 Should not be 0. error (but levenshtein distance can be 0!)
samvel 1 Yes
samvvel 1 Yes
samvvell 1 Yes (but it shouldn't have)
samvelll 1 Yes (but it shouldn't have)
saamvelll 1 No (but for some weird reason it matches with Samvelian)
saamvelll anything bigger than 1 No
Run Code Online (Sandbox Code Playgroud)
文档说的是我实际上不理解的东西:
Add max_expansions to the fuzzy query allowing to control the maximum number
of terms to match. Default to …Run Code Online (Sandbox Code Playgroud) 我有2,500,000个产品名称,我想尝试将它们组合在一起,即找到名称相似的产品.例如,我可以有三种产品:
这实际上是相同的产品,可以合并在一起.
我的计划是使用Jaro Winkler的距离算法来实现匹配.该过程如下:
所以这有一些优化,因为它只对每个产品进行单向匹配,节省了一半的处理时间.
我把它编码并测试了它.它运作完美,并发现了数十个匹配的调查.
将1个产品与2,500,000个其他产品进行比较需要大约20秒钟,并计算出"Jaro评分".假设我的计算是正确的,这意味着它将花费一年的最佳时间来完成处理.
显然这不实用.
我让同事们查看代码,他们设法将Jaro分数计算部分的速度提高了20%.他们使这个过程成为多线程,并使其更快一点.我们还删除了一些存储的信息,将其简化为产品名称和唯一标识符列表; 这似乎对处理时间没有任何影响.
通过这些改进,我们仍然认为这需要几个月的时间来处理,我们需要花费数小时(或最多几天).
我不想详细介绍,因为我认为这不是完全相关的,但我将产品详细信息加载到列表中:
private class Product
{
public int MemberId;
public string MemberName;
public int ProductId;
public string ProductCode;
public string ProductName;
}
private class ProductList : List<Product> { }
private readonly ProductList _pl = new ProductList();
Run Code Online (Sandbox Code Playgroud)
然后我使用以下处理每个产品:
{Outer loop...
var match = _pl[matchCount];
for (int count = 1; count < _pl.Count; count++)
{
var search = _pl[count];
//Don't match …Run Code Online (Sandbox Code Playgroud) python中已有一个多键词典,也是一个多值词典.我需要一个python字典,它是:
例:
# probabilistically fetch any one of baloon, toy or car
d['red','blue','green']== "baloon" or "car" or "toy"
Run Code Online (Sandbox Code Playgroud)
d ['red'] == d ['green']的概率很高,d ['red']!= d ['red']的概率很低但可能
单个输出值应根据来自键的规则进行概率确定(模糊),例如:在上述情况下规则可以是如果键具有"红色"和"蓝色"则返回"气球"80%的时间如果只有蓝色然后返回"玩具"15%的时间其他"汽车"5%的时间.
应该设计setitem方法,以便可以遵循:
d["red", "blue"] =[
("baloon",haseither('red','green'),0.8),
("toy",.....)
,....
]
Run Code Online (Sandbox Code Playgroud)
上面使用谓词函数和相应的概率为字典分配多个值.而不是上面的赋值列表,甚至字典作为赋值将是更可取的:
d["red", "blue"] ={
"baloon": haseither('red','green',0.8),
"toy": hasonly("blue",0.15),
"car": default(0.05)
}
Run Code Online (Sandbox Code Playgroud)
如果"红色"或绿色存在,上述气球将返回80%的时间,如果蓝色存在则返回玩具15%的时间,并且在没有任何条件的情况下返回5%的时间.
是否有任何现有的数据结构已经满足python中的上述要求?如果没有那么如何修改multikeydict代码以满足python中的上述要求?
如果使用字典,那么可以有配置文件或使用适当的嵌套装饰器来配置上述概率谓词逻辑,而不必硬编码if\else语句.
注意:上面是一个基于规则的自动响应程序应用程序的有用自动机,因此,如果python中有任何类似的基于规则的框架,即使它不使用字典结构,也要告诉我吗?
python dictionary recommendation-engine fuzzy-logic data-structures
我知道这可能听起来很奇怪,但我想知道微软Visual F#进入这个新世界的一件事.关于解析,函数式编程,结构化编程,我将学习这种语言的许多应用......但是人工智能呢?
模糊逻辑有什么应用吗?F#是一种用于模糊逻辑应用的好语言吗?
在大学,我们正在学习Prolog和类似的语言.Prolog能够在非常简单和短暂的表达式中创建复杂查询(通过利用谓词和事实).F#能够做到这一点吗?
先感谢您.
我目前正在用java编写一个模糊逻辑库.我找到了所有标准函数的方程 - Grade,inverseGrade,Triangle,Trapezoid,Gaussian.但是,我找不到sigmoid/logistic函数的反函数.
我编写逻辑函数的方式是java是:
//f(x) = 1/(1+e(-x))
public double logistic(double x){
return (1/(1+(Math.exp(-x)));
}
Run Code Online (Sandbox Code Playgroud)
但我无法解决或在任何地方找到逆.我的代数/微积分能力相当有限,因此我无法解决函数的反函数.
任何提示或指示都将是一个很大的帮助.
谢谢
我正在尝试在两个数据集之间的R中进行模糊逻辑联接:
config我想使用该name列在两个数据集之间进行联接。但是,该name列在数据集中可能包含其他字符或前导字符,或者在较大的单词内部包含一个单词。因此,例如,如果我们查看这两个数据集,我希望名称OPAL加入OPALAS,而SAUSALITO Y加入SAUSALITO。
Dataset1:
Name Config
ALTO D BB
CONTRA ST
EIGHT A DD
OPALAS BB
SAUSALITO Y AA
SOLANO J ST
Dataset2:
Name Age Rank
ALTO D 50 2
ALTO D 20 6
CONTRA 10 10
CONTRA 15 15
EIGHTH 18 21
OPAL 19 4
SAUSALITO 2 12
SOLANO 34 43
Run Code Online (Sandbox Code Playgroud)
数据集2汇总代码
Data2a <- summaryBy(Age ~ Name,FUN=c(mean), data=Data2,na.rm=TRUE)
Data2b <- summaryBy(Rank ~ Name,FUN=c(sum), data=Data2,na.rm=TRUE)
Data2 <- data.frame(Data2a$Name, Data2a$Age.mean, Data2b$Rank.sum)
Desired Outcome:
Name …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Python 2.6和PIL 计算两个图像的相似度(读取:Levenshtein距离).
我计划用python-levenshtein库进行快速比较.
主要问题:
比较图像的好策略是什么?我的想法是这样的:
当然,这不会处理镜像图像,裁剪图像等情况.但是对于基本比较,这应该是有用的.
在某处记录了更好的策略吗?
编辑: Aaron H对速度问题是正确的.对于大于几百乘几百像素的图像,计算Levelshtein需要永远.但是,在我的示例中缩小到100x100和200x200之后的结果之间的差异小于1%,因此将最大图像大小设置为~100px左右可能是明智的...
编辑:感谢PreludeAndFugue,这个问题就是我想要的.
顺便说一句,Levenshtein的距离似乎可以优化,但它给了我一些非常糟糕的结果,也许是因为背景中有很多冗余元素.要看一些其他算法.
EIDT:均方根偏差和峰值信噪比似乎是另外两个选项,不是很难实现,看起来不是很昂贵.但是,似乎我需要某种上下文分析来识别形状等.
无论如何,感谢所有的链接,并指出朝向NumPy/SciPy的方向.
我需要实现某种形式:
string textToSearch = "Extreme Golf: The Showdown";
string textToSearchFor = "Golf Extreme Showdown";
int fuzzyMatchScoreThreshold = 80; // One a 0 to 100 scale
bool searchSuccessful = IsFuzzyMatch(textToSearch, textToSearchFor, fuzzyMatchScoreThreshold);
if (searchSuccessful == true)
{
-- we have a match.
}
Run Code Online (Sandbox Code Playgroud)
这是用C#编写的函数存根:
public bool IsFuzzyMatch (string textToSearch, string textToSearchFor, int fuzzyMatchScoreThreshold)
{
bool isMatch = false;
// do fuzzy logic here and set isMatch to true if successful match.
return isMatch;
}
Run Code Online (Sandbox Code Playgroud)
但我不知道如何在IsFuzzyMatch方法中实现逻辑.有任何想法吗?也许为此目的有一个现成的解决方案?
fuzzy-logic ×10
python ×3
c# ×2
fuzzy-search ×2
algorithm ×1
definition ×1
dictionary ×1
duplicates ×1
f# ×1
grouping ×1
java ×1
join ×1
logic ×1
math ×1
prolog ×1
r ×1
theory ×1