Проблема двоичной классификации с наборами данных, которые попадают в концентрические круги - PullRequest
0 голосов
/ 08 марта 2019

Функция make_circles() создает проблему двоичной классификации с наборами данных, которые попадают в концентрические окружности.

data, label = ds.make_circles(n_samples=1000, factor=.4, noise=0.05)

# Lets visualize the dataset
reds = label == 0
blues = label == 1
plt.scatter(data[reds, 0], data[reds, 1], c="red", s=20, edgecolor='k')
plt.scatter(data[blues, 0], data[blues, 1], c="blue", s=20, edgecolor='k')
plt.show()

Как реализовать однослойную нейронную сеть для классификации этих данных в python?

1 Ответ

2 голосов
/ 08 марта 2019

Простейшая нейронная сеть, созданная с помощью Keras, будет выглядеть следующим образом:

from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.optimizers import SGD
import pandas as pd
import numpy as np
model = Sequential()
model.add(Dense(128, input_dim=2, init='uniform'))
model.add(Activation('relu'))
model.add(Dense(128, init='uniform'))
model.add(Activation('relu'))
model.add(Dense(2, init='uniform'))
model.add(Activation('sigmoid'))
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy',
              optimizer=sgd,metrics=['accuracy'])

model.summary()

model.fit(data, pd.get_dummies(label),nb_epoch=500,batch_size=data.shape[0])


model.evaluate(data, pd.get_dummies(label))

predictions=np.argmax(model.predict(data),axis=1)  #OR

predictions=model.predict_classes(data)

# Epoch 500/500
#1000/1000 [==============================] - 0s 5us/step - loss: 0.6897 - acc: 0.9990

ВЫВОД классификации по нейронной сети:

Output Neural Network

Помните, что вам придется настроить архитектуру и гиперпараметры нейронной сети:

Neural Network Adjustements

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