gpt4 book ai didi

machine-learning - 如何使用 svm 预测多标签数据集

转载 作者:行者123 更新时间:2023-11-30 09:27:07 25 4
gpt4 key购买 nike

我使用的数据集包含所有十进制值和时间戳,它具有以下功能:

 1. sno
2. timestamp
3. v1
4. v2
5. v3

我有 5 个月的数据,每分钟都有时间戳。我需要预测将来是否会使用 v1、v2、v3。 v1,v2,v3的值在0到25之间。

我该怎么做?

我以前使用过二元分类,但我不知道如何处理多标签问题来预测。我一直使用下面的代码。我应该如何训练模型以及如何使用 v1,v2,v3 来适应 'y'?

X_train, X_test, y_train, y_test = train_test_split(train, y, test_size=0.2)




Data:

sno power voltage v1 v2 v3 timestamp
1 3.74 235.24 0 16 18 2006-12-16 18:03:00
2 4.928 237.14 0 37 16 2006-12-16 18:04:00
3 6.052 236.73 0 37 17 2006-12-16 18:05:00
4 6.752 237.06 0 36 17 2006-12-16 18:06:00
5 6.474 237.13 0 37 16 2006-12-16 18:07:00
6 6.308 235.84 0 36 17 2006-12-16 18:08:00
7 4.464 232.69 0 37 16 2006-12-16 18:09:00
8 3.396 230.98 0 22 18 2006-12-16 18:10:00
9 3.09 232.21 0 12 17 2006-12-16 18:11:00
10 3.73 234.19 0 27 17 2006-12-16 18:12:00
11 2.308 234.96 0 1 17 2006-12-16 18:13:00
12 2.388 236.66 0 1 17 2006-12-16 18:14:00
13 4.598 235.84 0 20 17 2006-12-16 18:15:00
14 4.524 235.6 0 9 17 2006-12-16 18:16:00
15 4.202 235.49 0 1 17 2006-12-16 18:17:00

最佳答案

遵循documentation :

The multiclass support is handled according to a one-vs-one scheme (and should thus support one-vs-all strategy).

一对一策略

one-vs-one方案基本上是指每对类使用一个分类器。在预测阶段,最终选择获得最多选票的类别(每个分类器的输出)作为预测。如果这样的投票有平局,即两个类别的票数相等,那么分类置信度就会发挥作用。

要将 SVM 与这样的方案一起使用,应该这样做:

from sklearn.multiclass import OneVsOneClassifier
from sklearn.svm import SVC

...

subclf = SVC(**params)
clf = OneVsOneClassifier(estimator=subclf)

clf.fit()

一对一策略

另一种方法是使用 one-vs-all战略。该策略适合每个类的分类器并针对数据中的所有其他类。它比第一个方案更受欢迎,因为它更容易解释结果,并且计算时间要短得多。使用起来就像第一个例子一样简单:

from sklearn.multiclass import OneVsRestClassifier
from sklearn.svm import SVC

...

subclf = SVC(**params)
clf = OneVsRestClassifier(estimator=subclf)

clf.fit()

要了解有关多标签分类和学习的更多信息,请继续 here

<小时/><小时/>

后果变量编码

因此,基本思想是通过以下方式实例化一个复杂(即多标签)目标变量:

  • 如果 v1 v2 v3 为零,y 等于 0

  • 如果 v1v2v3 为 1,y 等于 1

  • 如果 v1 v2v1 v3v2 v3 为 1,
  • y 等于 2

  • 如果 v1 v2 v3 为 1,y 等于 3

解决方法可能如下:

import numpy as np

y = []

for i, j, k in zip(data['v1'], data['v2'], data['v3']):
if i and j and k > 0:
y.append(3)
elif i and j or i and k or j and k > 0:
y.append(2)
elif i or j or k > 0:
y.append(1)
else:
y.append(0)

关于machine-learning - 如何使用 svm 预测多标签数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46613436/

25 4 0