Feed Forward Neural Networks

Example A.6. Feed Forward Neural Networks

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#                                                                       #
#                   AdvancedMiner Example Script                        #
#            Copyright Algolytics sp. z o. o. 2004-2015                 #
#                                                                       #
#                                                                       #
# Description:                                                          #
#     The script contains examples                                      #
#     of building, testing and application                              #
#     of Feed Forward Neural Networks classification model              #
#                                                                       #
# Input data:                                                           #
#     Murphy P.M., Aha D.W. (1994)                                      #
#     UCI Repository Of Machine Learning Databases and Domain Theories  #
#     http://www.ics.uci.edu/~mlearn/MLRepository.html                  #
#     Irvine, CA: University of California,                             #
#     Department of Information and Computer Science.                   #
#                                                                       #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

# --- data loading ---
table 'iris' :
   sepallength sepalwidth petallength petalwidth Class
   5.1 3.5 1.4 0.2 'Iris-setosa'
   4.9 3.0 1.4 0.2 'Iris-setosa'
   4.7 3.2 1.3 0.2 'Iris-setosa'
   4.6 3.1 1.5 0.2 'Iris-setosa'
   5.0 3.6 1.4 0.2 'Iris-setosa'
   5.4 3.9 1.7 0.4 'Iris-setosa'
   4.6 3.4 1.4 0.3 'Iris-setosa'
   5.0 3.4 1.5 0.2 'Iris-setosa'
   4.4 2.9 1.4 0.2 'Iris-setosa'
   4.9 3.1 1.5 0.1 'Iris-setosa'
   5.4 3.7 1.5 0.2 'Iris-setosa'
   4.8 3.4 1.6 0.2 'Iris-setosa'
   4.8 3.0 1.4 0.1 'Iris-setosa'
   4.3 3.0 1.1 0.1 'Iris-setosa'
   5.8 4.0 1.2 0.2 'Iris-setosa'
   5.7 4.4 1.5 0.4 'Iris-setosa'
   5.4 3.9 1.3 0.4 'Iris-setosa'
   5.1 3.5 1.4 0.3 'Iris-setosa'
   5.7 3.8 1.7 0.3 'Iris-setosa'
   5.1 3.8 1.5 0.3 'Iris-setosa'
   5.4 3.4 1.7 0.2 'Iris-setosa'
   5.1 3.7 1.5 0.4 'Iris-setosa'
   4.6 3.6 1.0 0.2 'Iris-setosa'
   5.1 3.3 1.7 0.5 'Iris-setosa'
   4.8 3.4 1.9 0.2 'Iris-setosa'
   5.0 3.0 1.6 0.2 'Iris-setosa'
   5.0 3.4 1.6 0.4 'Iris-setosa'
   5.2 3.5 1.5 0.2 'Iris-setosa'
   5.2 3.4 1.4 0.2 'Iris-setosa'
   4.7 3.2 1.6 0.2 'Iris-setosa'
   4.8 3.1 1.6 0.2 'Iris-setosa'
   5.4 3.4 1.5 0.4 'Iris-setosa'
   5.2 4.1 1.5 0.1 'Iris-setosa'
   5.5 4.2 1.4 0.2 'Iris-setosa'
   4.9 3.1 1.5 0.1 'Iris-setosa'
   5.0 3.2 1.2 0.2 'Iris-setosa'
   5.5 3.5 1.3 0.2 'Iris-setosa'
   4.9 3.1 1.5 0.1 'Iris-setosa'
   4.4 3.0 1.3 0.2 'Iris-setosa'
   5.1 3.4 1.5 0.2 'Iris-setosa'
   5.0 3.5 1.3 0.3 'Iris-setosa'
   4.5 2.3 1.3 0.3 'Iris-setosa'
   4.4 3.2 1.3 0.2 'Iris-setosa'
   5.0 3.5 1.6 0.6 'Iris-setosa'
   5.1 3.8 1.9 0.4 'Iris-setosa'
   4.8 3.0 1.4 0.3 'Iris-setosa'
   5.1 3.8 1.6 0.2 'Iris-setosa'
   4.6 3.2 1.4 0.2 'Iris-setosa'
   5.3 3.7 1.5 0.2 'Iris-setosa'
   5.0 3.3 1.4 0.2 'Iris-setosa'
   7.0 3.2 4.7 1.4 'Iris-versicolor'
   6.4 3.2 4.5 1.5 'Iris-versicolor'
   6.9 3.1 4.9 1.5 'Iris-versicolor'
   5.5 2.3 4.0 1.3 'Iris-versicolor'
   6.5 2.8 4.6 1.5 'Iris-versicolor'
   5.7 2.8 4.5 1.3 'Iris-versicolor'
   6.3 3.3 4.7 1.6 'Iris-versicolor'
   4.9 2.4 3.3 1.0 'Iris-versicolor'
   6.6 2.9 4.6 1.3 'Iris-versicolor'
   5.2 2.7 3.9 1.4 'Iris-versicolor'
   5.0 2.0 3.5 1.0 'Iris-versicolor'
   5.9 3.0 4.2 1.5 'Iris-versicolor'
   6.0 2.2 4.0 1.0 'Iris-versicolor'
   6.1 2.9 4.7 1.4 'Iris-versicolor'
   5.6 2.9 3.6 1.3 'Iris-versicolor'
   6.7 3.1 4.4 1.4 'Iris-versicolor'
   5.6 3.0 4.5 1.5 'Iris-versicolor'
   5.8 2.7 4.1 1.0 'Iris-versicolor'
   6.2 2.2 4.5 1.5 'Iris-versicolor'
   5.6 2.5 3.9 1.1 'Iris-versicolor'
   5.9 3.2 4.8 1.8 'Iris-versicolor'
   6.1 2.8 4.0 1.3 'Iris-versicolor'
   6.3 2.5 4.9 1.5 'Iris-versicolor'
   6.1 2.8 4.7 1.2 'Iris-versicolor'
   6.4 2.9 4.3 1.3 'Iris-versicolor'
   6.6 3.0 4.4 1.4 'Iris-versicolor'
   6.8 2.8 4.8 1.4 'Iris-versicolor'
   6.7 3.0 5.0 1.7 'Iris-versicolor'
   6.0 2.9 4.5 1.5 'Iris-versicolor'
   5.7 2.6 3.5 1.0 'Iris-versicolor'
   5.5 2.4 3.8 1.1 'Iris-versicolor'
   5.5 2.4 3.7 1.0 'Iris-versicolor'
   5.8 2.7 3.9 1.2 'Iris-versicolor'
   6.0 2.7 5.1 1.6 'Iris-versicolor'
   5.4 3.0 4.5 1.5 'Iris-versicolor'
   6.0 3.4 4.5 1.6 'Iris-versicolor'
   6.7 3.1 4.7 1.5 'Iris-versicolor'
   6.3 2.3 4.4 1.3 'Iris-versicolor'
   5.6 3.0 4.1 1.3 'Iris-versicolor'
   5.5 2.5 4.0 1.3 'Iris-versicolor'
   5.5 2.6 4.4 1.2 'Iris-versicolor'
   6.1 3.0 4.6 1.4 'Iris-versicolor'
   5.8 2.6 4.0 1.2 'Iris-versicolor'
   5.0 2.3 3.3 1.0 'Iris-versicolor'
   5.6 2.7 4.2 1.3 'Iris-versicolor'
   5.7 3.0 4.2 1.2 'Iris-versicolor'
   5.7 2.9 4.2 1.3 'Iris-versicolor'
   6.2 2.9 4.3 1.3 'Iris-versicolor'
   5.1 2.5 3.0 1.1 'Iris-versicolor'
   5.7 2.8 4.1 1.3 'Iris-versicolor'
   6.3 3.3 6.0 2.5 'Iris-virginica'
   5.8 2.7 5.1 1.9 'Iris-virginica'
   7.1 3.0 5.9 2.1 'Iris-virginica'
   6.3 2.9 5.6 1.8 'Iris-virginica'
   6.5 3.0 5.8 2.2 'Iris-virginica'
   7.6 3.0 6.6 2.1 'Iris-virginica'
   4.9 2.5 4.5 1.7 'Iris-virginica'
   7.3 2.9 6.3 1.8 'Iris-virginica'
   6.7 2.5 5.8 1.8 'Iris-virginica'
   7.2 3.6 6.1 2.5 'Iris-virginica'
   6.5 3.2 5.1 2.0 'Iris-virginica'
   6.4 2.7 5.3 1.9 'Iris-virginica'
   6.8 3.0 5.5 2.1 'Iris-virginica'
   5.7 2.5 5.0 2.0 'Iris-virginica'
   5.8 2.8 5.1 2.4 'Iris-virginica'
   6.4 3.2 5.3 2.3 'Iris-virginica'
   6.5 3.0 5.5 1.8 'Iris-virginica'
   7.7 3.8 6.7 2.2 'Iris-virginica'
   7.7 2.6 6.9 2.3 'Iris-virginica'
   6.0 2.2 5.0 1.5 'Iris-virginica'
   6.9 3.2 5.7 2.3 'Iris-virginica'
   5.6 2.8 4.9 2.0 'Iris-virginica'
   7.7 2.8 6.7 2.0 'Iris-virginica'
   6.3 2.7 4.9 1.8 'Iris-virginica'
   6.7 3.3 5.7 2.1 'Iris-virginica'
   7.2 3.2 6.0 1.8 'Iris-virginica'
   6.2 2.8 4.8 1.8 'Iris-virginica'
   6.1 3.0 4.9 1.8 'Iris-virginica'
   6.4 2.8 5.6 2.1 'Iris-virginica'
   7.2 3.0 5.8 1.6 'Iris-virginica'
   7.4 2.8 6.1 1.9 'Iris-virginica'
   7.9 3.8 6.4 2.0 'Iris-virginica'
   6.4 2.8 5.6 2.2 'Iris-virginica'
   6.3 2.8 5.1 1.5 'Iris-virginica'
   6.1 2.6 5.6 1.4 'Iris-virginica'
   7.7 3.0 6.1 2.3 'Iris-virginica'
   6.3 3.4 5.6 2.4 'Iris-virginica'
   6.4 3.1 5.5 1.8 'Iris-virginica'
   6.0 3.0 4.8 1.8 'Iris-virginica'
   6.9 3.1 5.4 2.1 'Iris-virginica'
   6.7 3.1 5.6 2.4 'Iris-virginica'
   6.9 3.1 5.1 2.3 'Iris-virginica'
   5.8 2.7 5.1 1.9 'Iris-virginica'
   6.8 3.2 5.9 2.3 'Iris-virginica'
   6.7 3.3 5.7 2.5 'Iris-virginica'
   6.7 3.0 5.2 2.3 'Iris-virginica'
   6.3 2.5 5.0 1.9 'Iris-virginica'
   6.5 3.0 5.2 2.0 'Iris-virginica'
   6.2 3.4 5.4 2.3 'Iris-virginica'
   5.9 3.0 5.1 1.8 'Iris-virginica'  

