2017-01-30 2 views
0

In Udacitys Intro to Machine Learning-Klasse, ich finde, dass das Ergebnis meines Codes kann jedes Mal ändern, wenn ich es ausführen. Die richtigen Werte sind acc_min_samples_split_2 = .908 und acc_min_samples_split_2 = .912, aber wenn ich mein Skript ausführe, ist manchmal auch der Wert für acc_min_samples_split_2 = .912. Dies geschieht sowohl auf meinem lokalen Rechner als auch auf der Weboberfläche von Udacity. Warum könnte das passieren?Änderung der Entscheidungsgrenze in sklearn jedes Mal, wenn ich Code

Das Programm verwendet die SciKit Learn-Bibliothek für Python. Hier ist der Teil des Codes, die ich schrieb:

def classify(features, labels, samples): 
     # Creates a new Decision Tree Classifier, and fits it based on sample data 
     # and a specified min_sample_split value 
    from sklearn import tree 
    clf = tree.DecisionTreeClassifier(min_samples_split = samples) 
    clf = clf.fit(features, labels) 
    return clf 

#Create a classifier with a min sample split of 2, and test its accuracy 
clf2 = classify(features_train, labels_train, 2) 
acc_min_samples_split_2 = clf2.score(features_test,labels_test) 

#Create a classifier with a min sample split of 50, and test its accuracy 
clf50 = classify(features_train, labels_train, 50) 
acc_min_samples_split_50 = clf50.score(features_test,labels_test) 

def submitAccuracies(): 
    return {"acc_min_samples_split_2":round(acc_min_samples_split_2,3), 
     "acc_min_samples_split_50":round(acc_min_samples_split_50,3)} 
print submitAccuracies() 

Antwort

0

Einige Klassifizierer innerhalb Scikit-Learn sind stochastischer Natur einige PRNG mit intern Zufallszahlen zu erzeugen.

DecisionTree ist einer von ihnen. Überprüfen Sie die Dokumente und verwenden Sie das Argument random_state, um dieses zufällige Verhalten deterministisch zu machen.

Erstellen Sie einfach Ihre fit-Objekt wie:

clf = tree.DecisionTreeClassifier(min_samples_split = samples, random_state=0) # or any other constant 

Wenn Sie oben keine random_state oder einige Samen/integer wie in meinem Beispiel geben, wird die PRNG von einer externen Quelle ausgesät werden (die meisten wahrscheinlich basierend auf der Systemzeit), was zu unterschiedlichen Ergebnissen führt.

Zwei Läufe, die den Code und die gegebene Konstante teilen, verhalten sich gleich (ignorieren einige pathologische Architektur/Plattform-Sachen).

Verwandte Themen