def createNeuralNetwork(self, inputFilePath, trainingPercent, maxItr, nHiddenLayers, nNeurons): """ given function creates neural network, and displays its waight at each level and accuracy of the network 0. read dataset 1. split dataset into training and testing datasets 2. initialize network a. take weights randomly for hidden and output layers 3. forward propogation a. neuron activation: sigma(wi*xi) b. neuron transfer : sigmoid function 1/(1+e(-x)) 4. back propogation a. transfer derivative b. error back propogation 5. train network a. update weights 6. predict 7. find mean square errors """ #0. read dataset myIO = MyIO() inputDataFrame = myIO.inputProcessedCSV(filePath=inputFilePath) headerList = inputDataFrame.columns.values #1. split dataset into training and testing dataset\ myUtility = MyUtility() trainingDataFrame, testingDataFrame = myUtility.splitDataset(\ inputDataFrame = inputDataFrame,\ trainingPercent = trainingPercent) #2. initializeNeuralNetwork uniqueClasses = inputDataFrame['class'].unique() numOfUniqueClasses = uniqueClasses.size trainingDataArr = trainingDataFrame.values testingDataArr = testingDataFrame.values trainingAtrArr, trainingClassArr, trainingAtrHeader = \ myUtility.segregateAttributesAndClass(\ inputArr = trainingDataArr,\ inputHeader = headerList) testingAtrArr, testingClassArr, testingAtrHeader =\ myUtility.segregateAttributesAndClass(\ inputArr = testingDataArr,\ inputHeader = headerList) nRows, nCols = trainingDataArr.shape neuralNetwork = NeuralNetwork( nInputs = nCols-1,\ nHiddenLayers = nHiddenLayers, \ nNeurons = nNeurons, \ nOutputs = numOfUniqueClasses) #4. back propogation # neuralNetwork.findBackwardPropagationError(targetValue = [1,0,0]) trainingError = neuralNetwork.trainNetwork(\ trainingDataArr = trainingDataArr,\ nIteration = maxItr,\ numOfUniqueClasses=numOfUniqueClasses, \ learningRate=0.5) trainingPredictedOPArr = neuralNetwork.predictDataset(\ testingDataSet = trainingDataArr) testingPredictedOPArr = neuralNetwork.predictDataset(\ testingDataSet = testingDataArr) trainingError = neuralNetwork.meanSquareError(\ targetArr = trainingClassArr,\ predictedOutputArr = trainingPredictedOPArr) testingError = neuralNetwork.meanSquareError(\ targetArr = testingClassArr,\ predictedOutputArr = testingPredictedOPArr) #debug print("\nAfter training neural network:\n") neuralNetwork.printNeuralNetworkWeights(headerList=trainingAtrHeader) print('\ntrainingError = {}'.format(trainingError)) print('testingError = {} '.format(testingError))