bootstrap с повторной выборкой может привести к снижению точности оценки? - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть данные ниже, смоделировал их с помощью регрессионной модели logisti c и получил значение precision_score, затем обработал данные, используя bootstrap повторную выборку, чтобы заново сбалансировать / увеличить выборку данных и снова вычислить показатель точности, подумал я после начальной загрузки оценка точности должна быть выше, но на самом деле она ниже? Это ожидается или я что-то упустил? Спасибо!


Ссылка на данные: https://github.com/amandawang-dev/diabetes-dataset/blob/master/diabetes.csv

Дополнительные данные:

data info

показатель точности, полученный мной до bootstrap: 0,7597402597402597

показатель точности, полученный после bootstrap: 0,67

мои коды:

import pandas as pd
from sklearn.model_selection import train_test_split

data = pd.read_csv('diabetes.csv')
train_set, test_set = train_test_split(data, test_size=0.2, random_state=42)

from sklearn.linear_model import LogisticRegression
log_rgr = LogisticRegression(random_state=0)
X_train=train_set[train_set.columns[:8]]
y_train=train_set['Outcome']
log_rgr.fit(X_train, y_train)


from sklearn.metrics import accuracy_score
import numpy as np

lr_acc = accuracy_score(y_test, y_pred)
print("Accuracy: {}".format(lr_acc))


###############
from sklearn.utils import resample
majority_class = data[data.Outcome==0]
majority_count= majority_class['Outcome'].count()

minority_class = data[data.Outcome==1]
minority_count=minority_class['Outcome'].count()
#print(majority_count, minority_count)



# Upsample minority class
minority_upsampled = resample(minority_class, replace=True, n_samples=majority_count, random_state=42)   



# Combine majority class with upsampled minority class
data_upsampled = pd.concat([majority_class, minority_upsampled])

########train a another model with logistic regression

train_set_new, test_set_new = train_test_split(data_upsampled, test_size=0.2, random_state=42)
log_rgr_new = LogisticRegression(random_state=0)
X_train_new=train_set_new[train_set_new.columns[:8]]
y_train_new=train_set_new['Outcome']
log_rgr_new.fit(X_train_new, y_train_new)
X_test_new = test_set_new[test_set_new.columns[:8]]
y_test_new = test_set_new['Outcome']
y_pred_new=log_rgr.predict(X_test_new)
lr_acc = accuracy_score(y_test_new, y_pred_new)
print("Accuracy: {}".format(lr_acc))

#########
...