Mam problemy z regresją logistyczną za pomocą xgboost, które można podsumować na poniższym przykładzie.xgboost binarna regresja logiczna
Załóżmy Mam bardzo prosty dataframe z dwoma czynnikami prognostycznymi i jednej zmiennej docelowej:
df= pd.DataFrame({'X1' : pd.Series([1,0,0,1]), 'X2' : pd.Series([0,1,1,0]), 'Y' : pd.Series([0,1,1,0],)})
mogę umieszczać obrazki bo jestem tu nowy, ale wyraźnie widać, że gdy X1 = 1 i X2 = 0 , Y to 0, a gdy X1 = 0 i X2 = 1, Y to 1.
Mój pomysł to zbudowanie modelu, który daje prawdopodobieństwo, że obserwacja należy do każdej z klas, więc jeśli uruchomię xgboost próbuje przewidzieć dwie nowe obserwacje (1,0) i (0,1) jak:
X = df[['X1','X2']].values
y = df['Y'].values
params = {'objective': 'binary:logistic',
'num_class': 2
}
clf1 = xgb.train(params=params, dtrain=xgb.DMatrix(X, y), num_boost_round=100)
clf1.predict(xgb.DMatrix(test.values))
wyjście jest:
array([[ 0.5, 0.5],
[ 0.5, 0.5]], dtype=float32)
które mogę sobie wyobrazić, oznacza to, że dla pierwszej obserwacji, istnieje 50% szans, że należące do każdej z klas.
Chciałbym wiedzieć, dlaczego nie wydzieli się algorytmu poprawnie (1,0) lub coś bliższego, jeśli związek między zmiennymi jest jasny.
FYI, próbowałem z większą ilością danych (używam tylko 4 wierszy dla uproszczenia) i zachowanie jest prawie takie samo; co robię jest fakt, że nie tylko prawdopodobieństwa nie sumują się do 1, są często bardzo mały tak: (wynik ten jest na innym zbiorze, nie ma nic wspólnego z powyższym przykładzie)
array([[ 0.00356463, 0.00277259],
[ 0.00315137, 0.00268578],
[ 0.00453343, 0.00157113],
Czy Twoje dwa predyktory to tylko 0 i 1? Jeśli tak, istnieją tylko 4 możliwe kombinacje twoich funkcji, a zatem powinno się oczekiwać (maksymalnie) 4 unikalne przewidywania prawdopodobieństwa. – David
tak, są. Ok, tylko 4 możliwe kombinacje, ma sens, ale nie wiem, jak to odpowiada na moje pytanie. – Italo
Jestem zdezorientowany, jakie jest twoje pytanie? Pomyślałem, że nie rozumiesz, dlaczego w twoich przewidywaniach prawdopodobieństwa było mało różnic. – David