计算相似度的方法

Mar*_*een 17 statistics pattern-recognition similarity data-mining social-networking

我正在做一个社区网站,要求我计算任何两个用户之间的相似性.使用以下属性描述每个用户:

年龄,皮肤类型(油性,干性),头发类型(长,短,中),生活方式(活跃的户外爱好者,电视垃圾)等.

任何人都可以告诉我如何解决这个问题或指向我一些资源?

Geo*_*tas 14

另一种计算(在R中)数据集中观察值之间的所有成对不相似度(距离)的方法.原始变量可以是混合类型.通过使用Gower的一般相异系数(Gower,JC(1971),一般相似系数及其一些属性,Biometrics 27,857-874)来实现对名义,序数和(a)对称二元数据的处理.有关详细信息,请参阅第47页.如果x包含这些数据类型的任何列,则Gower的系数将用作度量标准.

例如

x1 <- factor(c(10, 12, 25, 14, 29))
x2 <- factor(c("oily", "dry", "dry", "dry", "oily"))
x3 <- factor(c("medium", "short", "medium", "medium", "long"))
x4 <- factor(c("active outdoor lover", "TV junky", "TV junky", "active outdoor lover", "TV junky"))
x <- cbind(x1,x2,x3,x4)

library(cluster)
daisy(x, metric = "euclidean")
Run Code Online (Sandbox Code Playgroud)

你会得到 :

Dissimilarities :
         1        2        3        4
2 2.000000                           
3 3.316625 2.236068                  
4 2.236068 1.732051 1.414214         
5 4.242641 3.741657 1.732051 2.645751
Run Code Online (Sandbox Code Playgroud)

如果您对分类数据的降维方法感兴趣(也是将变量排列到同类簇中的方法),请检查此项


Bet*_*moo 2

你可能应该看看

这些主题将使您的程序能够识别用户集合中的相似性和集群,并尝试适应它们......

然后你就可以知道不同隐藏的常见群体...(即绿头发的用户通常不喜欢看电视..)

作为建议,尝试使用现成的实现工具来实现此功能,而不是自己实现......
看看开放目录数据挖掘项目