<jupyter_start><jupyter_text>Wstęp do Uczenia Maszynowego - Lab 5<jupyter_code>import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
np.random.seed = 42
data = pd.read_csv('heart.csv')
data.head()
y = np.array(data['chd'])
X = data.drop(['chd'],axis=1)
map_dict = {'Present': 1, 'Absent':0}
X['famhist'] = X['famhist'].map(map_dict)
X.head()
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)<jupyter_output><empty_output><jupyter_text>ROC AUC<jupyter_code>from sklearn.metrics import roc_curve, auc

def plot_roc_auc(y_true, y_proba):
    fpr = dict()
    tpr = dict()
    roc_auc = dict()
    fpr, tpr, _ = roc_curve(y_true, y_hat_proba)
    roc_auc = auc(fpr, tpr)

    plt.figure(figsize=(10, 6))
    lw = 2
    plt.plot(fpr, tpr, color='darkorange',
             lw=lw, label='ROC curve (area = %0.2f)' % roc_auc)
    plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
    plt.xlim([0.0, 1.0])
    plt.ylim([0.0, 1.05])
    plt.xlabel('False Positive Rate')
    plt.ylabel('True Positive Rate')
    plt.title('Receiver operating characteristic example')
    plt.legend(loc="lower right")
    plt.show()
y_true = [1,0,0,1]
y_hat_proba = [0.2,0.4,0.6,0.8]
plot_roc_auc(y_true, y_hat_proba)
y_true = [1,1,1,0]
y_hat_proba = [0.2,0.4,0.6,0.8]
plot_roc_auc(y_true, y_hat_proba)
y_true = [0,0,0,1]
y_hat_proba = [0.2,0.4,0.6,0.8]
plot_roc_auc(y_true, y_hat_proba)<jupyter_output><empty_output><jupyter_text>Ensemble Methods  Random ForestNajbardziej popularny algorytm Baggingowy.Cechy:- podstawowym algorytmem jest Drzewo Decyzyjne (wszystkie zalety drzew: obsługa NA)- Do podziału każdego węzła wykorzystujemy losowe zmienne (ilość można wybrać jako hiperparametr)- wbudowana metoda istotności zmiennych<jupyter_code>from sklearn.ensemble import RandomForestClassifier
model_rf = RandomForestClassifier(n_estimators=1000, # Ilość słabych estymatorów
                                  max_depth=2, # Maksymalna wysokość drzewa w słabym estymatorze
                                  min_samples_split = 2, # Minimalna ilość obserwacji wymagana do podziału węzła
                                  max_features = 3, # Maksymalna ilość zmiennych brana pod uwagę przy podziale węzła
                                  random_state=0,
                                  n_jobs = -1)
model_rf.fit(X_train, y_train)
model_rf.score(X_test,y_test)<jupyter_output><empty_output><jupyter_text>BoostingBoosting działa podobnie jak Bagging z jedną różnicą. Każda kolejna próba bootstrap jest tworzona w taki sposób, że losuje z większym prawdopodobieństwiem obserwacje **źle sklasyfikowane**. W skrócie: Boosting uczy się na błędach, które popełnił w poprzednich iteracjach.  AdaBoostNajprostsza metoda boostingowa<jupyter_code>from sklearn.ensemble import AdaBoostClassifier
model = AdaBoostClassifier(random_state=1)
model.fit(X_train, y_train)
model.score(X_test,y_test)<jupyter_output><empty_output><jupyter_text>Gradient BoostingKażdy nowy "słaby" model jest uczony na błędach poprzednich.<jupyter_code>from sklearn.ensemble import GradientBoostingClassifier
model= GradientBoostingClassifier(random_state=1,
                                  learning_rate=0.01)
model.fit(X_train, y_train)
model.score(X_test,y_test)<jupyter_output><empty_output><jupyter_text>XGBoostZaawansowana implementacja Gradient Boostingu<jupyter_code>from xgboost import XGBClassifier # Inna paczka niż sklearn!
model=XGBClassifier(random_state=1,
                    learning_rate=0.01, # Szybkość "uczenia" się
                    booster='gbtree', # Jaki model wykorzystujemy (drzewo - gbtree, liniowe - gblinear)
                    nround = 100, # Ilość itereacji boosingowych
                    max_depth=4 # Maksymalna głębokość drzewa 
                    )
model.fit(X_train, y_train)
model.score(X_test,y_test)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.10391260162601626, 'fraction_numerical': 0.022103658536585365, 'mean_word_length': 3.996192893401015, 'pattern_counts': {'":': 0, '<': 25, '<?xml version=': 0, '>': 25, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 6, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '6', 'dir': 'jupyter-structured-clean-dedup', 'id': '238284', 'license': 'Apache-2.0', 'n_tokens_mistral': 1605, 'n_tokens_neox': 1562, 'n_words': 294, 'path': 'Materialy/Grupa2/lab06/lab06.ipynb', 'repo_name': 'niladrem/2020L-WUM', 'size': '3936'}