【问题标题】:Why I am getting different outputs for the same input in machine learning model为什么我在机器学习模型中为相同的输入得到不同的输出
【发布时间】:2020-01-26 20:18:46
【问题描述】:

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

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

【问题讨论】:

  • 你的问题不清楚;请准确地明确地显示您第一次和第二次的输入和输出是什么
  • 我认为当你运行代码时,它可以自我解释,
  • 结果 = (clf.predict([[1,2]]))
  • 代码和你的意图还很不清楚。

标签: python machine-learning scikit-learn decision-tree


【解决方案1】:

无法在 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](即'Mini Van')。

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

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

在您的情况下,您应该在定义模型时简单地提供一个整数(确切值无关紧要),即:

clf = tree.DecisionTreeClassifier(random_state=42)

之后,您的脚本的所有运行都将相同。

不管怎样,一个好主意是用一些输入来测试你的模型,这些输入有点类似于原始特征的值范围;在这里,您的 features[0] 在 150-450 的范围内,而您使用 1 的值对其进行测试。如果您使用了更真实的输入(例如,[180, 7] 而不是 [1, 2]),则有即使您没有明确设置random_state,您的预测也很有可能是相同的(虽然还没有测试过,由于您的训练集非常小,它可能无法在这里工作,这很容易导致很好的结果)方差)。

【讨论】:

    猜你喜欢
    • 2021-01-18
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 2020-03-12
    • 2022-01-15
    • 2021-12-13
    相关资源
    最近更新 更多