#!/usr/bin/env python # coding: utf-8 # In[1]: from datetime import datetime print(f'Päivitetty {datetime.now()}') #

Esimerkki sopivien hyperparametrien etsimisestä

# # Mallille annettavia parametreja on tapana kutsua hyperparametreiksi. # # Testidatan käyttö sopivien hyperparametrien valitsemissa ei ole suotavaa, koska tällöin testidata olisi osittain osallisena mallin opettamiseen. Testidatanhan on tarkoitus olla data, jota malli ei ole "nähnyt" opetuksen yhteydessä. # # Hyperparametrien valitsemisessa voidaan käyttää **GridSearchCV**-toimintoa, joka jakaa opetusdatan opetusdataan ja validointidataan sekä kokeilee vaihtoehtoisia hyperparametrien arvoja. Lue lisää: # # https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html # In[2]: import pandas as pd import seaborn as sns from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.tree import DecisionTreeClassifier from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier # In[3]: df = sns.load_dataset('iris') X = df.drop('species', axis=1) y = df['species'] X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=2) # In[4]: # Määritän käytettävän mallin dtc = DecisionTreeClassifier(random_state=2) # Katson mallin oletushyperparametrit dtc.get_params() # In[5]: # Kokeilen erilaisia päätöspuun haarautumisten lukumääriä parameters = {'max_depth':[1, 2, 3]} # GridSearchCV kokeilee kaikki vaihtoehdot ja valitsee parhaan dtc_grid = GridSearchCV(dtc, parameters, verbose=3) dtc_grid.fit(X_train, y_train) # In[6]: # Katsotaan paras tulos print('best score: ', dtc_grid.best_score_) print('best parameters: ', dtc_grid.best_params_) # Käytetään parhaiksi todettuja hyperparametrien arvoja dtc = dtc_grid.best_estimator_ # In[7]: print(f'Opetusdata {dtc.score(X_train, y_train):.3f}') print(f'Testidata {dtc.score(X_test, y_test):.3f}') # ## Satunnaismetsä # In[8]: # Määritän käytettävän mallin rfc = RandomForestClassifier(random_state=2) # Katson mallin oletushyperparametrit rfc.get_params() # In[9]: # Keskeisimmät parametrit ovat laskettavien päätöspuiden lukumäärä # ja yhteen päätöspuuhun mukaan otettavien selittävien muuttujien lukumäärä parameters = {'n_estimators':[100, 200, 300], 'max_features':[2, 3, 4]} # Kokeilen kaikki vaihtoehdot rfc_grid = GridSearchCV(rfc, parameters, verbose=3) rfc_grid.fit(X_train, y_train) # In[10]: # Katsotaan paras tulos print('best score: ', rfc_grid.best_score_) print('best parameters: ', rfc_grid.best_params_) # Käytetään parhaiksi todettuja hyperparametrien arvoja rfc = rfc_grid.best_estimator_ # In[11]: print(f'Opetusdata {rfc.score(X_train, y_train):.3f}') print(f'Testidata {rfc.score(X_test, y_test):.3f}') # ## Gradienttitehostaminen # In[12]: gbc = GradientBoostingClassifier(random_state=2) gbc.get_params() # In[13]: # Gradienttitehostuksella myös learning_rate on keskeinen parametri # Liian pieni learning_rate johtaa hitaaseen oppimiseen # liian suuri learning_rate voi estää optimiratkaisun löytymisen parameters = {'max_depth':[1, 2, 3], 'n_estimators':[100, 200, 300, 400], 'learning_rate':[0.001, 0.01, 0.1]} gbc_grid = GridSearchCV(gbc, parameters, verbose=3) gbc_grid.fit(X_train, y_train) # In[14]: print('best score: ', gbc_grid.best_score_) print('best parameters: ', gbc_grid.best_params_) # Käytetään parhaiksi todettuja hyperparametrien arvoja gbc = gbc_grid.best_estimator_ # In[15]: print(f'Opetusdata {gbc.score(X_train, y_train):.3f}') print(f'Testidata {gbc.score(X_test, y_test):.3f}')