diff --git a/src/Microsoft.ML.Mkl.Components/OlsLinearRegression.cs b/src/Microsoft.ML.Mkl.Components/OlsLinearRegression.cs index 1d072c1290..af9a16574e 100644 --- a/src/Microsoft.ML.Mkl.Components/OlsLinearRegression.cs +++ b/src/Microsoft.ML.Mkl.Components/OlsLinearRegression.cs @@ -252,9 +252,13 @@ private void ComputeOneDalRegression(IChannel ch, FloatLabelCursor.Factory curso { featuresArray[rowOffset * (m - 1) + k] = 0; } - featuresArray[rowOffset * (m - 1) + j] = values[indices[j]]; + featuresArray[rowOffset * (m - 1) + indices[j]] = values[j]; i = indices[j] + 1; } + for (int j = i; j < m - 1; ++j) + { + featuresArray[rowOffset * (m - 1) + j] = 0; + } } n++; } diff --git a/src/Microsoft.ML.OneDal/OneDalUtils.cs b/src/Microsoft.ML.OneDal/OneDalUtils.cs index 061c4a3a88..269cea75e9 100644 --- a/src/Microsoft.ML.OneDal/OneDalUtils.cs +++ b/src/Microsoft.ML.OneDal/OneDalUtils.cs @@ -72,9 +72,13 @@ internal static long GetTrainData(IChannel channel, FloatLabelCursor.Factory cur { featuresList.Add(0); } - featuresList.Add(values[indices[j]]); + featuresList.Add(values[j]); i = indices[j] + 1; } + for (int j = i; j < numberOfFeatures; ++j) + { + featuresList.Add(0); + } } n++; } diff --git a/src/Microsoft.ML.StandardTrainers/Standard/LogisticRegression/LbfgsPredictorBase.cs b/src/Microsoft.ML.StandardTrainers/Standard/LogisticRegression/LbfgsPredictorBase.cs index c5008a76ca..713e457f6f 100644 --- a/src/Microsoft.ML.StandardTrainers/Standard/LogisticRegression/LbfgsPredictorBase.cs +++ b/src/Microsoft.ML.StandardTrainers/Standard/LogisticRegression/LbfgsPredictorBase.cs @@ -523,9 +523,13 @@ private protected virtual void TrainCoreOneDal(IChannel ch, RoleMappedData data) { featuresList.Add(0); } - featuresList.Add(values[indices[j]]); + featuresList.Add(values[j]); i = indices[j] + 1; } + for (int j = i; j < nFeatures; ++j) + { + featuresList.Add(0); + } } } NumGoodRows = cursor.KeptRowCount; diff --git a/src/Native/OneDalNative/OneDalAlgorithms.cpp b/src/Native/OneDalNative/OneDalAlgorithms.cpp index a02656baea..f30830614f 100644 --- a/src/Native/OneDalNative/OneDalAlgorithms.cpp +++ b/src/Native/OneDalNative/OneDalAlgorithms.cpp @@ -570,7 +570,7 @@ void logisticRegressionLBFGSComputeTemplate(FPType * featuresPtr, int * labelsPt SharedPtr> lbfgsAlgorithm(new optimization_solver::lbfgs::Batch()); lbfgsAlgorithm->parameter.batchSize = featuresTable->getNumberOfRows(); lbfgsAlgorithm->parameter.correctionPairBatchSize = featuresTable->getNumberOfRows(); - lbfgsAlgorithm->parameter.L = 1; + lbfgsAlgorithm->parameter.L = 10; lbfgsAlgorithm->parameter.m = m; lbfgsAlgorithm->parameter.accuracyThreshold = accuracyThreshold; lbfgsAlgorithm->parameter.nIterations = nIterations; @@ -642,6 +642,15 @@ void logisticRegressionLBFGSComputeTemplate(FPType * featuresPtr, int * labelsPt if (verbose) { + printf("Intercepts and coefficients:\n"); + for (size_t i = 0; i < nClasses; ++i) + { + for (size_t j = 0; j < nColumns + 1; ++j) + { + printf("%f ", betaPtr[i * (nColumns + 1) + j]); + } + printf("\n"); + } optimization_solver::iterative_solver::ResultPtr solverResult = lbfgsAlgorithm->getResult(); NumericTablePtr nIterationsTable = solverResult->get(optimization_solver::iterative_solver::nIterations); BlockDescriptor nIterationsBlock;