Created
March 15, 2019 21:48
-
-
Save uomodellamansarda/606f433405df9e12919e7df95fc44c69 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#Una analisi della correlazione non sarebbe male | |
#Si potrebbe creare un plot che permette di selezionare le variabili | |
#e in funzione di questa ti plotta la correlazione | |
#oltre che a una heat map | |
#Adesso possiamo passare alla parte di Machine Learning | |
#In primis andiamo a definire due funzioni | |
#La funzione get_prediction | |
#Che effettuerà il training sulla base del | |
#classificatore scelto | |
#E la funzione print_scores | |
#Che permetterà di valutare | |
#sulla base di diversi test_score | |
#Il classificatore migliore | |
def get_predictions(clf, count_train, y_train, count_test): | |
# creiamo il classificatore | |
clf = clf | |
# lo alleniamo con i dati di training | |
clf.fit(count_train,y_train) | |
# effettuiamo le predizioni con i dati di test | |
y_pred = clf.predict(count_test) | |
# Calcoliamo la probabilità delle predizioni: y_pred_prob | |
y_pred_prob = clf.predict_proba(count_test) | |
return y_pred, y_pred_prob | |
def print_scores(y_test,y_pred,y_pred_prob): | |
conf_matrix=confusion_matrix(y_test,y_pred) | |
recall= recall_score(y_test,y_pred) | |
precision= precision_score(y_test,y_pred) | |
f1=f1_score(y_test,y_pred) | |
accuracy= accuracy_score(y_test,y_pred) | |
roc= roc_auc_score(y_test, y_pred_prob[:,1]) | |
print('test-set confusion matrix:\n',conf_matrix ) | |
print("recall score: ",recall ) | |
print("precision score: ", precision) | |
print("f1 score: ",f1 ) | |
print("accuracy score: ", accuracy) | |
print("ROC AUC: {}".format(roc_auc_score(y_test, y_pred_prob[:,1]))) | |
kpi=pd.DataFrame([[recall,precision,f1,accuracy,roc]], columns=['Recall','Precision','F1_Score','Accuracy','ROC-AUC']) | |
return kpi | |
#Definiamo la lista dei classificatori che vogliamo valutare | |
list_classifier=[MultinomialNB(),LogisticRegression(),RandomForestClassifier(),RandomForestClassifier(criterion='entropy')] | |
names=['MultinomialNaiveBayes','Logistic Regression', 'Random Forest Classifier', 'Random Forest Classifier crit=Entropy'] | |
#Definiamo la colonna degli output | |
y_name='Occupancy' | |
#Creiamo un df di allenamento rimuovendo la variabile temporale | |
df_train=df_train.drop(['date'], axis=1).copy() | |
#Creiamo un df di test rimuovendo la variabil temporale | |
df_test=df_test.drop(['date'], axis=1).copy() | |
#Definiamo il set di dati di input per l'allenamento | |
X_train=df_train[df_train.columns.difference([y_name])] | |
#Definiamo il set di dati di input per il test | |
X_test=df_test[df_test.columns.difference([y_name])] | |
#Definiamo il set di dati di output per l'allenamento | |
y_train=df_train[y_name] | |
#Definiamo il set di dati di output per il testing | |
y_test=df_test[y_name] | |
print(X_train.describe()) | |
print("len_y train",len(y_train)) | |
print('X Test describe:') | |
print(X_test.describe()) | |
results_df=pd.DataFrame(columns=['Classifier','Recall','Precision','F1_Score','Accuracy','ROC-AUC']) | |
performance=pd.DataFrame() | |
for name, clf in zip(names,list_classifier): | |
print('Classifier used',name) | |
print() | |
y_pred, y_pred_prob = get_predictions(clf, X_train, y_train, X_test) | |
classifier=name | |
loop_performance=pd.DataFrame() | |
loop_performance=print_scores(y_test,y_pred,y_pred_prob) | |
loop_performance['Classifier']=name | |
performance=performance.append(loop_performance) | |
print('__________________') | |
print(performance) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment