[PYTHON] (Kaggle) Titanic Survivor Prediction Model Beurteilte Auswirkung der Anpassung zufälliger Waldparameter

1. Zuallererst

Als Tutorial zum Erlernen des maschinellen Lernens werde ich als Erinnerung die Methode aufzeichnen, mit der ich die Überlebenden der Titanic vorhergesagt habe. Dies ist ein Muss für alle.

Das letzte Mal wurde die Überlebensvorhersage der Titanic von einem zufälligen Wald gemacht. Wir haben die Auswirkung der Änderung der zu diesem Zeitpunkt verwendeten Parameter auf die Genauigkeitsrate bewertet.

Das gesamte Programm finden Sie weiter unten.  https://qiita.com/Fumio-eisan/items/77339fc737a3d8cfe179

2 Zufällige Folgenabschätzung für Waldparameter

Random Forest ist ein Algorithmus, der mehrere Entscheidungsbäume erstellt und eine Mehrheitsentscheidung trifft, um das Übertraining der Entscheidungsbäume auszugleichen.

Als sein Merkmal

    1. Es ist unwahrscheinlich, dass es zu einem Überlernen kommt, da das Ensemble durch Mehrheitsentscheidung gelernt wird
  1. Keine Notwendigkeit für Feature-Standardisierung oder Normalisierungsverarbeitung
    1. Es gibt nur wenige Hyperparameter (über die Anzahl der Stichproben und die Anzahl der Merkmale des bestimmten Baums).
  2. Sie können wissen, welche Funktion wichtig ist

Und so weiter.

Es scheint, dass es manchmal als robuste verwelkte Technologie bezeichnet wird, im Gegensatz zu glitzernden Technologien wie Deep Running wie neuronalen Netzen. Als Anfänger im maschinellen Lernen möchte ich meine Hände bewegen und das Gefühl überprüfen.

Die Seite, die ich als Referenz verwendet habe http://aiweeklynews.com/archives/50653819.html

2-1 Über den Einfluss von n_estimators


x=[]
y=[]
for i in [1,2,3,4,5,6,7,8,9,10,15,20,25,30,40,50]:
    clf = RandomForestClassifier(
        n_estimators = i ,
        max_depth=5,
        random_state = 0)
    clf = clf.fit(train_X , train_y)
    pred = clf.predict(test_X)
    fpr, tpr , thresholds = roc_curve(test_y,pred,pos_label = 1)
    auc(fpr,tpr)
    accuracy_score(pred,test_y)
    y.append(accuracy_score(pred,test_y))
    x.append(i)
    
plt.scatter(x, y)
plt.xlabel('n_estimators')
plt.ylabel('accuracy')
plt.show()

005.png

n_estimators ist die Anzahl der Entscheidungsbäume. Sie können sehen, dass n_estimators bei etwa 10 gesättigt sind. Wenn Sie es weiter auf 50 erhöhen, hat sich der Wert verringert, ob es sich um ein Überlernen handelt. https://amalog.hateblo.jp/entry/hyper-parameter-search

2-2 Über den Einfluss des Kriteriums


x=[]
y=[]
z=[]
for i in [1,2,3,4,5,6,7,8,9,10,15,20,25,30,40,50,100]:
    clf = RandomForestClassifier(
        criterion='gini',
        n_estimators = i ,
        max_depth=5,
        random_state = 0)
    clf = clf.fit(train_X , train_y)
    pred = clf.predict(test_X)
    fpr, tpr , thresholds = roc_curve(test_y,pred,pos_label = 1)
    auc(fpr,tpr)
    accuracy_score(pred,test_y)
    y.append(accuracy_score(pred,test_y))
    
    clf_e = RandomForestClassifier(
        criterion='entropy',
        n_estimators = i ,
        max_depth=5,
        random_state = 0)
    clf_e = clf_e.fit(train_X , train_y)
    pred_e = clf_e.predict(test_X)
    fpr, tpr , thresholds = roc_curve(test_y,pred_e,pos_label = 1)
    auc(fpr,tpr)
    accuracy_score(pred_e,test_y)
    z.append(accuracy_score(pred_e,test_y))

    x.append(i)
    
