57 from daal.algorithms.classifier.quality_metric
import multiclass_confusion_matrix
58 from daal.algorithms
import svm
59 from daal.algorithms
import kernel_function
60 from daal.algorithms
import multi_class_classifier
61 from daal.algorithms
import classifier
62 from daal.data_management
import (
63 DataSourceIface, FileDataSource, readOnly, BlockDescriptor, HomogenNumericTable,
64 NumericTableIface, MergedNumericTable
67 utils_folder = os.path.realpath(os.path.abspath(os.path.dirname(os.path.dirname(__file__))))
68 if utils_folder
not in sys.path:
69 sys.path.insert(0, utils_folder)
70 from utils
import printNumericTables, printNumericTable
73 DATA_PREFIX = os.path.join(
'..',
'data',
'batch')
74 trainDatasetFileName = os.path.join(DATA_PREFIX,
'svm_multi_class_train_dense.csv')
75 testDatasetFileName = os.path.join(DATA_PREFIX,
'svm_multi_class_test_dense.csv')
80 training = svm.training.Batch(fptype=np.float64)
81 prediction = svm.prediction.Batch(fptype=np.float64)
85 predictionResult =
None 88 kernel = kernel_function.linear.Batch(fptype=np.float64)
90 qualityMetricSetResult =
None 91 predictedLabels =
None 92 groundTruthLabels =
None 99 trainDataSource = FileDataSource(
100 trainDatasetFileName, DataSourceIface.notAllocateNumericTable,
101 DataSourceIface.doDictionaryFromContext
105 trainData = HomogenNumericTable(nFeatures, 0, NumericTableIface.doNotAllocate)
106 trainGroundTruth = HomogenNumericTable(1, 0, NumericTableIface.doNotAllocate)
107 mergedData = MergedNumericTable(trainData, trainGroundTruth)
110 trainDataSource.loadDataBlock(mergedData)
113 algorithm = multi_class_classifier.training.Batch(nClasses,fptype=np.float64)
115 algorithm.parameter.training = training
116 algorithm.parameter.prediction = prediction
119 algorithm.input.set(classifier.training.data, trainData)
120 algorithm.input.set(classifier.training.labels, trainGroundTruth)
123 trainingResult = algorithm.compute()
127 global predictionResult, groundTruthLabels
130 testDataSource = FileDataSource(
131 testDatasetFileName, DataSourceIface.doAllocateNumericTable,
132 DataSourceIface.doDictionaryFromContext
136 testData = HomogenNumericTable(nFeatures, 0, NumericTableIface.doNotAllocate)
137 groundTruthLabels = HomogenNumericTable(1, 0, NumericTableIface.doNotAllocate)
138 mergedData = MergedNumericTable(testData, groundTruthLabels)
141 testDataSource.loadDataBlock(mergedData)
144 algorithm = multi_class_classifier.prediction.Batch(nClasses,fptype=np.float64)
146 algorithm.parameter.training = training
147 algorithm.parameter.prediction = prediction
150 algorithm.input.setTable(classifier.prediction.data, testData)
151 algorithm.input.setModel(classifier.prediction.model, trainingResult.get(classifier.training.model))
154 predictionResult = algorithm.compute()
157 def testModelQuality():
158 global predictedLabels, qualityMetricSetResult
161 predictedLabels = predictionResult.get(classifier.prediction.prediction)
164 qualityMetricSet = multi_class_classifier.quality_metric_set.Batch(nClasses)
165 input = qualityMetricSet.getInputDataCollection().getInput(multi_class_classifier.quality_metric_set.confusionMatrix)
167 input.set(multiclass_confusion_matrix.predictedLabels, predictedLabels)
168 input.set(multiclass_confusion_matrix.groundTruthLabels, groundTruthLabels)
172 qualityMetricSetResult = qualityMetricSet.compute()
178 groundTruthLabels, predictedLabels,
179 "Ground truth",
"Classification results",
180 "SVM classification results (first 20 observations):", 20, interval=15, flt64=
False 183 qualityMetricResult = qualityMetricSetResult.getResult(multi_class_classifier.quality_metric_set.confusionMatrix)
184 printNumericTable(qualityMetricResult.get(multiclass_confusion_matrix.confusionMatrix),
"Confusion matrix:")
186 block = BlockDescriptor()
187 qualityMetricsTable = qualityMetricResult.get(multiclass_confusion_matrix.multiClassMetrics)
188 qualityMetricsTable.getBlockOfRows(0, 1, readOnly, block)
189 qualityMetricsData = block.getArray().flatten()
190 print(
"Average accuracy: {0:.3f}".format(qualityMetricsData[multiclass_confusion_matrix.averageAccuracy]))
191 print(
"Error rate: {0:.3f}".format(qualityMetricsData[multiclass_confusion_matrix.errorRate]))
192 print(
"Micro precision: {0:.3f}".format(qualityMetricsData[multiclass_confusion_matrix.microPrecision]))
193 print(
"Micro recall: {0:.3f}".format(qualityMetricsData[multiclass_confusion_matrix.microRecall]))
194 print(
"Micro F-score: {0:.3f}".format(qualityMetricsData[multiclass_confusion_matrix.microFscore]))
195 print(
"Macro precision: {0:.3f}".format(qualityMetricsData[multiclass_confusion_matrix.macroPrecision]))
196 print(
"Macro recall: {0:.3f}".format(qualityMetricsData[multiclass_confusion_matrix.macroRecall]))
197 print(
"Macro F-score: {0:.3f}".format(qualityMetricsData[multiclass_confusion_matrix.macroFscore]))
198 qualityMetricsTable.releaseBlockOfRows(block)
200 if __name__ ==
"__main__":
201 training.parameter.cacheSize = 100000000
202 training.parameter.kernel = kernel
203 prediction.parameter.kernel = kernel