Как построить прогноз обучения под наблюдением класса - PullRequest
0 голосов
/ 10 апреля 2019

Я использую Python 3.7 на ноутбуке Jupyter. Я успешно обучил модели ML (логистическая регрессия) и хотел бы создать график, показывающий прогнозируемый класс (двоичные значения, 0 и 1), а также вероятности для рассчитанных по модели. Ось X графика должна показывать дату и время, что делает его довольно сложным.

Пока не будет шага создания фрейма данных с вероятностями, все будет работать нормально, но потом все станет грязно. Я попытался объединить фрейм данных pred_lr (содержит прогнозируемые классы) с фреймом данных вероятности, но это похоже на настоящую ошибку. Должен быть более элегантный способ. Таким образом, действительно важно, что индекс (отметка времени, первоначально только в y_test) остается неизменным и не шифруется.

import pandas as pd
import numpy as np
data = pd.read_csv('testrooms_data.csv', parse_dates=['timestamp'])


from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

##split dataset into test and trainig set
X = data.drop("value", axis=1) # X contains all the features
y = data["value"] # y contains only the label

##sampling split
from sklearn.model_selection import KFold
kf= KFold(n_splits=3)
from sklearn.model_selection import StratifiedKFold
skf = StratifiedKFold(n_splits=3, random_state=1)
skf.get_n_splits(X, y)
for train_index, test_index in skf.split(X,y):
    print("TRAIN:", train_index, "TEST:", test_index)
    X_train, X_test = X.iloc[train_index], X.iloc[test_index]
    y_train, y_test = y.iloc[train_index], y.iloc[test_index]

###undersampling
from imblearn.under_sampling import ClusterCentroids
cc = ClusterCentroids(random_state=0)
X_resampled1, y_resampled1 = cc.fit_resample(X_train, y_train)

    ####models###
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

clf_lr = LogisticRegression(class_weight="balanced")

# fit the dataset into LogisticRegression Classifier

clf_lr = clf_lr.fit(X_resampled1, y_resampled1)
#predict on the unseen data
pred_lr = clf_lr.predict(X_test)

#obtain probabilities
prob1 = clf_lr.predict_proba(X_test)

#create dataframe with probabilities
prob_unocc=pd.Series(prob1[:,0])
probability_lr = pd.DataFrame(prob1)
probability_lr = probability_lr.rename(columns={0:'prob_unoccupied', 1:'prob_occupied'})

#dataframe of predicted classes (column: value) + probability
y_new = pd.DataFrame(pred_lr)
y_new['prob_unoccupied']=prob_unocc
y_new.head()


                   value prob_unoccupied
TS_TIMESTAMP        
2019-02-10 13:45:00 0.0 NaN
2019-02-10 14:00:00 0.0 NaN
2019-02-10 14:15:00 0.0 NaN
2019-02-10 14:30:00 0.0 NaN
2019-02-10 14:45:00 0.0 NaN

То, что я хотел бы иметь, - это диаграмма рассеяния, показывающая предсказанные классы (например, красного и зеленого цвета, чтобы показать, было ли предсказание верным или ложным в отношении истинности основания в моем наборе данных), а также рассчитанные вероятности для каждой временной метки плюс линия отсечения, параллельная оси x, которая показывает, при каком значении вероятности модель пошла для класса 1 или 0. Любая помощь очень ценится!

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