用于计算每个特征成本的算法

时间:2014-11-26 08:31:58

标签: database algorithm

我必须构建一些复杂的系统,因为它的一部分存在以下问题(这或多或少是形式化的描述): 让我们假设,我们有一组对象O = {objects},以及一个特征列表,每个对象可以包含F = {features}。因此,我们可以将每个对象视为它具有的特征列表:object o = {f1,f3,f15}。每个对象也有整数值。现在,我们必须找到每个特征的平均值和中值。大致解决问题是可以接受的(我感觉可能的算法可能具有指数复杂性)。

set可能很大(如10 ^ 5个元素)。我们还可以想象数据库表中的所有对象如下:

objectid|value|f1|f2|f3|f4|...|f30
100     |3456 |0 |1 |0 |1 |...|0
101     |61234|0 |0 |1 |1 |...|1 
102     |8761 |1 |0 |0 |1 |...|0 
.........................
9999    |8080 |1 |1 |0 |0 |...|1

如果我们有少量元素,就有可能建立一个线性方程组并解决它们。但这显然不会成为thouthands元素的工作。

任何想法如何进行?

添加:示例。 让我们继续一个简单的人为例子。 假设我们在市场上有一些具有0到3特征的物体类型(即带有锤子,螺丝刀,钻头和凿子的工具箱)。 我们在市场上有以下对象,保存到db表中:

object| f0 | f1 | f2 | f3 | price
obj0  | 1  | 1  | 0  | 0  | 700
obj1  | 1  | 1  | 0  | 0  | 750
obj2  | 1  | 1  | 1  | 0  | 950
obj3  | 1  | 1  | 1  | 0  | 1200
obj4  | 0  | 1  | 1  | 1  | 980
obj5  | 0  | 1  | 1  | 1  | 1020
obj6  | 0  | 1  | 1  | 0  | 790
obj7  | 0  | 1  | 1  | 0  | 820
obj8  | 1  | 0  | 1  | 0  | 690
obj9  | 1  | 0  | 1  | 0  | 780

然后我们可以轻松计算每个功能的平均价格: 首先,我们按要素列表对元素进行分组,然后为每个组计算平均价格。 然后,对于每个特征,我们找到仅通过该特征区分的所有组。 我们找到各组之间的价格差异,然后我们找到所有这些差异的平均值。

例如,对于f0: 1."按功能列表分组元素"     {f0,f1} - > {obj0,obj1}     {f0,f1,f2} - > {obj2,obj3}     {f1,f2,f3} - > {obj4,obj5}     {f1,f2} - > {obj6,obj7}     {f0,f2} - > {obj8,obj9}

  1. "然后对于每个组,我们计算平均价格" {f0,f1} - > 725 {f0,f1,f2} - > 1075 {f1,f2,f3} - > 1000 {f1,f2} - > 805 {f0,f2} - > 735

  2. "我们找到仅通过该功能区分的所有组。 " 我们只能获得一次特征f0:{f0,f1,f2}减去{f1,f2}。

  3. "我们发现各组之间的价格差异" {f0,f1,f2}费用为1075,{f1,f2}费用为805,因此功能f0费用为1075-805 = 270.

  4. "我们找到所有这些差异的平均值" 价格将是270。

  5. 以同样的方式我们可以计算其他价格: f1成本340,f2成本350,f3平均成本195.

    现在,让我们说,我想向市场推出一个新工具箱,其功能为f0,f1,f3。我可以说,平均成本应该是805。 我明白,这种方法非常简单。对于这类任务的数学/算法方法,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

由于问题不受限制(因为每个对象中的特征显然可能具有不同的值),因此在一般情况下,不能为单个特征计算明确的平均值或中值。

一种方法是找到特征矩阵的Moore-Penrose伪逆,然后将其乘以对象值向量;这将导致特征值的最小二乘解,从而最小化对象值的总平方误差。这不是闪电般的快速,但对于10 ^ 5个对象,它应该没问题,假设你使用了一个优化良好的实现。