A legjobban illeszkedő modell, a jellemzők és permutációk fontossága, valamint a hiperparaméterek hangolása

Háttér

A kezdeti feltáró elemzésemet és a funkciótervezést SQL-ben végeztem. Előző cikkemben bemutattam, milyen erős lehet az SQL a relációs adatbázisokban lévő adatok feltárásában. További összefüggésekért érdemes lehet megnézni, mielőtt elolvasná ezt a cikket, bár ez nem kötelező. A cikket "itt" találod!



A „Kaggle Titanic Competition in SQL” cikkben korábban elkészített vonat/teszt adatkészleteket fogom használni az utasok túlélésének előrejelzésére.

Áttekintés

  • Könyvtárak importálása
  • Készítsen képzési és tesztadatkereteket
  • Korrelációs együttható mátrix
  • Segítő funkció létrehozása: Modellstatisztikák kimenete
  • Több felszerelt modell és legjobban illeszkedő modell
  • Segítő funkció létrehozása: Kimeneti RF funkció fontossági rangsorolása
  • Jellemzők kiválasztása véletlenszerű erdőelemek fontosságával, permutáció fontosságával és hierarchikus klaszterezéssel
  • RandomizedSearchCV: Véletlenszerű erdőosztályozó
  • GridSearchCV: Véletlenszerű erdőosztályozó
  • Következtetés: Legfrissebb eredmények és végső gondolatok

Könyvtárak importálása

import numpy as np 
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import Perceptron
from sklearn.linear_model import SGDClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC, LinearSVC
from sklearn.naive_bayes import GaussianNB
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import RandomizedSearchCV, GridSearchCV
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import cross_val_predict
from sklearn.metrics import confusion_matrix
from sklearn.metrics import precision_score, recall_score, roc_auc_score

Készítsen Train & Test adatkereteket

A Pandas segítségével adatkeretként importáltam a CSV fájlokat. A train_df.info() eredménykészlete ismerősnek tűnik, ha elolvassa „Kaggle Titanic Competition in SQL»” cikkemet. A modellképzéshez 15 funkcióval kezdtem, az alábbiak szerint, a Survived és a PassengerId kivételével.

train_df = pd.read_csv(‘file/path/data-train.csv’)
test_df = pd.read_csv(‘file/path/data-test.csv’)

Korrelációs együttható mátrix

Első lépésként egy páronkénti korrelációs mátrixot készítettem a Pandákba és Seabornba épített corr függvény segítségével az adatok megjelenítéséhez. A Pearson korrelációs együtthatókat (lineáris kapcsolatok) számítja ki alapértelmezett módszerként. Használtam a Spearman és a Kendall metódusokat is, amelyek mindkettő elérhető a pandas.DataFrame.corr fájlban.

Az összes eredmény hasonlónak tűnt mindenhol. Viszonylagosan szólva, a „Spearman-féle rangsorrendű korreláció”módszer, amely a monoton kapcsolatokat méri, lehet a legjobb itt anélkül, hogy mélyen belemerülnénk a korreláció és az asszociáció fogalmába a különböző típusú kapcsolatok esetében. jellemzők. Egy figyelmeztetés az, hogy a Spearman a névleges jellemzőket rendes jellemzőként fogja kezelni.

Csak mellékes megjegyzésként, ezen a ponton minden jellemzőmet számértékké alakítottam, amelyek bináris (dichotóm), ordinális (kategorikus és rendezett), nominális (kategorikus és nem rendezett) és folytonos jellemzőkből állnak. Gyorsan meg akartam nézni, hogy milyen jellemzők kapcsolódnak egymáshoz, és milyen nagyságrendűek a nyilvánvalóakon túl.

Ha mélyebben belemerülnék ennek a gyakorlatnak a sajátosságaiba, akkor beszélnünk kell a kategorikus jellemzők és a bináris és folytonos jellemzők közötti korreláció közötti összefüggésekről is. A két névleges jellemző közötti összefüggés mérése során a Cramer-féle V vagy a Pearson-féle khi-négyzet tesztbe kell merülnünk. Mindazonáltal véleményem szerint ennek elég jó megközelítésnek kell lennie ahhoz, hogy egy kezdeti alapértéket leolvassunk. Ha valamiről lemaradtam volna, szóljatok nyugodtan.

