Нет, двоичное дерево решений не может принимать квадраты входных объектов.С учетом входных объектов x, y он будет пытаться приблизить желаемую функцию путем деления плоскости x, y на вертикальные и горизонтальные линии.Давайте рассмотрим пример: я подгоняю классификатор дерева решений к квадратной сетке точек и строю границу решения.
from sklearn.tree import DecisionTreeClassifier
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-5.5, 5.5, 1)
y = np.arange(-5.0, 6.0, 1)
xx, yy = np.meshgrid(x,y)
#the function we want to learn:
target = xx.ravel()**2 - yy.ravel()**2 > 0
data = np.c_[xx.ravel(), yy.ravel()]
#Fit a decision tree:
clf = DecisionTreeClassifier()
clf.fit(data, target)
#Plot the decision boundary:
xxplot, yyplot = np.meshgrid(np.arange(-7, 7, 0.1),
np.arange(-7, 7, 0.1))
Z = clf.predict(np.c_[xxplot.ravel(), yyplot.ravel()])
# Put the result into a color plot
Z = Z.reshape(xxplot.shape)
plt.contourf(xxplot, yyplot, Z, cmap=plt.cm.hot)
# Plot also the training points
plt.scatter(xx.ravel(), yy.ravel(), c=target, cmap=plt.cm.flag)
plt.xlabel("x")
plt.ylabel("y")
plt.title("Decision boundary for a binary decision tree learning a function x**2 - y**2 > 0")
plt.show()
Здесь вы можете увидеть, какие границы дерево решений может узнать: кусочно-прямоугольные.Они не будут хорошо приближаться к вашей функции, особенно в районе, где мало тренировочных точек.Поскольку вы знаете, что x ^ 2 - y ^ 2 - это количество, определяющее ответ, вы можете просто добавить его в качестве новой функции вместо того, чтобы пытаться его изучить.