计算相似度的方法
我正在做一个社区网站,需要我计算任意两个用户之间的相似度。每个用户都被描述为以下属性:
年龄、皮肤类型(油性、干性)、头发类型(长、短、中)、生活方式(活跃的户外爱好者、电视迷)等。
谁能告诉我如何解决这个问题或向我指出一些资源?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我正在做一个社区网站,需要我计算任意两个用户之间的相似度。每个用户都被描述为以下属性:
年龄、皮肤类型(油性、干性)、头发类型(长、短、中)、生活方式(活跃的户外爱好者、电视迷)等。
谁能告诉我如何解决这个问题或向我指出一些资源?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
另一种计算方法(在 R 中)数据集中观测值之间的所有成对差异(距离) 。原始变量可能是混合类型。名义、序数和(a)对称二进制数据的处理是通过使用 Gower 的一般相异系数来实现的(Gower, JC (1971) 一般相似系数及其一些属性,Biometrics 27, 857–874)。如需了解更多信息,请参阅第 47 页。如果 x 包含这些数据类型的任何列,则将使用高尔系数作为度量。
例如,
您将得到:
如果您对分类数据的降维方法感兴趣(也是将变量排列到同构簇中的一种方法),请检查 这个
Another way of computing (in R) all the pairwise dissimilarities (distances) between observations in the data set. The original variables may be of mixed types. The handling of nominal, ordinal, and (a)symmetric binary data is achieved by using the general dissimilarity coefficient of Gower (Gower, J. C. (1971) A general coefficient of similarity and some of its properties, Biometrics 27, 857–874). For more check out this on page 47. If x contains any columns of these data-types, Gower's coefficient will be used as the metric.
For example
you'll get :
If you are interested on a method for dimensionality reduction for categorical data (also a way to arrange variables into homogeneous clusters) check this
为每个属性赋予适当的权重,并添加值之间的差异。
如果您确实需要相似性而不是差异,请使用
1 / UserDifference(a, b)
Give each attribute an appropriate weight, and add the differences between values.
If you really need similarity instead of difference, use
1 / UserDifference(a, b)
您可能应该看看
这些主题将让您的程序识别用户集合中的相似性和集群,并尝试适应它们...
然后您可以了解不同的情况相关用户的隐藏的常见群体...(即绿头发的用户通常不喜欢看电视...)
作为建议,请尝试使用现成的实现工具来实现此功能,而不是自己实现。 ..
查看开放目录数据挖掘项目
You probably should take a look for
These topics will let you your program recognize similarities and clusters in your users collection and try to adapt to them...
You can then know different hidden common groups of related users... (i.e users with green hair usually do not like watching TV..)
As an advice, try to use ready implemented tools for this feature instead of implementing it yourself...
Take a look at Open Directory Data Mining Projects
实现两个数据点之间的差异的简单主观度量的三个步骤可能在您的情况下工作得很好:
然后可以使用以下方法计算两个人之间的差异(我假设 Person.age、.skin、.hair 等已经完成步骤 1 并且是数字):
请注意,此示例中的 diff 并不像 ( 0..1)。它的值范围可以从 0(无差异)到较大的值(高差异)。而且,这种方法几乎完全不科学,它只是为了快速给你一个工作差异度量而设计的。
Three steps to achieve a simple subjective metric for difference between two datapoints that might work fine in your case:
Then the difference between two people could be calculated with (I assume Person.age, .skin, .hair, etc. have already gone through step 1 and are numeric):
Note that diff in this example is not on a nice scale like (0..1). It's value can range from 0 (no difference) to something large (high difference). Also, this method is almost completely unscientific, it is just designed to quickly give you a working difference metric.
查看计算 srting 差异的算法。它与您需要的非常相似。将属性存储为位字符串并计算字符串之间的距离
Look at algorithms for computing srting difference. Its very similar to what you need. Store your attributes as a bit string and compute the distance between the strings
您应该阅读这两个主题。
最流行的聚类算法 k -means
相似度矩阵在聚类中至关重要
You should read these two topics.
Most popular clustering algorithm k - means
And similarity matrix are essential in clustering