Létrehoztam a korrelációs együttható hőtérképét, és figyeltem az abszolút értékekre a 0,8-1,0 korrelációs tartományban. Ezek a korrelációs küszöbértékek önkényesek, és a későbbiekben különféle küszöbértékeket fogok megvizsgálni, hogy meghatározzam, melyik működik a legjobban.

train_corr = train_df.drop(columns=["survived", "passengerid"]).corr(method='pearson')
plt.figure(figsize=(18, 12))
sns.set(font_scale=1.4)
sns.heatmap(train_corr, 
            annot=True, 
            linecolor='white', 
            linewidth=0.5, 
            cmap='magma');

Miután kicsit mélyebben belemerültem a számokba, és 0,8-at használtam Pearson-korrelációs küszöbként, úgy találtam, hogy ezek a párok (lent látható; a df_corr kimenete) erősen korreláltak. Később a Spearmant más módszerekkel is felhasználom, hogy kiválasszam a végső modellem fontos jellemzőit.

# Pearson’s correlation analysis using an arbitrary correlation threshold (absolute values)
corr_threshold = 0.8
train_corr_abs = train_corr.abs()
feature_1 = []
feature_2 = []
corr_coeff = []
for col in train_corr_abs:
    for idx, val in enumerate(train_corr_abs[col]):
        if ((val >= corr_threshold) and (val < 1)):
            feature_1.append(col)
            feature_2.append(train_corr_abs[col].index[idx])
            corr_coeff.append(val)
df_corr = pd.DataFrame({‘feature_1’: feature_1, 
                        ‘feature_2’: feature_2, 
                        ‘corr_coeff’: corr_coeff})
df_corr

Az erősen korrelált párok azonosítása után ez az elemzés később segítséget jelent a regressziós vagy lineáris modellek kezelésében. A magas multikollinearitás azt eredményezi, hogy a jellemzők vagy együtthatóbecslések érzékenyek lesznek a modell kis változásaira. Ez a „nem lineáris modellekre” is hatással lehet.

A lényeg az, hogy a multikollineáris jellemzők nem hatékony modellt hozhatnak létre, és a jellemzők fontosságának megértése torzulhat. Nem fogom az energiámat az enyhe multikollinearitású párokra összpontosítani. Egyelőre a háttérben maradok, és közvetlenül foglalkozom ezzel a problémával, amikor eljön az ideje.

train_corr = train_df.train_df.drop(columns=["survived",       "passengerid"]).corr(method='spearman')
plt.figure(figsize=(18, 12))
sns.set(font_scale=1.4)
sns.heatmap(train_corr, 
            annot=True, 
            linecolor=’white’, 
            linewidths=0.5, 
            cmap=’magma’)

train_corr = train_df.drop(columns=["survived", "passengerid"]).corr(method='kendall')
plt.figure(figsize=(18, 12))
sns.set(font_scale=1.4)
sns.heatmap(train_corr, 
            annot=True, 
            linecolor=’white’, 
            linewidths=0.5, 
            cmap=’magma’)

Segítő funkció létrehozása: Modellstatisztikák kimenete

Kezdésként kilenc különböző modellt képeztem ki az X_train és az y_train felszerelésével. A munkafolyamat felgyorsítása érdekében létrehoztam egy függvényt, amely a modell teljesítményét és diagnosztikai mérőszámait adja ki, hogy gyorsan megtekinthesse a számokat, és meghatározhassa, melyik modell működhet a legjobban. Ezek a mutatók a függvény docstringjében vannak felsorolva.

Ezenkívül definiáltam egy csővezeték objektumot (27. sor lent), amely egy skálázót és egy becslő példányt tartalmaz. Az X_train és az X_test néhány esetben nem skálázom véletlenszerű erdő használatakor, mert erre nincs szükség.

Több felszerelt modell és legjobban illeszkedő modell

A segítő funkciónak három paramétere van. Először is szüksége van egy szótárra, amelynek kulcsa a modell neve (karakterlánc), értéke pedig a modellosztály példányszáma. Másodszor, szüksége van a jellemző betanítási adatkészletre (X_train) és végül a célosztály adataira (y_train). Vizsgáljuk meg az eredményeket!

