<p>I think the problem may be more complicated. I am using c++/g++ of mac (which actually mean clang). </p>
<p>Consider the code:<br>
<code><br>
cout<< X.n_cols<< "\t"<< Y.n_elem<< endl;<br>
mlpack::regression::LogisticRegressionmlpack::optimization::L_BFGS LG(X,Y,w,0.0001);<br>
</code><br>
I also modified lmpack bound check in 'two' places:</p>
<ol>
<li>
<p>In logistic_regression_impl.hpp:<br>
<code><br>
template class OptimizerType><br>
LogisticRegression::LogisticRegression(<br>
const arma::mat& predictors,<br>
const arma::vec& responses,<br>
const arma::mat& initialPoint,<br>
const double lambda) :<br>
parameters(arma::zerosarma::vec(predictors.n_rows + 1)),<br>
lambda(lambda)<br>
{<br>
//std::cout<< "Here OK!"<< std::endl;<br>
if (responses.n_elem != predictors.n_cols)<br>
Log::Fatal << "LogisticRegression::LogisticRegression(): "<br>
<< "predictors matrix has " << predictors.n_cols << " points, but "<br>
<< "responses vector has " << responses.n_elem << " elements (should be"<br>
<< " " << predictors.n_cols << ")!" << std::endl;</code></p>
<code>
<p>LogisticRegressionFunction errorFunction(predictors, responses, lambda);<br>
errorFunction.InitialPoint() = initialPoint;<br>
OptimizerType optimizer(errorFunction);</p>
<p>// Train the model.<br>
Timer::Start("logistic_regression_optimization");<br>
const double out = optimizer.Optimize(parameters);<br>
Timer::Stop("logistic_regression_optimization");</p>
</code><p><code>Log::Info << "LogisticRegression::LogisticRegression(): final objective of "<br>
<< "trained model is " << out << "." << std::endl;<br>
}<br>
</code></p>
</li>
</ol>
<p>And in logistic_regression_function.cpp (I added bound-check and renamed variables because I was thinking missing (*this) may be a problem for some compilers.)</p>
<p><code><br>
LogisticRegressionFunction::LogisticRegressionFunction(<br>
const arma::mat& predictors_,<br>
const arma::vec& responses_,<br>
const double lambda_) :<br>
predictors(predictors_),<br>
responses(responses_),<br>
lambda(lambda_)<br>
{<br>
std::cout<< responses_.n_elem <<"\t"<< predictors_.n_cols<< std::endl;<br>
initialPoint = arma::zerosarma::mat(predictors.n_rows + 1, 1);<br>
// Sanity check.<br>
if (responses.n_elem != predictors.n_cols)<br>
Log::Fatal << "LogisticRegressionFunction::LogisticRegressionFunction(): "<br>
<< "predictors matrix has " << predictors.n_cols << " points, but "<br>
<< "responses vector has " << responses.n_elem << " elements (should be"<br>
<< " " << predictors.n_cols << ")!" << std::endl;<br>
}<br>
</code></p>
<p>The output reads:<br>
<code><br>
5000 5000<br>
1 0<br>
</code><br>
Which means X, Y are passed to LogisticRegression properly, by not properly passed to LogisticRegressionFunction. I have not idea that can happen. Do you see any reason? (I ran the similar code in linux yesterday and found no problem, so it is likely because of the compiler clang?).</p>
<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br>Reply to this email directly or <a href="https://github.com/mlpack/mlpack/issues/428#issuecomment-111815633">view it on GitHub</a>.<img alt="" height="1" src="https://github.com/notifications/beacon/AJ4bFC73Lxdl4ohepLcYgu8EpYj1729Uks5oTWDQgaJpZM4D3Y7n.gif" width="1" /></p>
<div itemscope itemtype="http://schema.org/EmailMessage">
<div itemprop="action" itemscope itemtype="http://schema.org/ViewAction">
<link itemprop="url" href="https://github.com/mlpack/mlpack/issues/428#issuecomment-111815633"></link>
<meta itemprop="name" content="View Issue"></meta>
</div>
<meta itemprop="description" content="View this Issue on GitHub"></meta>
</div>