将一堆数字属性转换为单个分数

dre*_*ves 8 math optimization machine-learning curve-fitting multidimensional-array

这出现了很多,令人惊讶的是似乎没有一个标准的解决方案.假设我有一堆数字属性 - 您可以想象使用它来根据学生/教师比例或污染或诸如此类的一堆组件分数对大学或城市进行排名 - 并希望将它们变成单个分数.

我想采取一些示例并进行插值以获得一致的评分函数.

也许有标准的多维曲线拟合或数据平滑库或某些东西使这简单明了?

更多例子:

  • 将两个血压数字转换为单个分数,以确定血压接近最佳状态
  • 将身体测量值转换为衡量您与理想体质的距离的单一指标
  • 将一组时间(100米短跑等)转换为某项运动的健身分数

aot*_*man 6

tl; dr:查看HiScore.它将允许您快速编写和维护以合理方式运行的评分函数.

为了实例化您的简单示例,假设您有一个应用程序接收一组距离和时间作为输入,并且您希望将它们映射到1-100分.例如,你得到(1.2英里,8:37),你想回来,比方说,64.

典型的方法是选择几个基函数,然后使用这些基函数的系数来获得"看起来正确"的分数.例如,您可以在每英里分钟上具有线性基函数,并且具有距离的附加基函数(可以是距离的线性和距离的平方根中的线性).您甚至可以使用例如径向基函数来在您的输入范围内实现更复杂的表达.(这与其他答案在SVM等ML算法方面的建议非常相似.)

这种方法通常很快,但有许多缺点.首先,你必须正确地获得基础功能,这对于更抽象和富有表现力的功能来说是很难的.其次,你会发现你的分数会迅速僵化:如果你发现你认为输入得分错误,找出如何改变它,同时确保其他评分功能"看起来正确"将是一个挑战.第三,在分数中添加另一个属性(例如,如果跑步者是男性还是女性)可能很困难,因为您可能会发现需要在基础上添加更多术语.最后,在这种方法中没有明确保证你的分数会表现得聪明 - 取决于你选择的基函数和系数,7:03跑一英里的人比7:01跑1.1英里的人获得更高的分数.

HiScore是一种不同的方法,我在遇到类似问题时编写了一个python库.使用HiScore,您可以标记带有分数的参考项目,然后生成一个评分函数,智能地插入这些分数.例如,您可以将最后100个输入添加到您的应用中,将它们与少数极端输入结合起来(可能在(距离,时间)空间中获取您提交的输入的凸包),标记它们,并使用HiScore来产生合理的评分功能.如果它得出您不同意的分数,只需将其添加到具有正确标签的参考集并重新创建评分函数,因为HiScore保证通过参考集进行插值.

HiScore的一个属性是您的属性需要单调,或者总是增加或减少.这对于"运行时间"设置来说不是问题,因为随着时间的增加(固定时间),分数应该随着距离的增加而增加(对于固定的距离).HiScore的单调性使您可以放心,您的分数将按预期运行; 它保证在7:03跑一英里的人得分不会高于在7:01跑1.1英里的人.

你提出的血压设置很有趣,因为它不是单调的.低血压是坏的,但高血压也是坏的.你仍然可以在这里使用HiScore:只需将每个测量分成"高血压"和"低血压"成分,其中至少有一个是零.例如,160的收缩压读数将被映射到60 的收缩+属性和0的收缩属性.这两个新属性的分数应该减少,因此这种方法变成了非单调的二维问题(具有收缩舒张的属性)为单调四维(属性收缩+,收缩压,舒张压+,舒张压 -).(这个技巧类似于有助于将线性程序变为规范形式的技巧.)