我正在使用包含所有十进制值和时间戳的数据集,该数据集具有以下功能:
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
答案 0 :(得分:4)
多类支持是根据一对一方案处理的(因此应该支持一对一战略)。
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
因此,基本思想是以下列方式实例化复杂(即多标签)目标变量:
y
为零,则 v1 v2 v3
等于0
y
或v1
或v2
为 ,则 v3
等于1
如果y
或v1 v2
或v1 v3
为
v2 v3
等于2
如果y
为
v1 v2 v3
等于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)