Я пытаюсь написать функцию, которая будет давать среднюю ROC-оценку 10 классификаторов логистической регрессии, каждый из которых обучается по разной случайной перетасовке целевых данных обучения для одной функции за раз.(с целью сравнения с не перетасованным счетом roc) Но я получаю очень странные и неслучайные результаты для каждого счета roc.
Я попытался использовать np.random.shuffle вместо pd.sample и получил тот же результат
from sklearn import metrics
from sklearn.linear_model import LogisticRegression
def shuffled_roc(df, feature):
df = df.sample(frac=1, random_state=0)
x = df[feature][np.isfinite(df[feature])].copy()
y = df['target'][np.isfinite(df[feature])].copy()
x_train = x.iloc[:int(0.8*len(x))]
y_train = y.iloc[:int(0.8*len(x))]
x_test = x.iloc[int(0.8*len(x)):]
y_test = y.iloc[int(0.8*len(x)):]
y_train_shuffled = y_train.sample(frac=1).reset_index(drop=True)
rocs = []
for i in range(10):
y_train_shuffled = y_train_shuffled.sample(frac=1).reset_index(drop=True)
lr = LogisticRegression(solver = 'lbfgs').fit(x_train.values.reshape(-1,1), y_train_shuffled)
roc = metrics.roc_auc_score(y_test, lr.predict_proba(x_test.values.reshape(-1,1))[:,1])
rocs.append(roc)
print(rocs)
return np.mean(rocs)
shuffled_roc(df_accident, 'target_suspension_count')
Я ожидаю 10 разных значений для 10 баллов, но вместо этого я получаю
[0.7572317596566523, 0.24276824034334765, 0.24276824034334765, 0.7572317596566523, 0.7572317596566523, 0.7572317596566523, 0.24276824034334765, 0.7572317596566523, 0.7572317596566523, 0.24276824034334765]