The second constructor is important because, default parameters for Logistic Regression do not always optimize the cost function (using Batch and Batch Gradient descent). If I have to add 
```cpp
LogisticRegression( const LogisticRegressionParams& pparams=LogisticRegressionParams() ) 
```
as the first constructor (with default params initialized for LogisticRegressionParams), it is important to have other constructor to have parameters more customizable by passing the LogisticRegression params object as parameter to the constructor
```cpp
LogisticRegression::LogisticRegression(cv::InputArray data, cv::InputArray labels, const LogisticRegressionParams& params)
```