无法在 SVM 模型中使用日期时间数据
Posted
技术标签:
【中文标题】无法在 SVM 模型中使用日期时间数据【英文标题】:Unable to use Datetime data in SVM model 【发布时间】:2017-05-04 12:11:17 【问题描述】:我有一个dataframe
来预测能耗。列。是Timestamp
和Daily KWH system
。
在 SVM 模型中使用时,我得到Value error
,如下所示:
ValueError: Unknown label type: array([ 0. , 127.2264855 , 80.74373643, ..., 7.67569729,
3.32998307, 2.08538807])
数据集包含从 9 月到 12 月每半小时的能源消耗。 这是一个示例数据集
Timestamp Daily_KWH_System
0 2016-09-07 19:47:07 148.978580
1 2016-09-07 19:47:07 104.084760
2 2016-09-07 19:47:07 111.850947
3 2016-09-07 19:47:07 8.421390
4 2016-12-15 02:48:07 13.778317
5 2016-12-15 02:48:07 0.637790
到目前为止,我已经完成了:
读取 CSV
data = pd.read_csv('C:/Users/anagha/Documents/Python Scripts/Half_Ho.csv')
索引
data['Timestamp'] = pd.to_datetime(data['Timestamp'])
data.index = data['Timestamp']
del data['Timestamp']
data
绘制图表
data.resample('D', how='mean').plot()
分为训练和测试
from sklearn.utils import shuffle
test = shuffle(test)
train = shuffle(train)
trainData = train.drop('Daily_KWH_System' , axis=1).values
trainLabel = train.Daily_KWH_System.values
testData = test.drop('Daily_KWH_System' , axis=1).values
testLabel = test.Daily_KWH_System.values
支持向量机模型
from sklearn import svm
model = svm.SVC(kernel='linear', gamma=1)
model.fit(trainData,trainLabel)
model.score(trainData,trainLabel)
预测输出
predicted= model.predict(testData)
print(predicted)
【问题讨论】:
我认为您需要将日期时间分解为单独的日期元素,例如。月、工作日、小时等 那不会是时间序列问题吧?还有什么办法吗? 会的。也许可以通读一下:analyticsvidhya.com/blog/2016/06/…。这是一个时间序列竞赛,其中日期时间分解使用 XGBoost 而不是 SVM 表现得非常好。然而,我每天都在 SVR 上使用这种方法来处理所有类型的能源数据,并且效果很好。 【参考方案1】:SVC
是支持向量分类。使用它会明确地对待你的标签。看起来您实际上是在尝试进行回归。 (注意您的错误,“未知标签类型”)。一个好的第一步是查看SVR
。或者您可以将您的值绑定到类中,例如0-10、10-20等:
sklearn SVR
【讨论】:
我可以用来预测和检测异常的任何其他算法 如果您没有按照建议对它们进行分箱,您将需要一个无监督学习算法来在没有标签的情况下执行此操作。 @Anagha 有很多异常检测方法:en.wikipedia.org/wiki/Anomaly_detection 对你来说最简单的可能是 sklearn 的一类 SVM。 scikit-learn.org/stable/modules/outlier_detection.html @josh OP 有目标(参见他们的代码,trainLabel
),可以用作回归目标
@eqzx 完全同意您使用 SVR。 OP 确实表示他们希望使用 SVC 检测异常。在这种情况下,您必须使用异常标签定义异常。如果您没有这些,那么您需要像您发布的那样不受监督。以上是关于无法在 SVM 模型中使用日期时间数据的主要内容,如果未能解决你的问题,请参考以下文章
如何更改 Oracle BI Publisher 中的日期格式?
我想在DataGridView中显示数据库存的datetime类型日期,怎么转换成string类型后再显示?