Как ввести мои данные обучения в эту нейронную сеть - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь решить проблему классификации с помощью определенного фрагмента кода, и у меня возникают проблемы с пониманием того, как именно мои данные должны поступать в нейронную сеть.

Я начал кодировать данные с использованием фиктивного кодирования 1-C, чтобы сохранять категориальный контекст в данных.Я еще не закончил полностью кодировать данные, так как не до конца понимаю, как использовать имеющийся код для ввода.

Пока приведен пример моих закодированных данных:

'In Raw format, for predicting Political Party Affiliation
   'Age Sex     Income    Area      Party
[0] 30  male    38000.00  urban     democrat
[1] 36  female  42000.00  suburban  republican
[2] 52  male    40000.00  rural     independent
[3] 42  female  44000.00  suburban  other

'Encoded Format
[0] -1.23  -1.0  -1.34  ( 0.0   1.0)  (0.0  0.0  0.0  1.0)
[1] -0.49   1.0   0.45  ( 1.0   0.0)  (0.0  0.0  1.0  0.0)
[2]  1.48  -1.0  -0.45  (-1.0  -1.0)  (0.0  1.0  0.0  0.0)
[3]  0.25   1.0   1.34  ( 1.0   0.0)  (1.0  0.0  0.0  0.0)

Я использовал нормализацию Гаусса для числовых данных, фиктивное кодирование 1-из-C и кодирование 1-в-(C-1) для строковых данных.Последний столбец данных - это категории.

Принимая во внимание приведенный ниже код;Входная переменная X принимает данные в следующем формате:

X=np.array([[1,0,1,0],[1,0,1,1],[0,1,0,1]])

Вводить ли я свои данные так, пока я не переберу все их данные?

X=np.array([[-1.23,-1,-1.34,0010],[00000010,-.49,1,.45],[1000,00001000,1.48,-1]])

Я прочиталследующий вопрос SO: Как входной набор данных подается в нейронную сеть? , который помог прояснить процесс.Как элементы должны подаваться построчно, при этом целевой объект / Метка (в данном случае, политическая партия) является последним элементом в строке.Это имеет смысл для меня.В опубликованном коде я предполагаю, что переменная Y является целью.

Имея это в виду, должен ли мой ввод быть таким:

X=np.array([[-1.23,-1,-1.34,0010],[00000010,0,0,0],[0,0,0,0]])

Где я фиксирую только первую строку,с целевой функцией в качестве последнего ввода?

Я не уверен, какой это должен быть.Заранее благодарю за любую помощь.

import numpy as np

#Input array
 X=np.array([[1,0,1,0],[1,0,1,1],[0,1,0,1]])

#Output
 y=np.array([[1],[1],[0]])

#Sigmoid Function
 def sigmoid (x):
 return 1/(1 + np.exp(-x))

#Derivative of Sigmoid Function
 def derivatives_sigmoid(x):
 return x * (1 - x)

#Variable initialization
 epoch=5000 #Setting training iterations
 lr=0.1 #Setting learning rate
 inputlayer_neurons = X.shape[1] #number of features in data set
 hiddenlayer_neurons = 3 #number of hidden layers neurons
 output_neurons = 1 #number of neurons at output layer

#weight and bias initialization
 wh=np.random.uniform(size=(inputlayer_neurons,hiddenlayer_neurons))
 bh=np.random.uniform(size=(1,hiddenlayer_neurons))
 wout=np.random.uniform(size=(hiddenlayer_neurons,output_neurons))
 bout=np.random.uniform(size=(1,output_neurons))

for i in range(epoch):

#Forward Propogation
 hidden_layer_input1=np.dot(X,wh)
 hidden_layer_input=hidden_layer_input1 + bh
 hiddenlayer_activations = sigmoid(hidden_layer_input)
 output_layer_input1=np.dot(hiddenlayer_activations,wout)
 output_layer_input= output_layer_input1+ bout
 output = sigmoid(output_layer_input)

#Backpropagation
 E = y-output
 slope_output_layer = derivatives_sigmoid(output)
 slope_hidden_layer = derivatives_sigmoid(hiddenlayer_activations)
 d_output = E * slope_output_layer
 Error_at_hidden_layer = d_output.dot(wout.T)
 d_hiddenlayer = Error_at_hidden_layer * slope_hidden_layer
 wout += hiddenlayer_activations.T.dot(d_output) *lr
 bout += np.sum(d_output, axis=0,keepdims=True) *lr
 wh += X.T.dot(d_hiddenlayer) *lr
 bh += np.sum(d_hiddenlayer, axis=0,keepdims=True) *lr

print output

1 Ответ

0 голосов
/ 21 декабря 2018

отличный вопрос.

Сначала используйте предварительно созданные реализации нейронных сетей из SciKit Learn

Далее, разделите ваши данные на элементы и метки (сначала сгладьте входной вектор)

X_features=X[:,:-1]
X_labels=X[:,-1]

Затем настройте SciKit MLP

model=MLPClassifier(args...)

Установите ваши данные

model.fit(X_features,X_labels)

Вуаля ...

Теперь вы можете прогнозировать новый вход с помощью

Y=model.predict(input_vector)

Примечание: во имя истинной науки о данных не забудьте разделить ваши данные на набор для обучения и проверки (например, 90/10)

...