diff --git a/scikits/learn/lda.py b/scikits/learn/lda.py
index 0b71a4a82a01855fcda2bb1f0896507ace0f704f..25b05d8008a125496368984c08c87062ca1220ca 100644
--- a/scikits/learn/lda.py
+++ b/scikits/learn/lda.py
@@ -222,3 +222,19 @@ class LDA(BaseEstimator, ClassifierMixin):
         # compute posterior probabilities
         return likelihood / likelihood.sum(axis=1)[:, np.newaxis]
 
+    def predict_log_proba(self, X):
+        """
+        This function return posterior log-probabilities of classification
+        according to each class on an array of test vectors X.
+
+        Parameters
+        ----------
+        X : array-like, shape = [n_samples, n_features]
+
+        Returns
+        -------
+        C : array, shape = [n_samples, n_classes]
+        """
+        # XXX : can do better to avoid precision overflows
+        probas_ = self.predict_proba(X)
+        return np.log(probas_)
diff --git a/scikits/learn/qda.py b/scikits/learn/qda.py
index f0cf284177f0ad8bf1f51e67f7da0d4cb0bce780..c65fcd8ee18f643cf1cb989163184acfa6c21301 100644
--- a/scikits/learn/qda.py
+++ b/scikits/learn/qda.py
@@ -199,3 +199,20 @@ class QDA(BaseEstimator, ClassifierMixin):
         likelihood = np.exp(values - values.min(axis=1)[:, np.newaxis])
         # compute posterior probabilities
         return likelihood / likelihood.sum(axis=1)[:, np.newaxis]
+
+    def predict_log_proba(self, X):
+        """
+        This function return posterior log-probabilities of classification
+        according to each class on an array of test vectors X.
+
+        Parameters
+        ----------
+        X : array-like, shape = [n_samples, n_features]
+
+        Returns
+        -------
+        C : array, shape = [n_samples, n_classes]
+        """
+        # XXX : can do better to avoid precision overflows
+        probas_ = self.predict_proba(X)
+        return np.log(probas_)
diff --git a/scikits/learn/tests/test_lda.py b/scikits/learn/tests/test_lda.py
index 0fb1583f5f3e6608f4aefdd72ba4a9c78dea2d73..5bb82f2ab7debfadc81ab730a2ed5d29698229e3 100644
--- a/scikits/learn/tests/test_lda.py
+++ b/scikits/learn/tests/test_lda.py
@@ -1,5 +1,5 @@
 import numpy as np
-from numpy.testing import assert_array_equal
+from numpy.testing import assert_array_equal, assert_array_almost_equal
 from nose.tools import assert_true
 
 from .. import lda
@@ -29,6 +29,12 @@ def test_lda():
     y_pred1 = clf.fit(X1, y).predict(X1)
     assert_array_equal(y_pred1, y)
 
+    # Test probas estimates
+    y_proba_pred1 = clf.predict_proba(X1)
+    assert_array_equal((y_proba_pred1[:,1] > 0.5) + 1, y)
+    y_log_proba_pred1 = clf.predict_log_proba(X1)
+    assert_array_almost_equal(np.exp(y_log_proba_pred1), y_proba_pred1, 8)
+
     # Primarily test for commit 2f34950 -- "reuse" of priors
     y_pred3 = clf.fit(X, y3).predict(X)
     # LDA shouldn't be able to separate those
diff --git a/scikits/learn/tests/test_qda.py b/scikits/learn/tests/test_qda.py
index 8c699240e74b041b4edbe8f0976c44f6862a2b15..39352b2bec9ebc2cd37ce95eef709b97be592289 100644
--- a/scikits/learn/tests/test_qda.py
+++ b/scikits/learn/tests/test_qda.py
@@ -1,5 +1,5 @@
 import numpy as np
-from numpy.testing import assert_array_equal
+from numpy.testing import assert_array_equal, assert_array_almost_equal
 from nose.tools import assert_true
 
 from .. import qda
@@ -29,6 +29,12 @@ def test_qda():
     y_pred1 = clf.fit(X1, y).predict(X1)
     assert_array_equal(y_pred1, y)
 
+    # Test probas estimates
+    y_proba_pred1 = clf.predict_proba(X1)
+    assert_array_equal((y_proba_pred1[:,1] > 0.5) + 1, y)
+    y_log_proba_pred1 = clf.predict_log_proba(X1)
+    assert_array_almost_equal(np.exp(y_log_proba_pred1), y_proba_pred1, 8)
+
     y_pred3 = clf.fit(X, y3).predict(X)
     # QDA shouldn't be able to separate those
     assert_true(np.any(y_pred3 != y3))