我使用的数据集具有所有十进制值和时间戳,具有以下特性:
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
发布于 2017-10-06 22:45:57
跟随文档
多类支持是根据一个vs-一个方案来处理的(因此应该支持一个-vs-所有策略)。
一-比-一
一比一方案基本上是指每对类使用一个分类器。在预测阶段,接收最多选票的类(每个分类器的输出)最终被选择为预测。如果这样的投票是相等的,即有两类票数相等,那麽分类的信心便会起作用。
要在这样的方案中使用SVM
,我们应该这样做:
from sklearn.multiclass import OneVsOneClassifier
from sklearn.svm import SVC
...
subclf = SVC(**params)
clf = OneVsOneClassifier(estimator=subclf)
clf.fit()
1-vs-休息
另一种方法是使用一-vs-全部策略。这种策略适合每个类的分类器,并针对数据中的所有其他类。它比第一种方案更受欢迎,因为它比较容易对结果进行干预,而且计算时间要弱得多。它与第一个示例一样简单:
from sklearn.multiclass import OneVsRestClassifier
from sklearn.svm import SVC
...
subclf = SVC(**params)
clf = OneVsRestClassifier(estimator=subclf)
clf.fit()
要阅读更多关于多标签分类和学习的信息,请继续这里。
善后变量编码
因此,基本思想是实例化一个复杂的(即多标签)目标变量,方法是:
y
是零,则v1 v2 v3
等于0y
或v1
、v2
或v3
为1y
等于2,如果v1 v2
、v1 v3
或v2 v3
都是1y
是3,则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)
https://stackoverflow.com/questions/46613436
复制相似问题