A véletlenszerű erdő és döntésfa azonnal 98,54%-os pontossággal kiemelkedett a többi közül. Tudom, hogy a döntési fa hajlamos túlilleszkedni, ezért nem lepődtem meg túlságosan. Másrészt a véletlenszerű erdő olyan döntési fák együttese, amelyek célja a túlillesztés minimalizálása azáltal, hogy a jellemzők és sorok véletlenszerű részhalmazát veszi fel a döntési fák erdőjének létrehozásához, és szavaz az előrejelzési eredményekről. Ez a véletlenszerű folyamat jobb modellt hoz létre nagyobb torzítással és kisebb varianciával.

Közelebbről megvizsgálva, a 10-es Kfold-os keresztellenőrzést alkalmazó pontossági pontszámok reálisabb pontszámot generáltak: 84,07% a véletlenszerű erdők és 81,3% a döntési fa esetében. Más modellek is kiemelkedtek a KNN, az SVM, a logisztikai regresszió és a lineáris SVC, minden tiszteletreméltó pontszámmal. A nagy szórás olyan modellt jelez, amely új adatokkal esetleg nem általánosítható jól, ezért erre is figyeltem.

Nézzük meg közelebbről a pontosságot és az emlékezést. Ebben az esetben volt értelme maximalizálni a precizitást és a visszahívást is, és a magas F1-es pontszám ezt jelzi. Bár van egy precíziós visszahívás kompromisszum, a viszonylag nagy pontosság [TP/(TP+FP)] megadja számomra a pozitív előrejelzések pontosságát. Ezzel szemben a viszonylag magas visszahívás [TP/(TP+FN)] a modell által helyesen észlelt tényleges pozitívumok %-át adja meg. A visszahívást True Positive Rate (TPR) és érzékenységnek is nevezik. Ezenkívül magas AUC-t akartam a ROC görbe alatt. Ennek eredményeként leszűkítettem a listát négy modellre – véletlenszerű erdő, KNN, logisztikai regresszió és lineáris SVC.

Végül a véletlenszerű erdő mellett döntöttem, bár más modellek valamivel jobb eredményeket értek el. Az apró különbségek elhanyagolhatónak tűntek a szememben. A cél az, hogy a véletlenszerű erdő szennyeződéseken alapuló jellemzőinek és permutációinak fontosságát kihasználjuk a jellemzők kiválasztásának folyamatában.

Segítő funkció létrehozása: Kimeneti RF funkció fontossági rangsorolása

A funkciók fontossági rangsorának véletlenszerű erdő segítségével történő gyors megjelenítéséhez létrehoztam egy segítő függvényt. Egy Pandas adatkeretet ad ki a jellemzők neveivel és a hozzájuk tartozó fontossági pontszámokkal, rangsorolt ​​sorrendben.

Funkciók kiválasztása RF funkciók fontosságával, permutáció fontosságával és hierarchikus klaszterezéssel

1. iteráció

Visszatérve a korrelációs együttható mátrixra, öt pár volt megjelölve erősen korrelált vagy egymással asszociáltként. Az X_train és X_test által definiált összes jellemzővel, amint az alább látható, megvizsgáltam az RF jellemzőinek és permutációinak fontosságát. Hierarchikus klaszterezést és Spearman-féle korrelációs mátrixot is használtam a jellemzők kiválasztásához.

X_train = train_df.drop([“survived”, “passengerid”], axis=1)
y_train = train_df[“survived”]
X_test = test_df.drop([“passengerid”], axis=1)
rf_base = RandomForestClassifier(n_estimators=100, random_state=0)
rf_base.fit(X_train, y_train)
n = len(X_train.columns)
importance_scores = rf_base.feature_importances_
rf_feature_ranking(n, importance_scores)

Az RF funkció fontossága szilárd kiindulópont a fontos tulajdonságok felméréséhez, de nem mindig ad határozott képet a fontosságról, és félrevezető lehet. Az RF funkció fontosságának mögöttes mechanizmusa torz. Hajlamos túlbecsülni bizonyos jellemzők jelentőségét, mint például a folyamatos vagy magas kardinalitású kategoriális jellemzők. Dióhéjban a szennyeződés csökkenését minden egyes jellemzőre átlagoljuk a döntési fák erdejében, majd ezen átlagolt érték alapján rangsoroljuk a jellemzőket. Itt van egy jó "olvasni" erről és "erről" és "erről"!

