57 import daal.algorithms.optimization_solver
as optimization_solver
58 import daal.algorithms.optimization_solver.mse
59 import daal.algorithms.optimization_solver.lbfgs
60 import daal.algorithms.optimization_solver.iterative_solver
62 from daal.data_management
import (
63 DataSourceIface, FileDataSource, HomogenNumericTable, MergedNumericTable, NumericTableIface
66 utils_folder = os.path.realpath(os.path.abspath(os.path.dirname(os.path.dirname(__file__))))
67 if utils_folder
not in sys.path:
68 sys.path.insert(0, utils_folder)
69 from utils
import printNumericTable
71 datasetFileName = os.path.join(
'..',
'data',
'batch',
'lbfgs.csv')
75 nIterations = halfNIterations * 2
78 initialPoint = np.array([[100], [100], [100], [100], [100], [100], [100], [100], [100], [100], [100]], dtype=np.float64)
79 expectedPoint = np.array([[11], [ 1], [ 2], [ 3], [ 4], [ 5], [ 6], [ 7], [ 8], [ 9], [ 10]], dtype=np.float64)
81 if __name__ ==
"__main__":
84 dataSource = FileDataSource(datasetFileName,
85 DataSourceIface.notAllocateNumericTable,
86 DataSourceIface.doDictionaryFromContext)
89 data = HomogenNumericTable(nFeatures, 0, NumericTableIface.doNotAllocate)
90 dependentVariables = HomogenNumericTable(1, 0, NumericTableIface.doNotAllocate)
91 mergedData = MergedNumericTable(data, dependentVariables)
94 dataSource.loadDataBlock(mergedData)
96 mseObjectiveFunction = optimization_solver.mse.Batch(data.getNumberOfRows())
97 mseObjectiveFunction.input.set(optimization_solver.mse.data, data)
98 mseObjectiveFunction.input.set(optimization_solver.mse.dependentVariables, dependentVariables)
101 lbfgsAlgorithm = optimization_solver.lbfgs.Batch(mseObjectiveFunction)
102 lbfgsAlgorithm.parameter.nIterations = halfNIterations
103 lbfgsAlgorithm.parameter.stepLengthSequence = HomogenNumericTable(1, 1, NumericTableIface.doAllocate, stepLength)
104 lbfgsAlgorithm.parameter.optionalResultRequired =
True
107 lbfgsAlgorithm.input.setInput(optimization_solver.iterative_solver.inputArgument, HomogenNumericTable(initialPoint))
111 res = lbfgsAlgorithm.compute()
114 printNumericTable(res.getResult(optimization_solver.iterative_solver.minimum),
"Resulting coefficients after first compute():")
115 printNumericTable(res.getResult(optimization_solver.iterative_solver.nIterations),
"Number of iterations performed:")
118 lbfgsAlgorithm.input.setInput(optimization_solver.iterative_solver.inputArgument, res.getResult(optimization_solver.iterative_solver.minimum))
119 lbfgsAlgorithm.input.setInput(optimization_solver.iterative_solver.optionalArgument, res.getResult(optimization_solver.iterative_solver.optionalResult))
122 res = lbfgsAlgorithm.compute()
124 expectedCoefficients = HomogenNumericTable(expectedPoint)
127 printNumericTable(expectedCoefficients,
"Expected coefficients:")
128 printNumericTable(res.getResult(optimization_solver.iterative_solver.minimum),
"Resulting coefficients after second compute():")
129 printNumericTable(res.getResult(optimization_solver.iterative_solver.nIterations),
"Number of iterations performed:")