предсказание с ударом и недостаточной выборкой - PullRequest
0 голосов
/ 02 декабря 2018

Что ж, сегодня я прихожу с чем-то странным, я пытаюсь делать прогнозы с Smote, недостаточной выборкой и нормальным.Я не знаю, почему (в ударных и недопоставленных) президентство и откат дают мне более 95%.Я уточняю, дисбаланс был очень большим ({0: 1967, 1: 197}).Очень довольный своим результатом, я решил попробовать алгоритм в X и Y (зная, что мне придется дать что-то похожее на {0: 1967, 1: 197}, но нет).Когда я сравниваю в алгоритме, он дает хорошее (прогноз 95% и повторный 96%), но если я делаю .. model.predict (X) в «Y», это дает мне совершенно другое, чем истинное «Y».Давайте посмотрим, может ли кто-нибудь мне помочь.

Я оставляю код:

вижу разницу между 0 и 1, после выполнения перевыборов и недостаточной выборки

print('normal data distribution:{}'.format(Counter(y)))
X_smote, y_smote = SMOTE().fit_sample(X,y)
print('SMOTE data distribution:{}'.format(Counter(y_smote)))
X_nearmiss,y_nearmiss=NearMiss().fit_sample(X,y)
print('Nearmiss data distribution:{}'.format(Counter(y_nearmiss)))

нормальное распределение данных: Счетчик ({0: 1967, 1: 197}) Распределение данных SMOTE: Счетчик ({0: 1967, 1: 1967}) Распределение данных ближней зоны: Счетчик ({0: 197, 1: 197})

X_normal_train, X_normal_test, y_normal_train, y_normal_test = train_test_split(X,y,test_size = 0.3, random_state = 0)
X_smote_train, X_smote_test, y_smote_train, y_smote_test = train_test_split(X_smote,y_smote,test_size = 0.3, random_state = 0)
X_under_train, X_under_test, y_under_train, y_under_test = train_test_split(X_nearmiss,y_nearmiss,test_size = 0.3, random_state = 0)
stds = StandardScaler()

#######normal#######
X_train_nor = stds.fit_transform(X_normal_train)
X_test_nor = stds.transform(X_normal_test)
######smote########
X_train_smote = stds.fit_transform(X_smote_train)
X_test_smote = stds.transform(X_smote_test)
######under########
X_train_under = stds.fit_transform(X_under_train)
X_test_under = stds.transform(X_under_test)
#apply cat
from catboost import CatBoostClassifier
model_cat_nor = CatBoostClassifier()
model_cat_smote = CatBoostClassifier()
model_cat_under = CatBoostClassifier()

model_cat_nor.fit(X_train_nor, y_normal_train)
model_cat_smote.fit(X_train_smote, y_smote_train)
model_cat_under.fit(X_train_under, y_under_train)

##########teste model########
    test_normal_primera=model_cat_nor.predict(X_test_nor)
    test_smote_primera=model_cat_smote.predict(X_test_smote)
    test_under_primera=model_cat_under.predict(X_test_under)

Counter({0.0: 650})
Counter({0.0: 636, 1.0: 545})
Counter({0.0: 63, 1.0: 56})

здесь я делаю "классификационный_отчет", где предсказание и отзыв, ударов и ниже дают мне более 95%.

Затем из любопытства я пытаюсь сделатьпредсказание X (оригинал, это должно было бы дать аналогично оригиналу Y), но нет.

standardatanuevo = stds.transform(X)
predicciondatanuevo1=model_cat_smote.predict(standardatanuevo)
print(Counter(predicciondatanuevo1))

, и результаты Counter ({1.0: 2091, 0.0: 73}) много 1и немного 0, но это может дать мне нечто похожее на оригинал ({0: 1967, 1: 197}).

Может быть, я ошибаюсь с этим последним предсказанием?Если так, как я могу предсказать новый фрейм данных?(с обученной моделью предыдущего кадра данных)

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