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
Random Forest ist ein Algorithmus, der mehrere Entscheidungsbäume erstellt und eine Mehrheitsentscheidung trifft, um das Übertraining der Entscheidungsbäume auszugleichen.
Als sein Merkmal
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
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()
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
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)
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/
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)
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.
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.