A kollineáris funkciók is problémát jelentenek majd. Ezért, ha csak az RF átlagos csökkenését használjuk a szennyeződéseken alapuló jellemzők fontosságában, akkor ez nem mutatja meg a teljes képet, és ez egy eszköz a sok közül a funkciók fontosságának jobb megértéséhez.

Aggodalmam ezen a ponton a kollineáris jellemzők miatt van. Ennek eredményeként a permutáció fontosságát és a hierarchikus klaszterezést kihasználom annak meghatározására, hogy mely jellemzők relevánsak. Koncepcionálisan a permutáció fontosságában a jellemzők alappontosságát számítja ki egy érvényesítési halmaz segítségével. Ezután módosítja egyetlen oszlop/szolgáltatás összes értékét, és a tesztadatkészlet segítségével méri a változást az alapvonal pontosságához képest. Ez minden funkciónál megismétlődik.

Kutatásom során a Scikit-Learn webhelyén egy informatív cikkre bukkantam ebben a témában. Felhasználom az itt található kódot, és befejezem a funkció kiválasztásának folyamatát. Ezenkívül a domain ismeretekre és az irányított próba és hiba módszerre támaszkodok, hogy megtudjam, mely funkciók kombinációi adják a legjobb eredményt.

A permutáció fontossága viszonylag megbízhatóbb, mint a jellemző fontossága, bár az előbbit a kollineáris jellemzők is befolyásolják, és növelik az érintett jellemzők fontosságát. Az egyik elfogadható ajánlás a két kezdeti nézetből az volt, hogy az is_alone, is_mix_group és is_one_family nem adnak sok értéket a modellhez.

Hierarchikus klaszterezés esetén a dendrogram y tengelye közelséget vagy eltérést jelöl. Ahogy közeledik a 0-hoz, annál közelebb kerül a távolság a korrelációt/asszociációt jelző fürtözött jellemzők között. Ebben az iterációban megvizsgáltam az összes klasztert, amely 1,5 - egy tetszőleges küszöb alá esik. Az itt használt kódrészlet a S«cikit-Learn honlapján is elérhető.

A dendrogram segítségével közelebbről megvizsgáltam a két jellemzővel rendelkező kisebb klasztereket (pl. pclass és cabin_level), és heurisztikusan meghatároztam, hogy mely jellemzőket kell esetleg eldobni. Úgy döntöttem, hogy csökkentem az életkort, mert nagyon közel van az age_buckethez, és ez egy folyamatos funkció. Ezen túlmenően úgy döntöttem, hogy elhagyom a szexet és a viteldíjat, mert ezek egymással összefüggő jellemzői egyformán hozzájárulnak a modellhez. Ennek eredményeként a következő iterációban összesen 7 funkció került kihagyásra: életkor, nem, viteldíj, is_alone, is_mix_group és is_one_family

2. iteráció

Nézzük a frissített eredményeket. Ebben az iterációban 9 funkcióval dolgoztam, amelyek az új X_train-t és X_test-et képviselik.

Az output_model_stats függvényt használtam a teljesítménymutatók összehasonlítására az eredeti véletlenszerű erdőmérőkkel. A 2. iteráció mérőszámai az „rf_base — iteration 2” indexhez vannak csatolva. Összességében a modell valamivel gyengébb teljesítményt nyújtott, mint az összes funkcióval rendelkező modell. Valószínűleg az első véletlenszerű erdőmodell túlillesztés volt (viszonylag alacsony torzítás és nagy variancia), és ebben a szakaszban nem kell aggodalomra ad okot.

A frissített funkció és permutáció fontossági rangsora alapján az embarked mindkettőben nagyon közel volt a nullához. Úgy döntöttem, hogy a következő iteráció során elhagyom ezt a funkciót.

Úgy döntöttem, hogy elhagyom a fare_bucket és az age_bucket értéket. Véleményem szerint az átlagos viteldíj_per_utas-számítás, amelyet a viteldíjcsoportok létrehozásához használtak, valószínűleg nem tartalmazott elegendő adatot a képzési adatokban meghúzódó kút és díjkiugró értékek általánosításához.

