- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
User has many Profiles
(Limit - no more than one of each profile type per user, no duplicates)
Profiles has many Attribute Values
(A user can have as many or few attribute values as they like)
Attributes belong to a category
(No overlap. This controls which attribute values a profile can have)
我相信通过堆栈交换,您可以为一个用户拥有多个配置文件,因为每个交换站点的配置文件都不同?在这个问题中:
配置文件和属性只是在两个级别上对属性值进行分组的方法。没有分组(在 2. 之后的权重中需要分组),关系只是 User hasMany Attribute Values。
给每个用户相对于其他用户的相似度评分。
花哨的代码和有用的功能很棒,但我真的很想完全理解如何完成这些任务,所以我认为通用伪代码是最好的。
谢谢!
最佳答案
首先,你应该记住 everything should be made as simple as possible, but not simpler .这条规则适用于许多领域,但在语义、相似性和机器学习等方面它是必不可少的。使用多层抽象(属性 -> 类别 -> 配置文件 -> 用户)会使你的模型更难理解和推理,所以我会尽量省略它。这意味着最好在用户和属性之间保持直接关系。因此,基本上您的用户应该表示为向量,其中每个变量(向量元素)代表单个属性。
如果您选择这样的表示,请确保所有属性都有意义并且在此上下文中具有适当的类型。例如,您可以将 5 种视频类型表示为 5 个不同的变量,但不能表示为 1 到 5 之间的数字,因为余弦相似度(和大多数其他算法)会错误地对待它们(例如乘以惊悚片,表示为 2,乘以喜剧,表示为5,这实际上没有意义)。
如果适用,可以使用属性之间的距离。尽管我很难在您的设置中举出示例。
此时您应该停止阅读并尝试一下:将用户简单表示为属性向量和余弦相似度。如果它运作良好,请保持原样 - 使模型过于复杂从来都不是一件好事。
如果模型表现不佳,请尝试了解原因。你有足够的相关属性吗?还是有太多嘈杂的变量只会让情况变得更糟?或者某些属性真的应该比其他属性更重要吗?根据这些问题,您可能想要:
让我更详细地描述最后一点。而不是简单的余弦相似度,它看起来像这样:
cos(x, y) = x[0]*y[0] + x[1]*y[1] + ... + x[n]*y[n]
你可以使用加权版本:
cos(x, y) = w[0]*x[0]*y[0] + w[1]*x[1]*y[1] + ... + w[2]*x[2]*y[2]
找到此类权重的标准方法是使用某种回归(线性回归是最流行的)。通常,您收集数据集 (X, y)
,其中 X
是一个矩阵,其中行包含您的数据向量(例如,出售房屋的详细信息)和 y
是某种“正确答案”(例如,房子的实际售价)。但是,在您的情况下,用户向量没有正确答案。实际上,您可以仅根据它们的相似性来定义正确答案。那为什么不呢?只需让 X
的每一行成为 2 个用户向量的组合,以及 y
的相应元素 - 它们之间的相似性(你应该自己为训练数据集分配它)。例如:
X[k] = [ user_i[0]*user_j[0], user_i[1]*user_j[1], ..., user_i[n]*user_j[n] ]
y[k] = .75 // or whatever you assign to it
HTH
关于algorithm - 哪种算法/实现根据用户选择的距离属性来加权用户之间的相似性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21710330/
你能比较一下属性吗 我想禁用文本框“txtName”。有两种方式 使用javascript,txtName.disabled = true 使用 ASP.NET, 哪种方法更好,为什么? 最佳答案 我
Count 属性 返回一个集合或 Dictionary 对象包含的项目数。只读。 object.Count object 可以是“应用于”列表中列出的任何集合或对
CompareMode 属性 设置并返回在 Dictionary 对象中比较字符串关键字的比较模式。 object.CompareMode[ = compare] 参数
Column 属性 只读属性,返回 TextStream 文件中当前字符位置的列号。 object.Column object 通常是 TextStream 对象的名称。
AvailableSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。 object.AvailableSpace object 应为 Drive 
Attributes 属性 设置或返回文件或文件夹的属性。可读写或只读(与属性有关)。 object.Attributes [= newattributes] 参数 object
AtEndOfStream 属性 如果文件指针位于 TextStream 文件末,则返回 True;否则如果不为只读则返回 False。 object.A
AtEndOfLine 属性 TextStream 文件中,如果文件指针指向行末标记,就返回 True;否则如果不是只读则返回 False。 object.AtEn
RootFolder 属性 返回一个 Folder 对象,表示指定驱动器的根文件夹。只读。 object.RootFolder object 应为 Dr
Path 属性 返回指定文件、文件夹或驱动器的路径。 object.Path object 应为 File、Folder 或 Drive 对象的名称。 说明 对于驱动器,路径不包含根目录。
ParentFolder 属性 返回指定文件或文件夹的父文件夹。只读。 object.ParentFolder object 应为 File 或 Folder 对象的名称。 说明 以下代码
Name 属性 设置或返回指定的文件或文件夹的名称。可读写。 object.Name [= newname] 参数 object 必选项。应为 File 或&
Line 属性 只读属性,返回 TextStream 文件中的当前行号。 object.Line object 通常是 TextStream 对象的名称。 说明 文件刚
Key 属性 在 Dictionary 对象中设置 key。 object.Key(key) = newkey 参数 object 必选项。通常是 Dictionary 
Item 属性 设置或返回 Dictionary 对象中指定的 key 对应的 item,或返回集合中基于指定的 key 的&
IsRootFolder 属性 如果指定的文件夹是根文件夹,返回 True;否则返回 False。 object.IsRootFolder object 应为&n
IsReady 属性 如果指定的驱动器就绪,返回 True;否则返回 False。 object.IsReady object 应为 Drive&nbs
FreeSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。只读。 object.FreeSpace object 应为 Drive 对象的名称。
FileSystem 属性 返回指定的驱动器使用的文件系统的类型。 object.FileSystem object 应为 Drive 对象的名称。 说明 可
Files 属性 返回由指定文件夹中所有 File 对象(包括隐藏文件和系统文件)组成的 Files 集合。 object.Files object&n
我是一名优秀的程序员,十分优秀!