В следующем минимальном воспроизводимом наборе данных я разделил набор данных на обучающий и тестовый наборы данных, поместил логистическую регрессию в обучающий набор данных с помощью scikit learn и прогнозировал y на основе x_test
.
Однако прогнозы y_pred
или y верны, только если обратное вычисление (например, 0 = 1 и 1 = 0) рассчитывается следующим образом: 1 - y_pred
.
Почему это так? Я не могу понять, имеет ли это отношение к масштабированию x (я пробовал с StandardScaler
и без него), что-то, связанное с логистической регрессией или вычислением оценки точности.
В моем большом наборе данных это также имеет место даже при использовании различных семян в качестве случайного состояния. Я также попробовал эту логистическую регрессию с тем же результатом.
EDIT как указано @Nester, он работает без стандартного масштабатора для этого минимального набора данных. Доступен больший набор данных здесь , standardScaler
ничего не делает с этим большим набором данных, я сохраню меньший набор данных OP, так как это может помочь в объяснении проблемы.
# imports
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.metrics import accuracy_score
from sklearn.preprocessing import StandardScaler
# small dataset
Y = [1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0]
X =[[0.38373581],[0.56824121],[0.39078066],[0.41532221],[0.3996311 ]
,[0.3455455 ],[0.55867358],[0.51977073],[0.51937625],[0.48718916]
,[0.37019272],[0.49478954],[0.37277804],[0.6108499 ],[0.39718093]
,[0.33776591],[0.36384773],[0.50663667],[0.3247984 ]]
x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.15, random_state=42, stratify=Y)
clf = make_pipeline(StandardScaler(), LogisticRegression())
clf.fit(x_train, y_train)
y_pred = clf.predict(x_test)
y_pred = 1 - y_pred # <- why?
accuracy_score(y_test,y_pred)
1.0
Большая точность набора данных:
accuracy_score(y_test,y_pred)
0.7 # if inversed
спасибо за чтение