Невозможно воспроизвести вашу проблему в 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 , если он установлен;чтобы получить полностью воспроизводимых результатов между различными прогонами, которые включают примерку таких моделей, необходимо явно указать значение для аргумента random_state
в определении модели (проверьте docs ).
В вашем случае вы должны просто указать целое число (точное значение не имеет значения) при определении модели, то есть:
clf = tree.DecisionTreeClassifier(random_state=42)
, после чего всеЗапуски вашего скрипта будут одинаковыми.
Независимо от этого, хорошей идеей было бы проверить вашу модель с некоторыми входными данными, которые в некоторой степени напоминают диапазон значений исходных функций;здесь ваш features[0]
находится в диапазоне 150-450, при этом вы проверяете его со значением 1. Если вы использовали более реалистичный ввод (скажем, что-то вроде [180, 7]
вместо [1, 2]
), естьвелика вероятность того, что ваши прогнозы будут такими же, даже если вы не установили явно random_state
(хотя не проверяли его, и он может не сработать из-за вашего очень маленького тренировочного набора, что может легко привести к большимдисперсия).