Как использовать .fit, когда значение X в формате времени - PullRequest
0 голосов
/ 11 февраля 2019

Xtrain, Xtest, Ytrain, Ytest = train_test_split (X, Y, test_size = 0.2, random_state = 10)

1 Ответ

0 голосов
/ 11 февраля 2019

Вы должны предварительно обработать данные перед подачей вашей модели.Вот полный рабочий пример.Сначала давайте импортируем необходимые модули:

from datetime import datetime

import numpy as np
from sklearn.svm import SVC
from sklearn.pipeline import Pipeline
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler, FunctionTransformer

Затем определим данные обучения:

X = ['17:00','17:05', '17:10', '17:15', '17:20', '17:25']
X = np.array(X).reshape(-1, 1)
y = [1, 0, 1, 1, 0, 1]

Обратите внимание, что X должно быть 2D массив.Кроме того, вы должны преобразовать значения строки времени в числовой формат.Один из способов сделать это - преобразовать строки в timestamp, используя встроенный модуль datetime.Вот функция, которая будет использоваться для преобразования данных:

def transform(X, y=None):

    X_new = np.apply_along_axis(
        lambda x: [datetime.strptime(x[0], '%H:%M').timestamp()],
        axis=1,
        arr=X)

    return X_new

Не забудьте масштабировать данные, поскольку модели SVC требуют нормализации данных.Можно легко объединить все этапы предварительной обработки, используя Pipeline:

pipeline = Pipeline(steps=[
    ('transformer', FunctionTransformer(transform, validate=False)),
    ('scaler', MinMaxScaler()),
    ('predictor', SVC(kernel='linear'))
])

Наконец, давайте подгоним модель:

print('Build and fit a model...')

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

pipeline.fit(X_train, y_train)
score = pipeline.score(X_test, y_test)

print('Done. Score', score)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...