# --- data preparation ---
input_data_name = 'iris'
input_std_data_name = 'iris_std'

input_pd = PhysicalData(input_data_name)
save('input_physical_data', input_pd)
input_ld = LogicalData(input_pd)
save('input_logical_data', input_ld)

# --- DATA STANDARDIZATION ---

# --- transformation settings ---
std_set = StandardizeSettings()
std_set.logicalData=input_ld
save('std_set',std_set)

# --- transformation building ---
tbt = TransformationBuildTask()
tbt.physicalDataName='input_physical_data'
tbt.transformationName='standardize'
tbt.transformationSettingsName='std_set'
save('tbt',tbt)
execute('tbt')

input_at_pd = PhysicalData(input_data_name)
input_at_pd_name =input_data_name+ "_pd"
save(input_at_pd_name,input_at_pd)

target_at_pd = PhysicalData(input_std_data_name)
target_at_pd_name = input_std_data_name+"_pd"
save(target_at_pd_name,target_at_pd)
# --- transformation applying ---
tat = TransformationApplyTask()
tat.replaceExistingData = TRUE
tat.setTransformationName('standardize')
tat.setSourceDataName(input_at_pd_name)
tat.setTargetDataName(target_at_pd_name)
save('tat',tat)
execute('tat')

# --- data splitting ---
train_data_name = input_std_data_name + '_trn'
test_data_name = input_std_data_name + '_tst'

