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

我在测试下面的机器学习代码,然而,对于相同的输入,我得到了不同的输出,这背后的原因可能是什么?

from sklearn import tree# 马力和座位容量 features = [ [300,2], [450,2], [200,8], [150,9]  ]# 将超级跑车标记为1,将小型货车标记为2labels = [1,1,2,2] # 决策树分类器 clf = tree.DecisionTreeClassifier()# 在数据中寻找模式 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

回答:

在scikit-learn 0.18.1中无法重现您的问题(但再次强调,您并未证明这个问题确实存在):

import sklearnsklearn.__version__# '0.18.1'# 马力和座位容量 features = [ [300,2], [450,2], [200,8], [150,9]  ]# 将超级跑车标记为1,将小型货车标记为2labels = [1,1,2,2] # 决策树分类器 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参数的值(查看文档)。

在您的案例中,您只需在定义模型时提供一个整数(确切的值并不重要),即:

clf = tree.DecisionTreeClassifier(random_state=42)

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

无论如何,一个好的主意是用一些与原始特征值范围相似的输入来测试您的模型;在这里,您的features[0]的范围是150-450,而您用的是1的值进行测试。如果您使用了更现实的输入(例如,使用[180, 7]而不是[1, 2]),即便您没有明确设置random_state,您的预测结果也很有可能会相同(虽然我没有测试过,由于您的训练集非常小,这可能在这里不起作用,因为这可能导致很大的方差)。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注