我正在使用Weka的机器学习库JAVA API构建一个协同过滤系统…
我基本上使用StringToWordVector过滤器将字符串对象转换为其单词出现的分解形式…
现在我使用kNN算法来查找目标对象的最近邻…
我的问题是,我应该使用什么距离函数来计算经过StringToWordVector过滤器处理的两个对象之间的距离…在这种情况下,哪个最有效?
Weka中可用的选项有:
AbstractStringDistanceFunction, ChebyshevDistance, EditDistance, EuclideanDistance, ManhattanDistance, NormalizableDistance
回答:
是的,相似性度量确实很有趣。简短的回答是,你应该尝试所有这些,并根据均方根误差(RMSE)、平均绝对误差(MAE)、返回集的广度等进行优化。
编辑距离与其他度量之间似乎有所区别,因为我期望编辑距离算法直接作用于字符串本身。
你的StringToWordVector是如何工作的?首先回答这个问题,然后用这个答案来激发思考,比如:在我的应用中,两个单词之间的相似性意味着什么(例如,语义意义是否比单词长度更重要)。
只要你在使用StringVectorizer,似乎你可以自由考虑更多主流的相似性度量,如对数似然度(LogLikelihood)、皮尔逊相关系数(Pearson)和余弦相似度(Cosine)。我认为这是值得做的,因为据我所知,你列出的相似性度量在文献中并没有被广泛使用或认真研究过。
愿相似性与你同在!