plt.xlabel('n_estimators')
plt.ylabel('accuracy')
plt.plot(x,y,label="gini")
plt.plot(x,z,label="entropy")
plt.legend(bbox_to_anchor=(1, 1), loc='center right', borderaxespad=0, fontsize=18)

006.png

Wir haben den Effekt des Unterschieds in der Handhabung der Gini-Funktion und der Informationsentropie bewertet. Wie ich letztes Mal vorgestellt habe, scheint die Gini-Funktion gut in der Regression zu sein und die Informationsentropie ist gut in Kategoriedaten. Wenn die Anzahl der ermittelten Bäume weniger als 10 beträgt, ist der Wert nahezu gleich, und danach wird die Gini-Funktion von 10 auf 40 hoch. Danach stellte sich jedoch heraus, dass die Informationsentropie einen Vorteil hatte. Es gibt etwas, das ich über diesen Faktor nicht verstehe, also werde ich es als meine Hausaufgabe tun. .. ..

http://data-analysis-stats.jp/2019/01/14/%E6%B1%BA%E5%AE%9A%E6%9C%A8%E5%88%86%E6%9E%90%E3%81%AE%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E8%A7%A3%E8%AA%AC/

2-3 Über den Einfluss von ramdom_state


from sklearn.ensemble import RandomForestClassifier
x=[]
y=[]
z=[]
for i in [1,2,3,4,5,6,7,8,9,10,15,20,25,30,40,50,60,70,80,90,100]:
    clf = RandomForestClassifier(
        criterion='gini',
        n_estimators = 10 ,
        max_depth=5,
        random_state = i)
    clf = clf.fit(train_X , train_y)
    pred = clf.predict(test_X)
    fpr, tpr , thresholds = roc_curve(test_y,pred,pos_label = 1)
    auc(fpr,tpr)
    accuracy_score(pred,test_y)
    y.append(accuracy_score(pred,test_y))
    
    clf_e = RandomForestClassifier(
        criterion='entropy',
        n_estimators = 10 ,
        max_depth=5,
        random_state = i)
    clf_e = clf_e.fit(train_X , train_y)
    pred_e = clf_e.predict(test_X)
    fpr, tpr , thresholds = roc_curve(test_y,pred_e,pos_label = 1)
    auc(fpr,tpr)
    accuracy_score(pred_e,test_y)
    z.append(accuracy_score(pred_e,test_y))

    x.append(i)
    
    

plt.xlabel('ramdom_state')
plt.ylabel('accuracy')
plt.plot(x,y,label="gini")
plt.plot(x,z,label="entropy")
plt.legend(bbox_to_anchor=(1, 1), loc='center right', borderaxespad=0, fontsize=18)

007.png

Als nächstes habe ich random_state geändert. Sie können sehen, dass dies nicht ganz stabil ist. Es scheint, dass dies auch in etwa 10-mal gesättigt ist. In erster Linie soll dieser Wert die Reproduzierbarkeit gewährleisten.

https://teratail.com/questions/99054

Die gleiche Zufallszahl kann durch Angabe von> random_state generiert werden. Ziel ist es, die Reproduzierbarkeit zu gewährleisten. Der Grund, warum Zufallszahlen benötigt werden, besteht darin, dass einige der Daten zufällig ausgewählt werden müssen, um schwache Prädiktoren zu erstellen.

3 Zusammenfassung

Aus dieser Bestätigung ging hervor, dass es sich um n_estimators handelt: Die Anzahl der ermittelten Bäume, die die Genauigkeitsrate stark beeinflussen. Es wurde bestätigt, dass durch Eingabe eines großen Wertes bis zu einem gewissen Grad dieser gesättigt wird. Wenn es viel Rechenzeit kostet, muss eine Arbeit hinzugefügt werden, die stoppt, wenn sie automatisch gesättigt wird.

Recommended Posts

(Kaggle) Titanic Survivor Prediction Model Beurteilte Auswirkung der Anpassung zufälliger Waldparameter
Untersuchen Sie die Parameter von RandomForestClassifier im Kaggle / Titanic-Tutorial