我应该用蛮力拟合我的参数吗

数据挖掘 Python 分类 scikit-学习 参数估计
2022-03-04 07:27:12

我正在对我公司制造的这种类型的传感器的数据进行分析。我想使用以下公式根据三个特征来量化传感器的健康状况:

传感器健康指数 = feature1 * A + feature2 * B + feature3 *C

我们还需要选择一个阈值,这样如果这个指标超过阈值,传感器就会被认为是坏传感器。

我们只有一个旧列表,其中显示大约 100 个传感器是坏的。但现在我们拥有超过 10,000 个传感器的数据。不在这 100 个传感器列表中的任何东西都不一定是坏的。所以我猜线性回归方法在这种情况下不起作用。

我能想到的唯一方法是蛮力拟合。伪代码如下:

# class definition for params(coefficients)
class params{
  a
  b
  c
  th
}


# dictionary of parameter and accuracy rate
map = {}

for thold in range (1..20):
   for a in range (1..10):
      for b in range (1..10):
        for b in range (1..10):
           # bad sensor list
           bad_list = []
           params = new params[a, b, c, thold]
           for each sensor:
             health_index = sensor.feature1*a+sensor.feature2*b+sensor.feature3*c
             if health_index > thold:
               bad_list.append(sensor.id)
           accuracy = percentage of common sensors between bad_list and known_bad_sensors
           map[params] = accuracy

# rank params based on accuracy
rank(map)
# the params with most accuracy is the best model
print map.index(0)

我真的不喜欢这种方法,因为它使用了 5 个非常有效的循环。我想知道是否有更好的方法来做到这一点。也许使用现有的库,如 sk-learn?

2个回答

如果您不知道这 10,000 个传感器中哪些是好的,哪些是坏的,那么来自这 10,000 个传感器的数据对于训练回归线/分类器是没有用的。您需要标记数据,您可以在其中了解功能的价值传感器的健康状况。

此外,为了有效,您可能需要您的训练集同时包含健康传感器和坏传感器(您知道哪些是健康的,哪些是坏的);仅仅拥有来自不良传感器的数据是不够的,因为这并不能告诉您健康的传感器是什么样的。在紧要关头,您可以使用一类分类,但我不推荐它——您的结果可能很差,而且您最好从健康传感器和坏传感器获取标记数据。

鉴于只有一小部分数据的标签,您应该使用无监督方法。您可以对所有传感器数据进行聚类。然后查看 100 个坏传感器的位置是否存在模式,并且可以推广到其他传感器。如果 100 个坏传感器中的大多数位于同一区域,您可以将该集群标记为坏,并以此为基础设置阈值。

还有可能合适的半监督学习领域。