Hasonló logikus gondolkodás esett az age_bucket-re, miután megfigyeltük, hogy a permutáció fontosságát használó pclass és is_woman_child milyen előkelő helyen szerepel. Ugyanakkor a viteldíj_vörös és az age_bucket korrelált egymással. Az intuícióm azt súgta, hogy ezeknek a jellemzőknek a megtartása nagy valószínűséggel csökkenti a torzítást és növeli a szórást. Ezért a modell általánosítási hatékonysága csökkenne.

Ahogy a dendrogram is mutatja, az első klaszter balról 0,5 alatt a pclass és a cabin_level elemekből áll. A pclass és a cabin_level közötti távolság nagyon közel van, és a Spearman-féle korrelációs mátrix azt mutatja, hogy ezek korrelálnak. Haboztam a pclass vagy az is_woman_child elhagyása mellett, mert mindkét tulajdonság magas korrelációt mutatott az utasok túlélésével a feltáró elemzésem során.

A véletlenszerű erdő „véletlenszerűsége” a gyökércsomópontok létrehozása és a belső és levélcsomópontok létrehozása érdekében történő felosztás csökkenti a kollineáris jellemzők hatásait, de soha nem teljesen. Véleményem szerint ebben a forgatókönyvben nem árt mindkét kollineáris jellemzőt véletlenszerű erdő használatával használni.

3. iteráció

A frissített X_train és X_test adatkészletek ebben a szakaszban 5 funkciót tartalmaznak, amelyeket a leginkább relevánsnak ítéltem meg.

Ezután kiadtam a teljesítménymutatókat („rb_base – 3. iteráció”), és összehasonlítottam őket a korábbi eredményekkel. Az accuracy_cv_score magasabb volt, mint az előző két iterációnál. A pontosság némileg javult, ami azt jelentette, hogy a modell által észlelt összes pozitívon (TP + FP) több valódi pozitív (TP) található. Ez jó jel volt. A visszahívás a vártnak megfelelően kissé visszaesett, ami azt jelentette, hogy a modell azon képessége, hogy észlelje a valódi pozitívakat (TP) a tényleges valódi pozitívumok (TP + FN) között, kissé csökkent. Az F1 pontszám javult a 2. iterációhoz képest, és a ROC görbe alatti AUC új csúcsra emelkedett.

Miután közelebbről megvizsgáltam a jellemzők fontosságát, a permutáció fontosságát és a dendrogramot a Spearman-féle korrelációs mátrix kíséretében, úgy döntöttem, hogy ezek a jellemzők generálják az első Kaggle benyújtási fájlomat. Ezen a ponton nem aggódtam egyetlen pár kapcsolódó tulajdonság miatt.

Kiadtam az előre jelzett y_tesztet (y_pred_base) a betanított modell segítségével X_testtel. Létrehoztam a benyújtási fájlomat, és elküldtem a Kaggle-nek. Ezzel a beadvánnyal 80,382%-os pontosságot tudtam elérni. Szerintem ez egy igen tekintélyes eredmény.

rf_base = RandomForestClassifier(n_estimators=100, random_state=0)
rf_base.fit(X_train, y_train)
y_pred_base = rf_base.predict(X_test)
df_output = pd.concat([test_df[‘passengerid’], y_pred_df], axis=1, sort=False)
df_output = df_output.rename(columns={“passengerid”: “PassengerId”})
df_output.to_csv(‘gender_submission.csv’, index=False)

RandomizedSearchCV: Véletlenszerű erdőosztályozó

A RandomizedSearchCV jó magyarázata megtalálható a Scikit-Learn dokumentációs oldalán. Jó ismerni a Python megközelítését az OOP-hoz. A Scikit-Learn modellosztály objektumai paramétereket, attribútumokat és metódusokat tartalmaznak.

„Az ezen módszerek alkalmazásához használt becslő paramétereit a paraméterbeállításokon keresztül végzett keresztellenőrzés optimalizálja.

A GridSearchCV-vel ellentétben nem minden paraméterértéket próbálunk ki, hanem fix számú paraméterbeállítást mintát veszünk a megadott disztribúciókból. A kipróbált paraméterbeállítások számát az n_iter adja meg.

