每次运行代码

时间:2017-01-30 02:57:18

标签: python scikit-learn decision-tree

在Udacity的机器学习入门课程中,我发现每次运行代码时我的代码结果都会发生变化。正确的值是acc_min_samples_split_2 = .908和acc_min_samples_split_2 = .912,但是当我运行我的脚本时,有时acc_min_samples_split_2 = .912的值也是如此。这在本地计算机和Udacity中的Web界面上都会发生。为什么会发生这种情况?

该程序使用SciKit Learn库进行python。 这是我写的代码的一部分:

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()

1 个答案:

答案 0 :(得分:0)

scikit-learn中的一些分类器具有随机性,使用一些PRNG在内部生成随机数。

DecisionTree就是其中之一。检查文档并使用参数random_state使随机行为确定性。

只需创建适合对象,如:

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

如果您不提供random_state或某些种子/整数,就像我上面的示例一样,PRNG将由一些外部来源(很可能基于系统时间)生成在该脚本的运行中有不同的结果。*

两次运行,共享代码和给定常量将表现相同(忽略一些病态架构/平台的东西)。