Вы должны предварительно обработать данные перед подачей вашей модели.Вот полный рабочий пример.Сначала давайте импортируем необходимые модули:
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)