我从数据科学开始,为了取得进展,我刚刚运行了Siraj Raval 的数据科学简介视频中的代码。他实现了一个简单的决策树分类器,但我不禁注意到,给定相同的训练集,分类器并不总是产生相同的预测(显然也不是相同的拟合);我碰巧觉得这很奇怪,因为根据我所学到的,决策树应该是确定性的。
我能想到的唯一可能导致随机性的事情是在某个时候随机选择分支,因为两个选项的值可能相同。我会说这可以通过更多的训练数据来纠正,但即使我再增加 5 个人,也没有任何改变。有人对发生的事情有解释吗?
以下是循环中视频中的代码(Python),用于计算决策树产生了for多少男性和女性的预测。
from sklearn import tree
from sklearn.svm import SVC
n_male_pred_tree = 0
n_female_pred_tree = 0
n_male_pred_svm = 0
n_female_pred_svm = 0
for i in range (1,1000):
# This loop tests the consistency of the CLF
# The Decision Tree is not very consistent (It's 50-50)
X = [[181,80,44],[177,70,43],[160,60,38],[154,54,37],
[166,65,40],[190,90,47],[175,64,39],[177,70,40],
[159,55,37],[171,75,42],[181,85,43]]
Y = ['male','female','female','female',
'male','male','male','female',
'male','female','male']
tree_clf = tree.DecisionTreeClassifier()
svm_clf = SVC()
tree_clf.fit(X,Y)
svm_clf.fit(X,Y)
tree_prediction = tree_clf.predict([[190,70,43]])
svm_prediction = svm_clf.predict([[190,70,43]])
if tree_prediction == 'male':
n_male_pred_tree += 1
else:
n_female_pred_tree += 1
if svm_prediction == 'male':
n_male_pred_svm += 1
else:
n_female_pred_svm += 1
print(f"MALE pred Tree: {n_male_pred_tree}")
print(f"FEMALE pred for Tree: {n_female_pred_tree}")
print("\n")
print(f"MALE pred for SVM: {n_male_pred_svm}")
print(f"FEMALE pred for SVM: {n_female_pred_svm}")