为什么我在机器学习模块中得到相同输入的不同输出

2024-10-01 17:24:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在测试一些机器学习代码,如下所示,但是,对于相同的输入,我得到不同的输出,这背后的原因是什么?你知道吗

from sklearn import tree

# Horse Power and Seating capacity 
features = [
 [300,2],
 [450,2],
 [200,8],
 [150,9] 
 ]

# change supercar for 1 and minivan for 2
labels = [1,1,2,2] 

# Decision Tree Classifier 
clf = tree.DecisionTreeClassifier()

# Find Pattens in Data FIT 
clf.fit(features,labels)

result = (clf.predict([[1,2]]))


result_extp = { }
result_extp[1] = "Super Car"
result_extp[2] = "Min Van"


# print (result)
print(result_extp[result[0]])
result_extp = { }
result_extp[1] = "Super Car"
result_extp[2] = "Mini Van"

编辑:

这是我的输出,更多的是随机的:

PS D:\projects\ML> python .\mlforsupercars.py answer : [2] Min Van 
PS D:\projects\ML> python .\mlforsupercars.py answer : [2] Min Van 
PS D:\projects\ML> python .\mlforsupercars.py answer : [2] Min Van 
PS D:\projects\ML> python .\mlforsupercars.py answer : [1] Super Car 
PS D:\projects\ML> python .\mlforsupercars.py answer : [2] Min Van

Tags: andanswerpytreeresultmincarvan
1条回答
网友
1楼 · 发布于 2024-10-01 17:24:27

无法在scikit learn 0.18.1中重现您的问题(但是,您仍然没有证明它确实存在):

import sklearn
sklearn.__version__
# '0.18.1'

# Horse Power and Seating capacity 
features = [
 [300,2],
 [450,2],
 [200,8],
 [150,9] 
 ]

# change supercar for 1 and minivan for 2
labels = [1,1,2,2] 

# Decision Tree Classifier 
clf = tree.DecisionTreeClassifier()
clf.fit(features,labels)

result1 = (clf.predict([[1,2]]))
print(result1)
# [2]

result2 = (clf.predict([[1,2]]))
print(result2)
# [2]

print(result1==result2)
# [ True]

无论我重新运行result2 = (clf.predict([[1,2]]))多少次,结果总是[2](即a'Mini Van')。你知道吗

更新(在澄清编辑中的确切的问题后)

与许多机器学习模型一样,决策树在拟合时包含一个随机元素;为了在包含拟合这样的模型的不同运行之间获得完全可再现的结果,您需要在模型定义中显式地为random_state参数提供一个值(检查docs)。你知道吗

在您的情况下,在定义模型时,只需提供一个整数(精确的值无关紧要),即:

clf = tree.DecisionTreeClassifier(random_state=42)

之后,脚本的所有运行都将出现相同的结果。你知道吗

尽管如此,一个好主意是用一些与原始特性的值范围有些相似的输入来测试您的模型;这里,您的features[0]在150-450的范围内,而您用值1来测试它。如果您使用了更实际的输入(例如,类似于[180, 7]而不是[1, 2]),那么即使您没有显式设置random_state,您的预测也很有可能是相同的(不过,您还没有对其进行测试,而且由于您的训练集非常小,在这里可能不起作用,这很容易导致很大的差异)。你知道吗

相关问题 更多 >

    热门问题