31 import daal.algorithms.optimization_solver
as optimization_solver
32 import daal.algorithms.optimization_solver.cross_entropy_loss
33 import daal.algorithms.optimization_solver.lbfgs
34 import daal.algorithms.optimization_solver.iterative_solver
36 from daal.data_management
import (
37 DataSourceIface, FileDataSource, HomogenNumericTable, MergedNumericTable, NumericTableIface
40 utils_folder = os.path.realpath(os.path.abspath(os.path.dirname(os.path.dirname(__file__))))
41 if utils_folder
not in sys.path:
42 sys.path.insert(0, utils_folder)
43 from utils
import printNumericTable
45 datasetFileName = os.path.join(
'..',
'data',
'batch',
'logreg_train.csv')
52 if __name__ ==
"__main__":
55 dataSource = FileDataSource(datasetFileName,
56 DataSourceIface.notAllocateNumericTable,
57 DataSourceIface.doDictionaryFromContext)
60 data = HomogenNumericTable(nFeatures, 0, NumericTableIface.doNotAllocate)
61 dependentVariables = HomogenNumericTable(1, 0, NumericTableIface.doNotAllocate)
62 mergedData = MergedNumericTable(data, dependentVariables)
65 dataSource.loadDataBlock(mergedData)
67 func = optimization_solver.cross_entropy_loss.Batch(nClasses, data.getNumberOfRows())
68 func.input.set(optimization_solver.cross_entropy_loss.data, data)
69 func.input.set(optimization_solver.cross_entropy_loss.dependentVariables, dependentVariables)
72 algorithm = optimization_solver.lbfgs.Batch(func)
73 algorithm.parameter.nIterations = nIterations
74 algorithm.parameter.stepLengthSequence = HomogenNumericTable(1, 1, NumericTableIface.doAllocate, stepLength)
77 nParameters = nClasses * (nFeatures + 1)
78 initialPoint = np.full((nParameters, 1), 0.001, dtype=np.float64)
79 algorithm.input.setInput(optimization_solver.iterative_solver.inputArgument, HomogenNumericTable(initialPoint))
83 res = algorithm.compute()
85 expectedPoint = np.array([[-2.277], [2.836], [14.985], [0.511], [7.510], [-2.831], [-5.814], [-0.033], [13.227], [-24.447], [3.730],
86 [10.394], [-10.461], [-0.766], [0.077], [1.558], [-1.133], [2.884], [-3.825], [7.699], [2.421], [-0.135], [-6.996], [1.785], [-2.294], [-9.819], [1.692],
87 [-0.725], [0.069], [-8.41], [1.458], [-3.306], [-4.719], [5.507], [-1.642]], dtype=np.float64)
88 expectedCoefficients = HomogenNumericTable(expectedPoint)
91 printNumericTable(expectedCoefficients,
"Expected coefficients:")
92 printNumericTable(res.getResult(optimization_solver.iterative_solver.minimum),
"Resulting coefficients:")
93 printNumericTable(res.getResult(optimization_solver.iterative_solver.nIterations),
"Number of iterations performed:")