gpt4 book ai didi

python - Scikit-Learn:所有训练示例中都存在标签 not x

转载 作者:太空狗 更新时间:2023-10-29 21:23:50 25 4
gpt4 key购买 nike

我正在尝试使用 SVM 进行多标签分类。我有近 8k 个特征,也有长度接近 400 的 y 向量。我已经有二值化的 Y 向量,所以我没有使用 MultiLabelBinarizer() 但是当我将它与我的 Y 数据的原始形式一起使用时, 它仍然给出同样的东西。

我正在运行这段代码:

X = np.genfromtxt('data_X', delimiter=";")
Y = np.genfromtxt('data_y', delimiter=";")
training_X = X[:2600,:]
training_y = Y[:2600,:]

test_sample = X[2600:2601,:]
test_result = Y[2600:2601,:]

classif = OneVsRestClassifier(SVC(kernel='rbf'))
classif.fit(training_X, training_y)
print(classif.predict(test_sample))
print(test_result)

在预测部分的所有拟合过程之后,它说 Label not x is present in all tr​​aining examples(x 是我的 y 向量长度范围内的几个不同数字,即 400) .之后,它给出预测的 y 向量,它始终是长度为 400(y 向量长度)的零向量。我是 scikit-learn 和机器学习的新手。我无法弄清楚这里的问题。有什么问题,我应该怎么做才能解决它?谢谢。

最佳答案

这里有两个问题:

1) 标签缺失警告
2) 你得到的预测都是 0

警告表示训练数据中缺少您的某些类。这是一个常见问题。如果您有 400 个类,那么其中一些类一定很少出现,并且在数据的任何拆分中,拆分的一侧可能会丢失一些类。也可能有根本不会出现在您的数据中的类。您可以尝试 Y.sum(axis=0).all(),如果它为 False,那么即使在 Y 中也不会出现某些类。这听起来很可怕,但实际上,您并没有无论如何,将能够正确预测出现 0 次、1 次或任何非常小次数的类别,因此为这些类别预测 0 可能是你能做的最好的事情。

至于全 0 预测,我要指出的是,对于 400 个类,您所有类的出现时间可能远少于一半。您可以检查 Y.mean(axis=0).max() 以获得最高的标签频率。有 400 个类,它可能只有百分之几。如果是这样,必须对每个类进行 0-1 预测的二元分类器可能会为所有实例的所有类选择 0。这并不是真正的错误,只是因为所有类别的频率都很低。

如果您知道每个实例都有一个正标签(至少一个),您可以获取决策值 (clf.decision_function) 并为每个实例选择最高的类别。不过,您必须编写一些代码才能做到这一点。

我曾经在与此类似的 Kaggle 比赛中获得前 10 名。这是一个包含约 200 个类的多标签问题,没有一个以 10% 的频率出现,我们需要 0-1 的预测。在那种情况下,我得到了决策值并取了最高值,加上任何高于阈值的值。我选择了在保留集上效果最好的阈值。该条目的代码在 Github 上:Kaggle Greek Media code .你可以看看它。

如果您已经读到这里,感谢您的阅读。希望对您有所帮助。

关于python - Scikit-Learn:所有训练示例中都存在标签 not x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34561554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com