【问题标题】:Stochastic Gradient Descent classifier with pre defined weights具有预定义权重的随机梯度下降分类器
【发布时间】:2017-10-23 20:45:30
【问题描述】:

我收到了一组测试数据,由 3 个人进行分类,无论是真还是假。我也获得了信心——例如,有时 2/3 同意一个方向。我怎样才能将它合并到我的分类器模型中。我研究了SGDClassifier,它具有class_weight 参数,SVM 也是如此。然后,我将迭代每个置信水平,并为每一行数据分配 3 或 2 的权重,具体取决于所有三个是否被分类为相同:

x=0
weights = {}
for d in confidence:
    val = int(d[1])
    if(val == 1):
        weight = 3
    else: # d=0.66
        weight = 2
    x = x+1
    weights[x] = weight

不幸的是,在运行时:

SGDClassifier(class_weight=weights)

我得到错误:

类标签 2 不存在。

我做错了什么?

【问题讨论】:

  • confidence的格式是什么?另外,您是否检查过您的字典是否正确?字典中有多少个键? print weights.keys()?当您的 class_weight 字典没有至少两个权重(即只有一个权重)时,通常会发生该错误。
  • 信心是1.00.66
  • 这并没有完全回答我的问题。 confidence 是数字列表吗?您的代码目前无法重现您遇到的错误,主要是因为没有指定 confidence 是什么。
  • 抱歉,我的笔记本电脑没电了! weights.keys() = [1, 2, 3, 4, 5, 6, 7, 8, 9,...]
  • 您只需要样本权重进行训练。它只是告诉训练算法它应该信任每个数据点的程度。对于测试,您不需要它 - 分类器并不关心您对测试样本的信任程度。

标签: python machine-learning scikit-learn


【解决方案1】:

数据点的置信度应表示为sample_weight,而不是class_weight

一些分类器的.fit 方法采用sample_weight 参数。

有一个example in the scikit-learn documentation 显示了如何使用支持向量分类器执行此操作。相关摘录:

# fit the model
clf_weights = svm.SVC()
clf_weights.fit(X, y, sample_weight=sample_weight_last_ten)

【讨论】:

  • 您能举一个sample_weight_last_ten 的例子吗?我的例子是2/33/3
  • @Maximilian 你没有在你的问题中提供太多细节,但看起来你可以简单地传递sample_weights=confidence。注意confidencey的长度和X的行数需要一致。
  • 我的意思是我应该将 2/3 的置信度设置为 2 并将 3/3 的置信度设置为 31266 和 @987654339 @ 或 0.661?
  • @Maximilian 我认为只有比例很重要。因为你已经有 0.66 和 1 使用它。但我不是这方面的专家,所以玩一下,看看什么最有效;)
猜你喜欢
  • 2015-07-15
  • 2016-06-13
  • 2016-09-25
  • 1970-01-01
  • 2021-12-18
  • 2018-12-10
  • 2012-12-10
  • 2018-01-09
  • 2021-02-20
相关资源
最近更新 更多