- 浏览: 144100 次
- 性别:
- 来自: 汉川
文章分类
最新评论
-
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 4300在ruby的世界中,很多东西不怕你做不到,就怕你想不到。正所谓 ... -
ruby删除文件注意事项
2011-05-05 18:45 1220用ruby删除文件的时候一定要注意,要将文件流关闭之后 ... -
VM的cloudfoundry试用
2011-04-26 17:18 1236今天收到了cloudfoundry的邮件通知,说我 ... -
用ruby调用外部命令移动文件,结果悲剧了
2010-12-12 12:45 1547今天要把storage上的文件移动一下,结果发现命令g ... -
寻找最长递增数字子串
2010-10-17 18:55 3027有一个字符串,其中包含了多个数字子串,要求求出最长的递 ... -
打印图形(很基础的)
2010-10-11 17:48 1225想不到有家公司的笔试题中居然有一道打印图形的题目,更让 ... -
用Rubinius来学习Ruby
2010-09-14 14:54 1206matz的ruby是基于c语言的,很多的核心的类都是 ... -
2个空瓶换一瓶汽水问题
2010-06-12 15:53 23691块钱可以买一瓶汽水,两个瓶可以换1瓶汽水,那 ... -
base64编码
2010-06-03 08:12 997受有道难题中许多答复者的启发,我决定对base ... -
令人迷惑的class_eval和instance_eval
2010-05-31 17:27 1757按照yugui 大姐的说法,class_eval和in ... -
有道难题
2010-05-30 16:08 1035有道的工程师闲暇之余,将Base64编码改成了Base ... -
Ruby入门读物
2010-05-23 12:39 1330经过一段时间的Ruby学习,感觉现在比刚开始时 ... -
顶级上下文环境
2010-03-31 15:47 917到现在才明白,在IRB中写一个方法,就是给Object对象增加 ... -
jruby on rails
2010-03-19 16:15 1172今天终于在机器上把jruby on rails配置成功 ... -
java静态方法与jruby(ruby)类方法
2010-03-19 10:07 1354在学习ruby的时候,我感觉对于各种级别的方法有更清晰 ... -
ruby收取邮件
2010-01-28 16:12 1418这几天想复习一下ruby,很久没有用了,很多东西都忘记了!于是 ... -
格式化输出(字符串到数)
2009-12-31 11:05 1166很简单的一个练习,主要是将字符串转换为数组,然后添加一些其他的 ... -
ruby中的字符编码
2009-09-24 16:15 5870长期以来,都被Ruby中的字符乱码所困惑,但是一直高估 ... -
Java的内部类与Ruby的内部类的区别
2009-08-23 16:06 1450今天经过night-stalker的提醒,突然意识到Rub ... -
impl与内部类
2009-08-23 11:20 1195# 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): 弦...
题目给出的情况是,我们有两个模糊矩阵:R代表子女与父母之间的相似关系,而S代表父母与祖父母之间的相似关系。我们的目标是根据这两个矩阵推导出子女与祖父母之间的相似关系模糊矩阵,可以将其表示为T。 模糊矩阵...
最近有个需求,是做两个数组重复程度计算,麻烦就麻烦在单个数组的元素有可能重复,处理思路如下: 1. 找到重复元素 2. 元素个数统计,利用np.bincount转换,即元素个数统计到元素转化的索引 3. 统计相同元素匹配个...
在VC6.0环境下,开发者需要编写代码读取图像资源,执行Sobel变换,计算相似性,并可能使用调试工具进行问题定位。程序中提到的"CompareDiffer"可能是一个比较差异的函数或类,用于比较两幅图像的特征差异。 总结来...
比较不同运动数据之间相似程度,这种方法基于主成分分析方法,对运动数据进行 PCA 计算,得到表示该运 动数据主轴方向的特征向量和对应的特征值,将运动数据之间的相似性比较转换为对其主轴方向重合程度的 比较,给出了...