Я пытаюсь решить проблему классификации с помощью определенного фрагмента кода, и у меня возникают проблемы с пониманием того, как именно мои данные должны поступать в нейронную сеть.
Я начал кодировать данные с использованием фиктивного кодирования 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