модель поезда с набором данных A и тест с набором данных B - PullRequest
0 голосов
/ 14 октября 2019

В этом примере у меня есть гипотетический сбалансированный набор данных, содержащий несколько атрибутов о студентах колледжа и один целевой атрибут, указывающий, сдали ли они свой экзамен или нет (0 = неудача 1 = сдача). Я создал и установил модель GBM (scikit-learn xgboost) с 75% моего исходного набора данных (18000 записей) и вижу 80% точности и 91,6% точности в моем наборе несогласных (4700 записей) в отношении учащихся, которые потерпели неудачуэкзамен.

На этом этапе мне бы очень хотелось использовать 100% этого набора данных в качестве обучающих данных и использовать новый набор из 2000 студенческих записей (сбалансированный) в качестве тестовых данных. ,Я хочу делать прогнозы для набора данных B на основе обучения набора данных A. В конечном счете, я хотел бы предложить эти прогнозы своему начальнику / начальнику в качестве способа проверки моей работы, а затем начать подачу новых данных в мою модель для прогнозирования. как будущие студенты могут выступить на этом экзамене. В настоящее время я застрял в том, как использовать мой исходный набор данных в качестве учебного материала и весь новый набор данных в качестве тестового материала.

Я пытался использовать

X = original data minus target feature
y = original data target feature only
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 
0.00001, random_state=0)

и

N = new data minus target feature
z = new data target feature only
N_train, N_test, z_train, z_test = (train_test_split(N, z, test_size = 
.999, random_state=0))

для создания моих тестовых и обучающих переменных. Затем я пытаюсь подогнать и передать новые записи в мою модельиспользуя:

# Fit model with original X and y data
xg_class.fit(X_train, y_train)

# Generate predictions based off of X_test
new_preds = xg_class.predict(N_test)

Я не получаю никаких ошибок, но мой вывод намного ниже, чем мои первоначальные результаты из набора данных разделения A.

Accuracy (75%/25% split of dataset A):  79%
Precision (75%/25% split of dataset A): 91.1% TP / 71.5% TN

Accuracy (99% trained dataset A, tested dataset B): 45%
Precision (99% trained dataset A, tested dataset B): 18.7% TP / 62.4% TN

Это связано с несоответствием вразмер одного / обоих моих наборов данных или это следует ожидать? Из того, что я читаю, это может быть проблемой методологии использования двух уникальных наборов данных для обучения и тестирования. Однако, если это так, то я не вижу смысла в построении модели, так как она не может предоставлять уникальные данные с разумными ожиданиями успеха. Я, очевидно, не верю, что это правда, но я не нашел никакой информации в ходе моих поисков о том, как выполнить эту часть оценки модели. Если бы кто-нибудь мог помочь мне с некоторым общим пониманием, это было бы оценено.

1 Ответ

0 голосов
/ 14 октября 2019

Оказывается, первая часть моего вопроса - простой ответ: не используйте train_test_split (). Вы назначаете свой конкретный алгоритм переменной (например, «модель»), а затем подгоняете его ко всем данным таким же образом, как train_test_split.

model.fit(X, y)

Затем вы передаете новые данные (например, N какданные функции и z в качестве метки)

new_predictions = model.predict(N)

вторая часть моего вопроса все еще ускользает от меня.

...