Ha az összes paramétert listaként jelenítjük meg, akkor csere nélküli mintavétel történik. Ha legalább egy paramétert eloszlásként adunk meg, akkor a mintavételezést helyettesítéssel alkalmazzuk. Folytonos paramétereknél erősen ajánlott a folyamatos eloszlás használata.”

Az rs_grid változó alatt felsorolt ​​6 hiperparaméterre összpontosítok. Az összes paraméter részletes áttekintése érdekében a dokumentációs oldal rengeteg információt tartalmaz.

Véletlenszerű erdő hiperparaméterek

  • n_estimators:Ez számos döntési fát jelöl az erdőben. Az alapértelmezett érték n_estimators=100.
  • kritérium:Ez a függvény a felosztás minőségét méri. Például az életkor olyan jellemző, amely gyökércsomópont is lehet. A felosztási kritériumok alapján belső és levélcsomópontokra oszlik mindaddig, amíg a fa növekedése le nem áll, amikor egy ág eléri a legalacsonyabb gini-szennyezést (az alapértelmezés szerint a gini, a második lehetőség pedig az entrópia információszerzés céljából).
  • max_features:A funkciók véletlenszerű részhalmazának száma, amelyet figyelembe kell venni a legjobb felosztás keresésekor.
  • max_depth: A fa maximális mélysége. Ha nincs, akkor a csomópontok addig bővülnek, amíg az összes levél tiszta nem lesz, vagy amíg az összes levél kevesebb mint min_samples_split mintát tartalmaz.
  • min_samples_split: A belső csomópont felosztásához szükséges minták minimális száma.
  • min_samples_leaf: A minták minimális száma ahhoz, hogy egy levél csomópontja legyen. A tetszőleges mélységben lévő felosztási pontot csak akkor veszi figyelembe a rendszer, ha legalább min_samples_leaf képzési mintát hagy a bal és a jobb oldali ágak mindegyikében.

RandomizedSearchCV paraméterek

  • becslő: a modellosztály példányosítása a legjobb paraméterek véletlenszerű kereséséhez.
  • param_distributions: Szótár paraméternevekkel (str) kulcsként és disztribúciókkal vagy paraméterlistákkal, amelyeket ki kell próbálni.
  • n_iter: A mintavételezett paraméterbeállítások száma.
  • cv: Meghatározza a keresztellenőrzési felosztási stratégiát.
  • bőbeszédű: Szabályozza a bőbeszédűséget; minél nagyobb a bőbeszédűség száma, annál hosszabbak a kimeneti/naplóüzenetek.
  • random_state: Az álvéletlenszám-generátor állapota a lehetséges értékek listáiból történő véletlenszerű egyenletes mintavételhez használt scipy.stats eloszlások helyett.
  • n_jobs: A párhuzamosan futtatandó jobok száma. A None értéke 1, hacsak nem joblib.parallel_backend kontextusban. A -1 az összes processzor használatát jelenti.

A véletlenszerű keresés körülbelül 5 percig tartott teljes processzorteljesítményem felhasználásával (n_jobs=-1). A param_distributions 8232 beállítási kombinációt tartalmaz (7*2*2*7*7*6). A véletlenszerű kereséshez a cv-t 5-re állítottam, ami megegyezik a rétegzett Kfoldok számával. Ezért ha a GridSearchCV-vel kezdeném, összesen 41 160 paraméterbeállítást vagy illesztést próbálnának ki. Ennek futtatása nagyon hosszú ideig tartana. A RandomizedSearchCV-vel azonban n_iter=200 mintát vesz az összes lehetséges beállításból, így ebben az esetben 1000-re csökkenti a feladatok vagy illesztések számát. Íme a véletlenszerű keresés legjobb hiperparaméter-értékei.

Hasonlítsuk össze az előző futásaim eredményeit. Az accuracy_cv_score körülbelül 1,1%-kal nőtt, az accuracy_cv_stddev pedig körülbelül 4%-ra csökkent. A precíziós pontszám is javult (91,47%), miközben a visszahívás kissé csökkent. Az összesített F1-es pontszám javult. Az AUC pontszám stabilan 89%-on állt. Az eddig tanultak felhasználásával a cél az, hogy rácskeresést hajtsunk végre egy kisebb beállításkészleten, és mérjük az „inkrementalitást”.