tableSplit(input_std_data_name,split=[6,4],output=[train_data_name,test_data_name])
    
pd = PhysicalData(train_data_name)
save('physical_data', pd)
ld = LogicalData(pd)
save('logical_data', ld)

# --- LEARNING ---

NET_model_name = 'NET_model_' + input_data_name

# --- algorithm settings ---
net_cfs = ClassificationFunctionSettings()
net_cfs.logicalData = ld
net_cfs.getAttributeUsageSet().getAttribute('Class').setUsage(UsageOption.target)

net_set = FeedforwardNeuralNetSettings()
#net_set.bipolarCategoricalAttributesBinarization = TRUE
net_set.automaticDataTransformations = TRUE
 # [0] - replace missing
 # [1] - standardize
 # [2] - binarization
net_set.transformationSettings.internalTransformationsSettings[2].setDefaultBinarizedValues(BinarizedValues.bipolar)
net_set.errorFunction = FeedforwardErrorFunctionType.sumSquared
net_set.maxNumberOfIterations=1000
net_set.minErrorTolerance=0.001
net_set.noise = 0
net_set.outputLayerActivationFunction=NeuronActivationFunctionType.logistic
net_set.randomization = TRUE
net_set.validationWindow = 0

net_la = FeedforwardLearningAlgorithm(FeedforwardLearningAlgorithmType.backProp)
net_la.learningRate=0.3
net_la.momentum=0.0
net_set.learningAlgorithm=net_la

