Как использовать .fit, когда значение X находится в формате времени

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


person FreeHuman jen    schedule 11.02.2019    source источник


Ответы (1)


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

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)
person constt    schedule 11.02.2019
comment
Хорошо, теперь я изменил время на плавание и преобразовал его в массив (154,1), потому что мой массив y фактически состоял из 154 строк. код: x = [17, 17.083333, 17.166667, 17.25, 17.333333, 17.416667] x = x.values.reshape (6,1) y = [1,0,1,1,0,1] X_train, X_test, y_train, y_test = train_test_split (x, y, test_size = 0.20) clf = svm.SVC (kernel = 'linear') clf.fit (x, y) pred = clf.predict (Xtest) score = sk.metrics.accuracy_score (y_test, pred) report = sk.metrics.classification_report (y_test, pred, target_names = ['0', '1']) ConfusionMatrix = sk.metrics.confusion_matrix (y_test, pred) error - person FreeHuman jen; 12.02.2019
comment
error: UndefinedMetricWarning: Точность и F-оценка плохо определены и установлены на 0,0 в метках без прогнозируемых выборок. 'точность', 'прогнозируемый', средний, warn_for - person FreeHuman jen; 12.02.2019
comment
Спасибо @constt за предыдущий код. Это сработало, когда я запустил ваш код. Но когда я пытаюсь увидеть отчет и матрицу недоразумений, я получаю ошибку. Я новичок в этом не могу найти решение - person FreeHuman jen; 12.02.2019
comment
Когда я снова запускаю приведенный выше код, он говорит: [Errno 22] Invalid argument. - person FreeHuman jen; 12.02.2019
comment
Проблема в том, что у вас недостаточно данных для обучения и проверки модели. Ошибка F-score означает, что некоторые метки не были предсказаны, поэтому для этих меток нет оценки. Попробуйте использовать больше данных. - person constt; 13.02.2019
comment
Я также пробовал с большим набором данных. Ниже изображение моих данных - person FreeHuman jen; 13.02.2019