Как использовать контур в границе решения в Python - PullRequest
1 голос
/ 18 февраля 2020

Прежде всего, да, я искал и пробовал самостоятельно, но не могу найти ничего полезного и поэтому застрял. Я хочу построить countourf в нейронной сети в Керасе.

# X = X axis data, Y = Y axis data, Z = predictions (prob of being 1 of each (X, Y)row data)
X.shape = (1701, 1)
Y.shape = (1701, 1)
Z.shape = (1701, )

Прежде всего, я видел, что многие коды, использующие contourf, упорядочивают свои элементы от минимального до максимального значения. Это необходимо?

Во-вторых, как указано в руководстве пользователя contourf ,

X и Y должны быть двумерными и иметь ту же форму, что и Z, или оба они должны быть одномерными, так что len (X) == M - это число столбцов в Z, а len (Y) == N - это количество строк в Z.

, поэтому мой Z должен быть Z.shape = (1701, 1701) или изменять форму X и Y в двумерный массив каждый, верно?

Какой из них должен быть лучшим вариантом?

PD: I ' мы пытались изменить форму Z.shape = (1701, 1701), но я не знаю, как придать эту форму. Идея состоит в том, чтобы создать график, подобный изображенному в этой ссылке: Граница принятия решения

РЕДАКТИРОВАТЬ Я хотел бы знать, как изменить форму Z, если Z - это массив 1701 0 <= value <= 1, то есть от Z.shape = (1701, ) до Z.shape = (1701, 1701)

1 Ответ

1 голос
/ 11 апреля 2020

Объедините X и Y в один вектор пространственных объектов X:

X = np.vstack((X.reshape((1701, )), Y.reshape((1701, )))).T  # X.shape = (1701, 2)

n_input_dim = X.shape[1]

model = Sequential()
model.add(Dense(4, input_dim=n_input_dim, activation='elu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X, y, verbose=0, epochs=1000)

# Plot decision space
plt.figure(figsize=(4, 4), dpi=150)
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1), np.arange(y_min, y_max, 0.05))

Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

plt.contourf(xx, yy, Z, alpha=0.4)
plt.scatter(X[:, 0], X[:, 1], c=y, s=20, edgecolor='k')

Для выборочных данных X, y = make_moons(100, noise=0.3, random_state=0) это будет график:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...