net_cfs.algorithmSettings=net_set
save('net_cfs',net_cfs)

# --- model building ---
net_mbt = MiningBuildTask('physical_data' , 'net_cfs' , NET_model_name)
save('NET_mbt',net_mbt)
execute('NET_mbt')

print "Build task for neural networks example was successfully executed"
# --- MODEL TESTING---

# --- data preparation ---
test_pd = PhysicalData(test_data_name)
save('physical_test_data', test_pd)
test_ld = LogicalData(test_pd)
save('logical_test_data', test_ld)

# --- test task ---
ApproximationOutputType
net_ctt = ClassificationTestTask()
net_ctt.positiveTargetValue="Iris-versicolor"
net_ctt.testDataTargetAttributeName="Class"
net_ctt.modelName=NET_model_name
net_ctt.testDataName='physical_test_data'
net_ctt.testResultName='results_'+NET_model_name
save('NET_ctt',net_ctt)
execute('NET_ctt')

print "Test task for neural networks example was successfully executed"
# --- MODEL APPLICATION ---

net_ao_pd = PhysicalData('apply_' + input_data_name )
save('NET_apply_output', net_ao_pd )

net_mat = MiningApplyTask()
net_mat.replaceExistingData = TRUE
net_mat.modelName = NET_model_name
net_mat.sourceDataName = 'physical_test_data'
net_mat.targetDataName = 'NET_apply_output'
net_mat.replaceExistingData = TRUE

directMapping = java.util.ArrayList()
directMapping.add(ApplySourceItem('Class','real_target'))
net_mat.setDirectMapping(directMapping)

net_cao = ClassificationApplyOutput()
net_cao.item.add(ClassificationRankItem('predicted_target', \
ClassificationOutputType.predictedCategory , 0))

net_cao.item.add(ClassificationRankItem('prediction_probability', \
ClassificationOutputType.probability , 0))
net_mat.applyOutput = net_cao 

save('NET_apply_task', net_mat)
execute('NET_apply_task')

print "Apply task for neural networks example was successfully executed"

Output:

Build task for neural networks example was successfully executed
Test task for neural networks example was successfully executed
Apply task for neural networks example was successfully executed