Ich codierte ein kleines Stück Code, um die besten Klassifizierer für einen CDC-Datensatz zu finden. Zuerst habe ich die verschiedenen scikit-learn Klassifikatoren ausprobiert, dann habe ich beschlossen, die TF.Learns (DNNClassifier und LinearClassifier) hinzuzufügen, da die API fast gleich ist.Genauigkeitsproblem mit TF.Learn DNNClassifier und LinearClassifier
Dann, wenn ich die Ergebnisse vergleichen, erreichen alle scikit-lernen Modelle leicht eine Genauigkeit von 60-70% und mit TF.learn DNNClassifiers und LinearClassifier kann ich nicht mehr als 38% tun und braucht viel Zeit (oder sogar hängt, wenn Ich stelle die Anzahl der Schritte beim Anpassen des Modells nicht ein.
Ich habe wahrscheinlich einen Fehler, aber ich sehe es nicht ...
Hier ist der Code-Extrakt:
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2)
for classifier in classifiers:
if classifier == "TF Deep Neural Network":
feature_columns = learn.infer_real_valued_columns_from_input(X_train)
clf = DNNClassifier(feature_columns=feature_columns,
hidden_units=[10,10,10],
n_classes=2, enable_centered_bias=None);
clf.fit(X_train, Y_train, steps=200)
elif classifier == "TF Linear Classifier":
feature_columns = learn.infer_real_valued_columns_from_input(X_train)
clf = LinearClassifier(n_classes=2, feature_columns=feature_columns)
clf.fit(X_train, Y_train, steps=200)
else:
clf = getInstance(classifiers[classifier][0], classifiers[classifier][1], classifiers[classifier][2])
clf.fit(X_train, Y_train)
# predict on test data
prediction = clf.predict(X_test)
# compute accuracy and sum it to the previous ones
accuracy = accuracy_score(Y_test, prediction)
Ergebnisse Extrakt:
classifier Gaussian Naive Bayes accuracy 0.85
classifier K-Nearest Neighbors accuracy 0.87
classifier TF Deep Neural Network accuracy 0.4
classifier Random Forest accuracy 0.85
classifier TF Linear Classifier accuracy 0.4
classifier Decision Tree accuracy 0.87
classifier Neural Network accuracy 0.4
classifier AdaBoost accuracy 0.86
classifier Linear Support Vector Machine accuracy 0.88
classifier Radial Basic Function Support Vector Machine accuracy 0.74
Voll Code hier: https://github.com/shazz/gender_classification_challenge/blob/master/demo_with_BRFSS_and_TF.py
Also, irgendwelche Erkenntnisse darüber, warum die Genauigkeit so niedrig ist (und viel braucht Zeit zu passen) mit TF.Learn wird geschätzt!
UPDATE basierend auf Antwort des Kumara
I modifiziert, um die Etiketten 0 oder 1 (und nicht 1 und 2, wie in der ursprünglichen CDC Datensatz) zu sein, und ich lief wieder die Klassifizierer-Tests. Die neuen Ergebnisse sind:
classifier AdaBoost accuracy 0.87
classifier Linear Support Vector Machine accuracy 0.86
classifier K-Nearest Neighbors accuracy 0.86
classifier Gaussian Naive Bayes accuracy 0.85
classifier Random Forest accuracy 0.85
classifier Radial Basic Function Support Vector Machine accuracy 0.83
classifier Decision Tree accuracy 0.83
classifier Neural Network accuracy 0.64
classifier TF Deep Neural Network accuracy 0.63
classifier TF Linear Classifier accuracy 0.62
Also immer noch ziemlich hinter dem scikit lernen Klassifikatoren. Was sinnvoll ist, ist, dass der DNNClassifier so "schlecht" ist wie der scikit learn Multilayer Perceptron Klassifikator.
Denkst du, dass angesichts der Art der Daten und der Klassifikatoren das TF.Learn DNNClassifier und LinearClassifier keine gute Genauigkeit haben?
Können Sie längere Zeit (mehr Schritte) versuchen und sehen, ob die Ergebnisse konsistent sind? 200 Schritte scheint furchtbar wenig. – sygi
Ich habe gerade versucht mit 5000 Schritten, das gleiche Ergebnis, etwa 34% Genauigkeit (aber jetzt dauert 5s zu berechnen im Vergleich zu sofortigen Ergebnissen von scikit lernen Klassifikatoren) – Shazz
Nur neugierig, was tf.learns RandomForestEstimator gibt Ihnen? Es hat eine etwas andere Verwendung als z.B. den DNNClassifier, schaue Beispiele/random_forest_mnist.py für ein Beispiel an. – jonas25007