每次我 运行 代码时,sklearn 中的决策边界都会发生变化
Decision boundary changing in sklearn each time I run code
在 Udacity 的机器学习简介 class 中,我发现每次 运行 我的代码结果都会发生变化。正确的值是 acc_min_samples_split_2 = .908 和 acc_min_samples_split_2 = .912,但是当我 运行 我的脚本时,有时 acc_min_samples_split_2 = .912 的值也是如此。这发生在我的本地机器和 Udacity 的网络界面上。为什么会发生这种情况?
该程序使用 python 的 SciKit Learn 库。
这是我写的代码的一部分:
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()
scikit-learn 中的某些分类器具有随机性,使用一些 PRNG 在内部生成 random-numbers。
DecisionTree就是其中之一。检查文档并使用参数 random_state
使 random-behaviour 具有确定性。
只需创建您的 fit-object 就像:
clf = tree.DecisionTreeClassifier(min_samples_split = samples, random_state=0) # or any other constant
如果您不提供 random_state
或某些 seed/integer,就像我上面的例子一样,PRNG 将由一些外部源(很可能基于 system-time) 在运行该脚本时会产生不同的结果。*
两次运行,共享代码和给定常量将表现相同(忽略一些病态 architecture/platform 东西)。
在 Udacity 的机器学习简介 class 中,我发现每次 运行 我的代码结果都会发生变化。正确的值是 acc_min_samples_split_2 = .908 和 acc_min_samples_split_2 = .912,但是当我 运行 我的脚本时,有时 acc_min_samples_split_2 = .912 的值也是如此。这发生在我的本地机器和 Udacity 的网络界面上。为什么会发生这种情况?
该程序使用 python 的 SciKit Learn 库。 这是我写的代码的一部分:
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()
scikit-learn 中的某些分类器具有随机性,使用一些 PRNG 在内部生成 random-numbers。
DecisionTree就是其中之一。检查文档并使用参数 random_state
使 random-behaviour 具有确定性。
只需创建您的 fit-object 就像:
clf = tree.DecisionTreeClassifier(min_samples_split = samples, random_state=0) # or any other constant
如果您不提供 random_state
或某些 seed/integer,就像我上面的例子一样,PRNG 将由一些外部源(很可能基于 system-time) 在运行该脚本时会产生不同的结果。*
两次运行,共享代码和给定常量将表现相同(忽略一些病态 architecture/platform 东西)。