Я создаю приборную панель с приборной панелью для моделей классификации sklearn.Я хочу построить кривую roc и некоторые индикаторы для оценки модели (, как показано на этом изображении ).
проблема в том, что тире не разрешено более одного выхода, поэтому у меня естьдва решения:
Я сгенерирую модель снова (и это будет стоить много времени)
или просто используйте pickle для сохранения созданного sklearnмодель.но когда я загружаю протравленную модель, результаты отличаются, как это показано на рисунке, например: исходный AUC (Площадь под кривой) = 0,7 и из выбранного файла = 0,93.Я пытаюсь сделать то же самое с joblib, но та же проблема.
Простите, это пример кода, потому что он очень длинный:
@app.callback(Output('modelReport', 'rows'),
[Input('report', 'n_clicks'),
Input('model', 'value'),])
def modelClassifierReport (button, mod):
if (button ==None):
return [{}]
else:
## saving and generating models ###
if (mod == 'logreg'):
Title='Logistic regression'
logreg = LogisticRegression()
logreg.fit(x_train,y_train)
model=logreg
with open("python_logreg_model.pkl", "wb") as file_handler:
pickle.dump(logreg, file_handler)
elif (mod =='mlp' ):
mlp=MLPClassifier()
mlp=mlp.fit(x_train, y_train)
with open("python_mlp_model.pkl", "wb") as file_handler:
pickle.dump(mlp, file_handler)
model=mlp
elif :
.......#other models#
####------------###
#### comput indicator to evaluate models ####
####------------###
report=pd.DataFrame({'creteria':['Accuracy','erreur I','erreurII' ,'AUC','CV ACU','AIC','som error']})
report['Value']=[model_score,fnr,fpr,AUC, cv_mean,AIC,RSS]
return report.to_dict('records')
#####################
@app.callback(Output('my-graph', 'figure'),
[Input ('roc','n_clicks'),])
def RocPlot (button):
if (button ==None):
return [{}]
else:
### loading models
if(mod == 'logreg'):
with open("python_logreg_model.pkl", "rb") as file_handler:
model = pickle.load(file_handler)
elif (mod=='mlp' ):
with open("python_mlp_model.pkl", "rb") as file_handler:
model = pickle.load(file_handler)
#### load other models ####
####------------###
####------------###
fp, tp, threshold= metrics.roc_curve(y_test, model.predict_proba(x_test)[:,1])
AUC= metrics.auc(fp, tp)
lw = 2
trace1 = go.Scatter(x=fp, y=tp,
mode='lines',
line=dict(color='darkorange', width=lw),
name='ROC curve (area = %0.2f)' % AUC )
trace2 = go.Scatter(x=[0, 1], y=[0, 1],
mode='lines',
line=dict(color='navy', width=lw, dash='dash'),
showlegend=False)
layout = go.Layout(title='Receiver operating characteristic example',
xaxis=dict(title='False Positive Rate'),
yaxis=dict(title='True Positive Rate'))
print('plot done')
return{ 'data': [trace1, trace2], 'layout': layout }
какя могу решить эту проблему с маринованными моделями?Есть ли другой способ сохранить модели Sklearn?любое предложение?