无法在 SVM 模型中使用日期时间数据

Posted

技术标签:

【中文标题】无法在 SVM 模型中使用日期时间数据【英文标题】:Unable to use Datetime data in SVM model 【发布时间】:2017-05-04 12:11:17 【问题描述】:

我有一个dataframe 来预测能耗。列。是TimestampDaily 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 中的日期格式?

使用 Diesel 从 mySQL 数据库中检索日期时间

我想在DataGridView中显示数据库存的datetime类型日期,怎么转换成string类型后再显示?

在 R 中使用 SVM 进行股票预测 + 新闻情绪?

无法将 createdAt 和 updatedAt 保存为日期时间值,也无法将后端保存为前端

无法按日期/时间在 Waterline 中找到记录