Skip to content

Commit

Permalink
Fetch one feature vector at a time instead of the whole feature matri…
Browse files Browse the repository at this point in the history
…x for potential large-scale training.
  • Loading branch information
pluskid committed Apr 9, 2012
1 parent 1179258 commit f87cd67
Showing 1 changed file with 7 additions and 6 deletions.
13 changes: 7 additions & 6 deletions src/shogun/classifier/GaussianNaiveBayes.cpp
Expand Up @@ -126,13 +126,13 @@ bool CGaussianNaiveBayes::train(CFeatures* data)
m_label_prob.zero();
m_rates.zero();

SGMatrix<float64_t> feature_matrix = m_features->get_computed_dot_feature_matrix();

// get sum of features among labels
for (i=0; i<train_labels.vlen; i++)
{
SGVector<float64_t> fea = m_features->get_computed_dot_feature_vector(i);
for (j=0; j<m_dim; j++)
m_means(j, train_labels.vector[i]) += feature_matrix.matrix[i*m_dim+j];
m_means(j, train_labels.vector[i]) += fea.vector[j];
fea.free_vector();

m_label_prob.vector[train_labels.vector[i]]+=1.0;
}
Expand All @@ -147,11 +147,13 @@ bool CGaussianNaiveBayes::train(CFeatures* data)
// compute squared residuals with means available
for (i=0; i<train_labels.vlen; i++)
{
SGVector<float64_t> fea = m_features->get_computed_dot_feature_vector(i);
for (j=0; j<m_dim; j++)
{
m_variances(j, train_labels.vector[i]) +=
CMath::sq(feature_matrix.matrix[i*m_dim+j]-m_means(j, train_labels.vector[i]));
m_variances(j, train_labels.vector[i]) +=
CMath::sq(fea[j]-m_means(j, train_labels.vector[i]));
}
fea.free_vector();
}

// get variance of features of labels
Expand All @@ -167,7 +169,6 @@ bool CGaussianNaiveBayes::train(CFeatures* data)
m_label_prob.vector[i]/= m_num_classes;
}

feature_matrix.free_matrix();
train_labels.free_vector();

return true;
Expand Down

0 comments on commit f87cd67

Please sign in to comment.