Может ли БДТ делать квадраты? - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь отделить фон от сигнала, если известно, что величина x^2 - y^2 является физической причиной, по которой фон и сигнал различаются.Если я предоставлю x и y в качестве входных переменных, BDT будет трудно понять, как добиться разделения.Разве БДТ не может делать квадраты?

1 Ответ

0 голосов
/ 12 сентября 2018

Нет, двоичное дерево решений не может принимать квадраты входных объектов.С учетом входных объектов 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()

enter image description here

Здесь вы можете увидеть, какие границы дерево решений может узнать: кусочно-прямоугольные.Они не будут хорошо приближаться к вашей функции, особенно в районе, где мало тренировочных точек.Поскольку вы знаете, что x ^ 2 - y ^ 2 - это количество, определяющее ответ, вы можете просто добавить его в качестве новой функции вместо того, чтобы пытаться его изучить.

...