Skip to content

Instantly share code, notes, and snippets.

@uomodellamansarda
Created March 15, 2019 21:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save uomodellamansarda/606f433405df9e12919e7df95fc44c69 to your computer and use it in GitHub Desktop.
Save uomodellamansarda/606f433405df9e12919e7df95fc44c69 to your computer and use it in GitHub Desktop.
#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