Как протестировать перекрестную проверку sklearn.linear_model, обученную с помощью TimeSeriesSplit - PullRequest
0 голосов
/ 28 мая 2020

Я не могу на самом деле asp понять, как протестировать модель, которая была обучена методом временных рядов. В моем случае у меня есть еженедельные данные о целочисленном значении, которое следует классифицировать как 0 или 1. У меня нет проблем (по крайней мере, я так думаю) с обучением модели, но я изо всех сил пытаюсь ее проверить. Вот несколько фрагментов кода:

#Imports
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.model_selection import TimeSeriesSplit
from sklearn.model_selection._validation import cross_val_predict
from sklearn.metrics import roc_curve, auc
from sklearn.metrics import roc_auc_score
#Training
validation_size = test_size = 0.2
n_splits = int(np.ceil(validation_size * np.size(X_train)))
tscv = TimeSeriesSplit(n_splits)

#data (weekly int value) has shape (1, 1000) and target (0 or 1) has shape (, 1000)
#and are passed to the function
X_train, X_test, y_train, y_test = train_test_split(data, target, test_size = test_size)
clf = LogisticRegressionCV(cv = tscv, random_state = 0, n_jobs = -1).fit(X_train, y_train)

#Testing ----- here I am not sure
y_score = clf.decision_function(X_test)
predicted_probs = clf.predict_proba(X_test)
positives = predicted_probs[:, 1]
auc = roc_auc_score(y_test, positives)
fpr, tpr, _ = roc_curve(y_test, positives)

plt.plot(fpr, tpr, linestyle = '.', label = 'LogRegCV, AUC:' + str(auc))
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.legend()
plt.show()

Разве тест не должен быть также временным рядом? И если да, то каким способом этого добиться удобнее всего? Я ничего не могу найти по этому поводу. Я уже пытался создать массив массивов, содержащий все возможные интервалы от первого дня до последнего дня, и передать его в clf.decision_function(X_test_interval) и predicted_probs = clf.predict_proba(X_test). Но, видимо, я сделал что-то не так, или sklearn не может обрабатывать такие данные, потому что я получаю следующую ошибку: setting an array element with a sequence.

Я использую: python 3.6.6; numpy 1.18.1; scikit-learn 0.22.1; matplotlib 3.1.3

Буду очень благодарен за любую помощь, спасибо!

...