- 浏览: 143374 次
- 性别:
- 来自: 汉川
文章分类
最新评论
-
googya:
googya 写道axgle 写道define_method ...
令人迷惑的class_eval和instance_eval -
jinleileiking:
我绝不会这么写。呵呵
令我迷惑的c语言参数格式 -
googya:
jinleileiking 写道说的啥?那种写法是老C标准,现 ...
令我迷惑的c语言参数格式 -
jinleileiking:
说的啥?那种写法是老C标准,现在不这么搞了
令我迷惑的c语言参数格式 -
consy:
<p><span style="f ...
令人迷惑的class_eval和instance_eval
在聚类分析中,尤其是文本聚类中通常要进行2对象间的相似性的比较,以便于将相似程度大的归为一组。这样的结果就是,一个组内的对象相似度大,而不同组之间对象的相似性小。这个就是所谓的聚类。以下说说在文本中聚类的实现。为了将文本分组,首先要将文本的相似性计算出来(我用的是22比较)。这时候的相似性就要有一个参照,这个标准通常是2文本中相同或相似字符。如果相同字符的次数与2文本的总长度之和的比较大的话,就认为这2个文本是相似的,否则,不相似。这种方式的效率不高(每2个文本都要进行比较,复杂度是n^2,n为文本的数量),但是比较出来的效果很可观。
下面是一个与此有关的代码片段:
对于文本的话,要对文中出现的字符进行比较(当然还包括去除停用词之类的)。方法与此相似。
下面是一个与此有关的代码片段:
include Math #将那本书上的字典数据结构转换成Ruby的hash也不容易啊,要进行替换。先转换成字符串s,把s中的:用=>取代,再把\n去掉,这才成为下面的结果 critics={'Lisa Rose'=> {'Lady in the Water'=> 2.5, 'Snakes on a Plane'=> 3.5, 'Just My Luck'=> 3.0, 'Superman Returns'=> 3.5, 'You, Me and Dupree'=> 2.5, 'The Night Listener'=> 3.0},'Gene Seymour'=> {'Lady in the Water'=> 3.0, 'Snakes on a Plane'=> 3.5, 'Just My Luck'=> 1.5, 'Superman Returns'=> 5.0, 'The Night Listener'=> 3.0, 'You, Me and Dupree'=> 3.5},'Michael Phillips'=> {'Lady in the Water'=> 2.5, 'Snakes on a Plane'=> 3.0, 'Superman Returns'=> 3.5, 'The Night Listener'=> 4.0},'Claudia Puig'=> {'Snakes on a Plane'=> 3.5, 'Just My Luck'=> 3.0, 'The Night Listener'=> 4.5, 'Superman Returns'=> 4.0, 'You, Me and Dupree'=> 2.5},'Mick LaSalle'=> {'Lady in the Water'=> 3.0, 'Snakes on a Plane'=> 4.0, 'Just My Luck'=> 2.0, 'Superman Returns'=> 3.0, 'The Night Listener'=> 3.0, 'You, Me and Dupree'=> 2.0},'Jack Matthews'=> {'Lady in the Water'=> 3.0, 'Snakes on a Plane'=> 4.0, 'The Night Listener'=> 3.0, 'Superman Returns'=> 5.0, 'You, Me and Dupree'=> 3.5},'Toby'=> {'Snakes on a Plane'=>4.5,'You, Me and Dupree'=>1.0,'Superman Returns'=>4.0}} def sim_distance(prefs,person1,person2) si={} prefs[person1].each_key do |k1| if prefs[person2].include? k1 si[k1]=1 end end return 0 if si.size==0 sum=0 prefs[person1].each_key do |k1| if prefs[person2].include? k1 sum+=(prefs[person1][k1]-prefs[person2][k1])**2 end end 1/(1+sum) end #p sim_distance(critics,'Lisa Rose','Gene Seymour') #p sim_distance(critics,'Lisa Rose','Michael Phillips') #p sim_distance(critics,'Lisa Rose','Claudia Puig') #p sim_distance(critics,'Lisa Rose','Mick LaSalle') #p sim_distance(critics,'Lisa Rose','Jack Matthews') #p sim_distance(critics,'Lisa Rose','Toby') def find_most_similar(lis)#将hash中值最大的那一对找出来 most={} max=0 #lis=lis.sort lis.each_key do |k1| lis.each_key do |k2| if k1<k2 && k1 && k2 most["#{k1}" +" & "+ "#{k2}"]=sim_distance(lis,k1,k2)#这里有个问题,hash中存在重复。如何消除 end end end most.each_key do|k| if most[k]>max max=most[k] end end #most.sort{|a,b|a[1]<=>b[1]}#这样就变成二维数组了 most.each_pair do |k,v| puts "#{k}"+" "*(35-"#{k}".size)+": "+"#{v}" end [most.index(max),max] end #p find_most_similar(critics) #p critics.size def sim_person(prefs,p1,p2) si={} prefs[p1].each_key do |k1| if prefs[p2].include? k1 si[k1]=1 end end n=si.size return 0 if n==0 sum1=0 sum2=0 sum1Sq=0 sum2Sq=0 pSum=0 si.each_key do |k| sum1+=prefs[p1][k] sum2+=prefs[p2][k] sum1Sq+=prefs[p1][k]**2 sum2Sq+=prefs[p2][k]**2 pSum+=prefs[p1][k]*prefs[p2][k] end num=pSum-(sum1*sum2/n) den=sqrt((sum1Sq-sum1**2/n)*(sum2Sq-sum2**2/n)) return 0 if den==0 num/den end #p sim_person(critics,'Lisa Rose','Gene Seymour') def topMatcher(prefs,person,n=5) scores=[] prefs.each_key do |k| if person!=k scores << [sim_person(prefs,person,k),k] end end scores=scores.sort.reverse scores[0...3] end #p topMatcher(critics,'Toby',n=3) def getRecommendations(prefs,person,t=self.method(:sim_person)) totals={} simSums={} prefs.each_key do |other| if other==person next end sim=t.call(prefs,person,other) if sim<=0 next end prefs[other].each_key do |item| if !prefs[person].include?(item) || prefs[person][item]==0 totals[item]||=0 totals[item]+=prefs[other][item]*sim simSums[item]||=0 simSums[item]+=sim end end end rankings=[] totals.each_pair do |item,total| rankings<<[total/simSums[item],item] end rankings.sort rankings.reverse rankings end #t=self.method(:sim_distance)#t=self.method(:sim_person) #p t #p getRecommendations(critics,'Toby') def transformPrefs(prefs) result={} prefs.each_key do |person| prefs[person].each_key do |item| result[item]||={} result[item][person]=prefs[person][item] end end result end #p transformPrefs(critics)
对于文本的话,要对文中出现的字符进行比较(当然还包括去除停用词之类的)。方法与此相似。
发表评论
-
ruby中数字与数字字符串相加的原理
2011-05-13 13:20 4293在ruby的世界中,很多东西不怕你做不到,就怕你想不到。正所谓 ... -
ruby删除文件注意事项
2011-05-05 18:45 1204用ruby删除文件的时候一定要注意,要将文件流关闭之后 ... -
VM的cloudfoundry试用
2011-04-26 17:18 1220今天收到了cloudfoundry的邮件通知,说我 ... -
用ruby调用外部命令移动文件,结果悲剧了
2010-12-12 12:45 1542今天要把storage上的文件移动一下,结果发现命令g ... -
寻找最长递增数字子串
2010-10-17 18:55 3023有一个字符串,其中包含了多个数字子串,要求求出最长的递 ... -
打印图形(很基础的)
2010-10-11 17:48 1207想不到有家公司的笔试题中居然有一道打印图形的题目,更让 ... -
用Rubinius来学习Ruby
2010-09-14 14:54 1186matz的ruby是基于c语言的,很多的核心的类都是 ... -
2个空瓶换一瓶汽水问题
2010-06-12 15:53 23621块钱可以买一瓶汽水,两个瓶可以换1瓶汽水,那 ... -
base64编码
2010-06-03 08:12 991受有道难题中许多答复者的启发,我决定对base ... -
令人迷惑的class_eval和instance_eval
2010-05-31 17:27 1727按照yugui 大姐的说法,class_eval和in ... -
有道难题
2010-05-30 16:08 1021有道的工程师闲暇之余,将Base64编码改成了Base ... -
Ruby入门读物
2010-05-23 12:39 1314经过一段时间的Ruby学习,感觉现在比刚开始时 ... -
顶级上下文环境
2010-03-31 15:47 910到现在才明白,在IRB中写一个方法,就是给Object对象增加 ... -
jruby on rails
2010-03-19 16:15 1160今天终于在机器上把jruby on rails配置成功 ... -
java静态方法与jruby(ruby)类方法
2010-03-19 10:07 1345在学习ruby的时候,我感觉对于各种级别的方法有更清晰 ... -
ruby收取邮件
2010-01-28 16:12 1410这几天想复习一下ruby,很久没有用了,很多东西都忘记了!于是 ... -
格式化输出(字符串到数)
2009-12-31 11:05 1142很简单的一个练习,主要是将字符串转换为数组,然后添加一些其他的 ... -
ruby中的字符编码
2009-09-24 16:15 5865长期以来,都被Ruby中的字符乱码所困惑,但是一直高估 ... -
Java的内部类与Ruby的内部类的区别
2009-08-23 16:06 1446今天经过night-stalker的提醒,突然意识到Rub ... -
impl与内部类
2009-08-23 11:20 1188# To change this template, choo ...
相关推荐
FSIM(Feature Similarity,特征相似性)这是用于计算图片质量或者对比两张图片相似性的一个评价参数,相比于PSNR(峰值信噪比)、SSIM(结构相似性)这个两个广泛使用的图像质量评价参数,FSIM更能体现图片之间的...
在IT领域,图像处理是一项重要的技术,而计算图像的相似程度是其中的关键环节。本项目以MATLAB编程语言实现,旨在通过投影熵这一指标来衡量两幅图像的相似度。投影熵是一种信息理论中的概念,它能有效地反映出数据...
指定两组文件所在的文件夹,生成文件的清单默认保存在d盘下,然后可以批量计算两组文本或者代码文件之间的相似程度,计算结果默认保存在d盘,结果给出的是每行两个文件的相似程度根据对比数量生成多行数据,由于计算...
1. **个性化推荐**:通过计算玩家之间的相似性,可以推荐他们可能感兴趣的游戏、道具或活动,提高用户黏性和活跃度。 2. **社交网络分析**:识别紧密的玩家群体,理解他们的互动模式,为游戏设计提供依据。 3. **...
在图像处理和计算机视觉领域,基于纹理的图像相似性计算是一项关键的技术,它涉及到如何量化和比较两张图像中纹理特征的相似程度。本程序是对现有技术的一种改进,旨在提高比较的准确性和效率,同时为学习者提供了一...
在本方案中,通过计算文档A与其他文档SimHash值的海明距离,可以快速判断出文档间的相似程度。如果文档间的海明距离小于或等于设定阈值,那么这两个文档就会被判定为相似文档。 再者,中文分词是自然语言处理中的一...
在波形分析中,我们希望通过计算两个波形的关联程度来判断它们是否相似。 在MATLAB中,可以使用`corrcoef`函数来计算两个向量(即波形)的相关系数。这个函数返回一个二维矩阵,对角线上的元素是每个向量与自身的...
这些算法可以计算出两个车牌在字符层面的编辑距离或共现特征,从而确定它们的相似程度。 2. **特征提取与匹配**:对车牌进行预处理,提取关键特征,如汉字的形状、字母的大小写等,然后使用机器学习模型进行特征...
现有的推荐方法通常基于App的元信息,如名称、描述、截图和用户评论等,通过计算这些元信息的相似度来确定App之间的关联程度。 传统的方法可能只关注App的绝对相似性或基于三元组的相似性,但在实际推荐场景中,...
在图像处理领域,比较两幅图像的相似程度是一项常见的任务,尤其在计算机视觉、图像识别和内容检索等应用中。本教程将详细讲解如何利用OpenCV库和Python编程语言实现SIFT(Scale-Invariant Feature Transform,尺度...
通过比较图片特征向量之间的夹角余弦值,我们可以判断图片内容的相似程度。这篇博文链接()可能详细介绍了如何利用余弦相似度来分析和比较图像。 首先,我们需要理解余弦相似度的基本概念。在二维或高维空间中,两...
直方图相似性测试是一种基于统计的方法,它通过分析图像像素值的分布来评估图像之间的相似程度。这种方法的核心是利用图像的色彩直方图,一种表示图像中不同颜色或灰度等级出现频率的图表。 图像A和图像B的直方图,...
"弦相似算法计算 短文本相似度"这一主题,主要关注如何通过特定的算法来评估两段短文本之间的相似程度。这里我们将详细探讨弦相似性算法以及它在处理短文本时的应用。 1. 弦相似性(Levenshtein Distance): 弦...
在VC6.0环境下,开发者需要编写代码读取图像资源,执行Sobel变换,计算相似性,并可能使用调试工具进行问题定位。程序中提到的"CompareDiffer"可能是一个比较差异的函数或类,用于比较两幅图像的特征差异。 总结来...
比较不同运动数据之间相似程度,这种方法基于主成分分析方法,对运动数据进行 PCA 计算,得到表示该运 动数据主轴方向的特征向量和对应的特征值,将运动数据之间的相似性比较转换为对其主轴方向重合程度的 比较,给出了...
函数的输出则是一个DSC值,表示了两个图像之间的相似程度。 `license.txt`文件通常包含软件的使用许可协议,确保在使用`dicesimilarity.m`函数时遵循相关的版权规定。 通过以上描述,我们可以看出,MATLAB中的2D...
双向相似性计算的关键在于计算原图像与缩放图像之间Patch(图像块)的距离,以衡量两者的相似程度。每个Patch由多个像素点组成,完整性要求缩放图像尽可能包含原图像的所有Patch,而一致性则要求缩放图像的每个Patch...