Я пытаюсь реализовать простую нейронную сеть для классификации кругового набора данных и построения плавной границы решения. Однако граница моего решения не является гладкой или неправильной. Я хочу, чтобы это выглядело как граница, показанная в этом примере:
вот так
Когда я запускаю код, граница решения неровная или не соответствует форме. моего набора данных. Я ожидаю плавную кривую, окружающую внутренний класс.
это мой код:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_circles
# Generate dataset
X, y = make_circles(n_samples=100, noise=0.1, factor=0.3, random_state=0)
X = X.T # Transpose X
y = y.reshape((1, y.shape[0])) # Reshape y to row vector
# Visualization of the dataset
plt.scatter(X[0, :], X[1, :], c=y.flatten())
plt.title('Dataset')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()
def paramètres(n0=2, n1=2, n2=1):
W1 = np.random.randn(n1, n0)
b1 = np.zeros((n1, 1))
W2 = np.random.randn(n2, n1)
b2 = np.zeros((n2, 1))
parametres = {
'W1': W1,
'b1': b1,
'W2': W2,
'b2': b2
}
return parametres
def G(X, theta, b):
Z = theta.dot(X) + b
return Z, 1/(1+np.exp(-Z))
def forwardPropagation(X, parametres):
W1 = parametres['W1']
b1 = parametres['b1']
W2 = parametres['W2']
b2 = parametres['b2']
Z1, A1 = G(X, W1, b1)
Z2, A2 = G(A1, W2, b2)
activations = {
'A1': A1,
'A2': A2
}
return activations
def backPropagation(X, y, parametres, activations):
A1 = activations['A1']
A2 = activations['A2']
W2 = parametres['W2']
m = y.shape[1]
dZ2 = A2 - y
dW2 = 1 / m * dZ2.dot(A1.T)
db2 = 1 / m * np.sum(dZ2, axis=1, keepdims=True)
dZ1 = np.dot(W2.T, dZ2) * A1 * (1 - A1)
dW1 = 1 / m * dZ1.dot(X.T)
db1 = 1 / m * np.sum(dZ1, axis=1, keepdims=True)
gradients = {
'dW1': dW1,
'db1': db1,
'dW2': dW2,
'db2': db2
}
return gradients
def update(gradients, parametres, learning_rate):
W1 = parametres['W1']
b1 = parametres['b1']
W2 = parametres['W2']
b2 = parametres['b2']
dW1 = gradients['dW1']
db1 = gradients['db1']
dW2 = gradients['dW2']
db2 = gradients['db2']
W1 = W1 - learning_rate * dW1
b1 = b1 - learning_rate * db1
W2 = W2 - learning_rate * dW2
b2 = b2 - learning_rate * db2
parametres = {
'W1': W1,
'b1': b1,
'W2': W2,
'b2': b2
}
return parametres
def predict(X, parametres):
activations = forwardPropagation(X, parametres)
return activations['A2']
def neural_network(X, y, n1=2, learning_rate=0.1, n_iter=1000):
n0 = X.shape[0]
n2 = y.shape[0]
np.random.seed(0)
parametres = paramètres(n0, n1, n2)
for i in range(n_iter):
activations = forwardPropagation(X, parametres)
gradients = backPropagation(X, y, parametres, activations)
parametres = update(gradients, parametres, learning_rate)
return parametres, activations
# Train the model
parametres, activations = neural_network(X, y, n1=2, learning_rate=0.1, n_iter=1000)
# Plot decision boundary
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.02),
np.arange(y_min, y_max, 0.02))
Z = predict(np.c_[xx.ravel(), yy.ravel()].T, parametres)
Z = Z.reshape(xx.shape)
plt.figure()
plt.contourf(xx, yy, Z, levels=[0, 0.5, 1], alpha=0.8, cmap=plt.cm.RdYlBu)
plt.scatter(X[0, :], X[1, :], c=y.flatten(), cmap=plt.cm.RdYlBu)
plt.title('Decision Boundary')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()
Подробнее здесь: https://stackoverflow.com/questions/792 ... -neural-ne
Как построить плавную границу решения для двоичного классификатора с помощью нейронной сети? ⇐ Python
Программы на Python
1734563514
Anonymous
Я пытаюсь реализовать простую нейронную сеть для классификации кругового набора данных и построения плавной границы решения. Однако граница моего решения не является гладкой или неправильной. Я хочу, чтобы это выглядело как граница, показанная в этом примере:
вот так
Когда я запускаю код, граница решения неровная или не соответствует форме. моего набора данных. Я ожидаю плавную кривую, окружающую внутренний класс.
это мой код:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_circles
# Generate dataset
X, y = make_circles(n_samples=100, noise=0.1, factor=0.3, random_state=0)
X = X.T # Transpose X
y = y.reshape((1, y.shape[0])) # Reshape y to row vector
# Visualization of the dataset
plt.scatter(X[0, :], X[1, :], c=y.flatten())
plt.title('Dataset')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()
def paramètres(n0=2, n1=2, n2=1):
W1 = np.random.randn(n1, n0)
b1 = np.zeros((n1, 1))
W2 = np.random.randn(n2, n1)
b2 = np.zeros((n2, 1))
parametres = {
'W1': W1,
'b1': b1,
'W2': W2,
'b2': b2
}
return parametres
def G(X, theta, b):
Z = theta.dot(X) + b
return Z, 1/(1+np.exp(-Z))
def forwardPropagation(X, parametres):
W1 = parametres['W1']
b1 = parametres['b1']
W2 = parametres['W2']
b2 = parametres['b2']
Z1, A1 = G(X, W1, b1)
Z2, A2 = G(A1, W2, b2)
activations = {
'A1': A1,
'A2': A2
}
return activations
def backPropagation(X, y, parametres, activations):
A1 = activations['A1']
A2 = activations['A2']
W2 = parametres['W2']
m = y.shape[1]
dZ2 = A2 - y
dW2 = 1 / m * dZ2.dot(A1.T)
db2 = 1 / m * np.sum(dZ2, axis=1, keepdims=True)
dZ1 = np.dot(W2.T, dZ2) * A1 * (1 - A1)
dW1 = 1 / m * dZ1.dot(X.T)
db1 = 1 / m * np.sum(dZ1, axis=1, keepdims=True)
gradients = {
'dW1': dW1,
'db1': db1,
'dW2': dW2,
'db2': db2
}
return gradients
def update(gradients, parametres, learning_rate):
W1 = parametres['W1']
b1 = parametres['b1']
W2 = parametres['W2']
b2 = parametres['b2']
dW1 = gradients['dW1']
db1 = gradients['db1']
dW2 = gradients['dW2']
db2 = gradients['db2']
W1 = W1 - learning_rate * dW1
b1 = b1 - learning_rate * db1
W2 = W2 - learning_rate * dW2
b2 = b2 - learning_rate * db2
parametres = {
'W1': W1,
'b1': b1,
'W2': W2,
'b2': b2
}
return parametres
def predict(X, parametres):
activations = forwardPropagation(X, parametres)
return activations['A2']
def neural_network(X, y, n1=2, learning_rate=0.1, n_iter=1000):
n0 = X.shape[0]
n2 = y.shape[0]
np.random.seed(0)
parametres = paramètres(n0, n1, n2)
for i in range(n_iter):
activations = forwardPropagation(X, parametres)
gradients = backPropagation(X, y, parametres, activations)
parametres = update(gradients, parametres, learning_rate)
return parametres, activations
# Train the model
parametres, activations = neural_network(X, y, n1=2, learning_rate=0.1, n_iter=1000)
# Plot decision boundary
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.02),
np.arange(y_min, y_max, 0.02))
Z = predict(np.c_[xx.ravel(), yy.ravel()].T, parametres)
Z = Z.reshape(xx.shape)
plt.figure()
plt.contourf(xx, yy, Z, levels=[0, 0.5, 1], alpha=0.8, cmap=plt.cm.RdYlBu)
plt.scatter(X[0, :], X[1, :], c=y.flatten(), cmap=plt.cm.RdYlBu)
plt.title('Decision Boundary')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()
Подробнее здесь: [url]https://stackoverflow.com/questions/79292743/how-to-plot-a-smooth-decision-boundary-for-a-binary-classifier-using-a-neural-ne[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия