Я новичок в машинном обучении. В задаче бинарной классификации мы кодируем/преобразуем целевую переменную, такую как yes=1 и No=0 (непосредственно в наборе данных), это дает следующие результаты.
- Точность:95
- Напомним: 90
- Точность: 94
- F1: 92
но если мы закодируем/преобразуем целевую переменную обратно, как yes=0 и No=1 (непосредственно в наборе данных), то это даст следующие результаты
- Точность:95
- Напомним: 97
- Точность: 94
- F1:95
Я использую алгоритм XGboost. Все остальные переменные числовые (положительные и отрицательные). Хотя точность одинакова в обоих случаях, я предполагаю, что F1 также должен быть одинаковым в обоих случаях. Так почему это дает разные результаты. Я знаю, что scikit-learn может обрабатывать кодирование, но почему F1 отличается в обоих случаях?
xtrain,xtest,ytrain,ytest=train_test_split(X,encoded_Y,test_size=0.3,random_state=100,shuffle=True)
clf_xgb = xgb.XGBClassifier(nthread=1,random_state=100)
clf_xgb.fit(xtrain, ytrain)
xgb_pred = clf_xgb.predict(xtest)
xgb_pred_prb=clf_xgb.predict_proba(xtest)[:,1]
print(confusion_matrix(xgb_pred,ytest))
# [984 57]
# [103 1856]
#Find Accuracy of XGBoost
accuracy_xgb = accuracy_score(ytest,xgb_pred)
print("Accuracy: {}".format(accuracy_xgb)
#Find Recall of XGBoost
recall_xgb = recall_score(ytest,xgb_pred)
recall_xgb
#Find Precision of XGBoost
precision_xgb = precision_score(ytest,xgb_pred)
precision_xgb
#Find F1 Score XGB
xgb_f1=f1_score(ytest,xgb_pred)
xgb_f1
train_test_split
или сгибов. - person jottbe   schedule 29.11.2020XGBClassifier
этот аргумент называетсяrandom_state
. Просто попробуйтеrandom_state=random.randint(0, 2147483647)
. Только что узнал, что вы явно исправляетеrandom_state
дляtrain_test_split
на 1, поэтому он всегда будет выбирать одни и те же записи для обучения и тестирования. - person jottbe   schedule 29.11.2020