Сложенная модель логистической регрессии с рандомизированными переменными - PullRequest
0 голосов
/ 27 января 2019
from sklearn.linear_model import LogisticRegression
from sklearn.feature_selection import chi2
from sklearn.metrics import roc_auc_score
x = np.random.rand(20,100,3) #(There are 20 games, 100 players, 3 score for each game)
y_list = []
for i in range(100):
    if i < 11:
        y = 0
    else:
        y =1
    y_list.append(y)
#10% of players are labelled as 0, 90% of players are labelled as 1

x_all = []
for idx,game in enumerate(x): #for each game
    x_list = []
    for person in game: #for each person
        x_list.append(person) #add game score
    clf = LogisticRegression(solver='lbfgs')
    clf.fit(x_list,y_list) #fit for Logistic regression
    scores, pvalues = chi2(x_list, y_list)
    score = clf.score(x_list,y_list)
    auc=roc_auc_score(y_list, clf.predict_proba(x_list)[:,1]) #calculate AUC for regression
    print('Game : {}, Score : {}, AUC : {}, People : {}'.format(idx,score,auc,len(x_list)))

    if auc > 0: #for all case
        x_all.append(clf.predict_proba(X=x_list)[:,1].flatten()) #save each players predicted probability of each game
x_data= list(map(list, zip(*x_all))) #Transpose
#x_data contains predicted probabilities of each person from each game's logistic regression prediction
clf = LogisticRegression(solver='lbfgs')
clf.fit(x_data,y_list) #fit for Logistic regression
final_score = clf.score(x_data,y_list)
final_auc = roc_auc_score(y_list, clf.predict_proba(x_data)[:,1]) #calculate ensemble AUC 
print('Ensemble Result up to {}, Score : {}, AUC : {}, People : {}'.format(len(x),final_score,final_auc,len(y_list)))

Есть 20 игр, 100 игроков, 3 очка за каждую игру.

Поскольку X создаются случайным образом, после подбора с логистической регрессией AUC от каждой игры очень низкий (около 0,5)

Но, когда я принимаю прогнозируемую вероятность каждого игрока в каждой игре в качестве еще одного X для логистической регрессии (я полагаю, что это метод ансамбля)

, я получаю AUC выше 0,9, что очень высоко.

Я не понимаю, потому что все переменные генерируются случайным образом и нет потерь, обновление веса .... и т. Д.(Все переменные видны только в модели логистической регрессии). Ниже приведен код выше.

Game : 0, Score : 0.89, AUC : 0.5740551583248212, People : 100
Game : 1, Score : 0.89, AUC : 0.6833503575076609, People : 100
Game : 2, Score : 0.89, AUC : 0.6006128702757916, People : 100
Game : 3, Score : 0.89, AUC : 0.6659856996935648, People : 100
Game : 4, Score : 0.89, AUC : 0.7191011235955055, People : 100
Game : 5, Score : 0.89, AUC : 0.6455566905005108, People : 100
Game : 6, Score : 0.89, AUC : 0.5628192032686414, People : 100
Game : 7, Score : 0.89, AUC : 0.6905005107252299, People : 100
Game : 8, Score : 0.89, AUC : 0.7048008171603678, People : 100
Game : 9, Score : 0.89, AUC : 0.6220633299284984, People : 100
Game : 10, Score : 0.89, AUC : 0.6567926455566905, People : 100
Game : 11, Score : 0.89, AUC : 0.7517875383043923, People : 100
Game : 12, Score : 0.89, AUC : 0.5852911133810009, People : 100
Game : 13, Score : 0.89, AUC : 0.7007150153217568, People : 100
Game : 14, Score : 0.89, AUC : 0.5526046986721145, People : 100
Game : 15, Score : 0.89, AUC : 0.5801838610827375, People : 100
Game : 16, Score : 0.89, AUC : 0.6312563840653729, People : 100
Game : 17, Score : 0.89, AUC : 0.6751787538304392, People : 100
Game : 18, Score : 0.89, AUC : 0.7150153217568948, People : 100
Game : 19, Score : 0.89, AUC : 0.5873340143003065, People : 100
Ensemble Result up to 20, Score : 0.89, AUC : 0.9448416751787538, People : 100
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...