GridSearchCV: Véletlenszerű erdőosztályozó

A GridSearchCV hasonló a RandomizedSearchCV-hez, azzal a különbséggel, hogy kimerítő keresést végez a modell hiperparamétereinek meghatározott halmaza alapján (GridSearchCV param_grid). Más szóval, felülről végigmegy az összes 41 160 illesztésen. Azonban kihasználom a korábbi tanulságokat, és csökkentem az egyes hiperparaméterek értéklistáját. A GridSearchCV paramétereinek részletes áttekintéséhez vessen egy pillantást a dokumentációs oldalra.

"A módszerek alkalmazásához használt becslő paramétereit keresztellenőrzésű rácskereséssel optimalizálják egy paraméterrácson keresztül."

Összességében nem volt sok javulás, kivéve az AUC enyhén emelkedett. Akárhogy is, ez bebizonyította, hogy a megfelelő hiperparaméter-készlet hangolása és a beállítások széles skálájának lefedése javíthatja a modell előrejelzéseit. Ezért a RandomizedSearchCV és a GridSearchCV kihasználásának megtanulása a gépi tanulási munkafolyamat fontos részévé válik. Ugyanakkor azt is tudnod kell, hogy mennyi időt és energiát szeretnél a hangolási folyamatba fektetni, mert a nyereség minimális lehet.

Utolsó lépésként létrehoztam a frissített benyújtási fájlt, és elküldtem a Kaggle-nek. Még a hiperparaméter-hangolás mellett is 80,382% maradt a pontszámom ennél a szolgáltatáskészletnél és az optimalizált hiperparaméterkészletnél.

Következtetés

Legfrissebb eredmények

Próba és hiba módszerekkel és a hiperparaméterek beállításainak bővítésével elértem a jelenlegi 80,861%-os állandó pontszámot, ami Kaggle szerint a felső 6%-ba esik. Véleményem szerint ez egy elég szilárd eredmény.

Végső gondolatok

  • Ez a projekt megerősítette azt az elképzelést, hogy a funkciótervezés erőteljes. A túlélés előrejelzésére használt hat jellemző közül öt olyan mérnöki jellemző volt, amelyek olyan információkat rögzítettek, amelyeket az eredeti jellemzők nem tudtak.
  • Ezenkívül hasznos volt a megfelelő kontextus (a Titanicról olvasni) a témával kapcsolatban, ami segített a feltáró elemzési szakaszban.
  • Ha elegendő időt fordítottunk az adatok felfedezésére (szeletelésre és kockára vágásra), ez segített az intuíció kialakításában, ami segített a funkciók tervezésében, az adathalmaz összesítésében és csoportosításában.
  • Ahogy ezek a darabok a helyükre kerültek, az olyan technikák, mint a rácskeresés és a véletlenszerű keresés segítettek a modell fokozatos javításában.
  • Végül úgy gondolom, hogy nem tudjuk könnyen figyelmen kívül hagyni a tartományismeret és az irányított próba és hiba jelentőségét a gépi tanulásban. Ezekből bemenetek készíthetők, és a modellek segíthetnek számszerűsíteni fontosságukat.

Nyugodtan ossza meg észrevételeit, visszajelzéseit és/vagy kérdéseit. Ha érdekli a feltáró elemzés és a funkciótervezés, tekintse meg első cikkemet – „Kaggle Titanic Competition in SQL”. Köszönöm, hogy elolvasta!



Erőforrások

Ezt a három könyvet ajánlom, ha jó kézikönyveket keres a gépi tanulásról, adatelemzésről és Python programozási készségeinek fejlesztéséről.

  • „Kézi gyakorlati gépi tanulás a Scikit-Learn, Keras és TensorFlow segítségével: koncepciók, eszközök és technikák az intelligens rendszerek felépítéséhez, 2. kiadás”
  • „Python adatelemzéshez: adatviszály Pandákkal, NumPy-vel és IPython 2nd Edition”
  • „Fluent Python: világos, tömör és hatékony programozás, 1. kiadás”