Ошибка ValueError: The truth value of an array with more than one element is ambiguous.Use a.any() or a.all()
import pandas as pd
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25)
dt = DecisionTreeClassifier()
dt = dt.fit(X_train, y_train)
predicted = dt.predict(X_test, y_test)
В чем проблема? Модель обучается на таких же данных, но ничего не предсказывает. Вылазит ошибка
ValueError: The truth value of an array with more than one element is ambiguous.Use a.any() or a.all()
Сохранял данные в DataFrame, но все так же ошибка.
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Ответы (1 шт):
Метод dt.predict(X, check_input=True) ожидает два аргумента - матрицу значений, на основании которой будут делаться предсказания и булевый флаг check_input. Вы передали в качестве второго параметра массив правильных значений вместо скалярного значения. В коде dt.predict есть проверка if check_input: - на этой строке кода выпадет исключительная ситуация, т.к. конструкция if np.array([1, 0, 0, 2]) - не может быть однозначно проверена.
Нет смысла передавать в dt.predict() заранее известный ответ - y_test.
Правильно делать так:
predicted = dt.predict(X_test)
Если вы хотите проверить точность предсказаний то можно воспользоваться методом .score():
In [5]: dt.score(X_test, y_test)
Out[5]: 0.9473684210526315