<jupyter_start><jupyter_text>Balans zmiennej celu<jupyter_code>sns.countplot(x = "RainTomorrow", data=data)<jupyter_output><empty_output><jupyter_text>Zmienna celu jest dość słabo zbalansowana. Jednakże, jako że ta praca domowa ma na celu sprawdzenie algorytmów na danych jakie były dostarczone, nie będziemy stosować dla zbalansowania np. oversamplingu, za to przy analizie wyników zwrócimy uwagę na miarę f1 rezultatu, aby wziąć pod uwagę przewidywanie mniej licznej klasy.  Podział zbioru i modele  Podział zbioru<jupyter_code>X_train, X_test, y_train, y_test = train_test_split(data.drop("RainTomorrow", axis=1), 
                                                    data["RainTomorrow"], stratify = data["RainTomorrow"],
                                                    test_size = 0.2)<jupyter_output><empty_output><jupyter_text>Za zbiór testowy przyjmujemy losowe 20% rekordów. Dla zbioru testowego będziemy liczyć accuracy i miarę f1. Sprawdzimy też accuracy dla zbioru treningowego, aby upewnić się, że nie mamy przeuczenia. Wyliczymy również wartość pola pod krzywą AUC.    RandomForest<jupyter_code>clf = RandomForestClassifier(n_estimators=10000, max_depth=2, class_weight="balanced").fit(X_train, y_train)
y_pred = clf.predict(X_test)
fpr, tpr, thresholds = metrics.roc_curve(y_test, y_pred)
print(f"Train accuracy: {round(100 * clf.score(X_train, y_train), 2)}%")
print(f"Test accuracy:  {round(100 * accuracy_score(y_test, y_pred), 2)}%")
print(f"Test f1 score:  {round(100 * f1_score(y_test, y_pred), 2)}%")
print("Area under ROC curve: " + str(round( metrics.auc(fpr, tpr), 2)))<jupyter_output>Train accuracy: 75.44%
Test accuracy:  74.72%
Test f1 score:  57.91%
Area under ROC curve: 0.76<jupyter_text>XGboost<jupyter_code>clf_2 = xgb.XGBClassifier(booster = "gbtree").fit(X_train, y_train)
y_pred = clf_2.predict(X_test)
fpr, tpr, thresholds = metrics.roc_curve(y_test, y_pred)
print(f"Train accuracy: {round(100 * clf_2.score(X_train, y_train), 2)}%")
print(f"Test accuracy:  {round(100 * accuracy_score(y_test, y_pred), 2)}%")
print(f"Test f1 score:  {round(100 * f1_score(y_test, y_pred), 2)}%")
print("Area under ROC curve: " + str(round( metrics.auc(fpr, tpr), 2)))<jupyter_output>Train accuracy: 91.22%
Test accuracy:  85.63%
Test f1 score:  63.17%
Area under ROC curve: 0.75<jupyter_text>Logistic Regresion<jupyter_code>clf_3 = LogisticRegression(max_iter=1000, class_weight="balanced").fit(X_train, y_train)
y_pred = clf_3.predict(X_test)
fpr, tpr, thresholds = metrics.roc_curve(y_test, y_pred)
print(f"Train accuracy: {round(100 * clf_3.score(X_train, y_train), 2)}%")
print(f"Test accuracy:  {round(100 * accuracy_score(y_test, y_pred), 2)}%")
print(f"Test f1 score:  {round(100 * f1_score(y_test, y_pred), 2)}%")
print("Area under ROC curve: " + str(round( metrics.auc(fpr, tpr), 2)))<jupyter_output>Train accuracy: 80.42%
Test accuracy:  79.53%
Test f1 score:  62.45%
Area under ROC curve: 0.79
{'fraction_non_alphanumeric': 0.12670765027322403, 'fraction_numerical': 0.03961748633879782, 'mean_word_length': 5.537946428571429, 'pattern_counts': {'":': 0, '<': 18, '<?xml version=': 0, '>': 18, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 4, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '75584', 'license': 'Apache-2.0', 'n_tokens_mistral': 1256, 'n_tokens_neox': 1170, 'n_words': 259, 'path': 'Prace_domowe/Praca_domowa3/Grupa2/PrzybylinskiDawid/PD3.ipynb', 'repo_name': 'niladrem/2020L-WUM', 'size': '2928'}