实施简单的滚动窗口进行培训和测试

时间:2019-08-23 11:26:16

标签: python pandas numpy machine-learning

我正在尝试使用加速度计和其他传感器来构建手势识别系统。为了更准确地做到这一点,我需要实现一个跨越30行数据的滚动窗口。但是,我当前的代码仅读取最新的数据行。

到目前为止,这是我的代码:

import numpy as np
from sklearn import svm
from sklearn import tree
from sklearn.ensemble import RandomForestClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score
from sklearn.metrics import confusion_matrix

import pandas as pd
df= pd.read_csv("A.csv", delimiter=',')

#########################################################################


from sklearn.model_selection import train_test_split
train, test = train_test_split(df, test_size = 0.2)


train_features = train[['F1','F2','F3','F4','F5','X','Y','Z','C1','C2']]
train_label = train['LABEL']

test_features = test[['F1','F2','F3','F4','F5','X','Y','Z','C1','C2']]
test_label = test['LABEL']

## SVM
model = svm.SVC(kernel='rbf', gamma=0.00000001, C=1)
model.fit(train_features.values, train_label.values)
model.score(train_features, train_label)
predicted_svm = model.predict(test_features)
print "svm"
print accuracy_score(test_label, predicted_svm)
print testing_lang
cn =confusion_matrix(test_label, predicted_svm)

我的问题是如何在数据框中实现滚动窗口。我想维持一个跨越30行的滚动窗口,但是我不应该修改此代码中的哪些部分。

我试图以pandas文档为基础,并将滚动部分添加到train_test_split部分中

train, test = train_test_split(df.rolling(30, win_type='triang'), test_size = 0.2)

但是出现错误,指出

Expected sequence or array-like, got <class 'pandas.core.window.Window'>

基本上,我想创建一个滚动窗口,因为我希望预测共同基于30行,而不仅仅是最新的数据行。

如何正确实施?

1 个答案:

答案 0 :(得分:0)

签出sklearn.model_selection.TimeSeriesSplit((n_splits=5, *, max_train_size=None))。默认情况下,它将窗口固定在数据的开头,但是如果您使用参数max_train_size=30,那么您将获得一个滚动窗口,该窗口仅对您决定的许多n_splits的30个观测值进行训练