diff --git a/doc/whats_new.rst b/doc/whats_new.rst index 6978d3943b2219b9a84a05457d891e3bb114bede..ce72f193ed8ddf1a4417c6f03631dfa9d839c867 100644 --- a/doc/whats_new.rst +++ b/doc/whats_new.rst @@ -262,6 +262,9 @@ Bug fixes - Fixed a bug in :class:`manifold.TSNE` where it stored the incorrect ``kl_divergence_``. :issue:`6507` by :user:`Sebastian Saeger <ssaeger>`. + - Fixed a bug in :class:`svm.OneClassSVM` where it returned floats instead of + integer classes. :issue:`8676` by :user:`Vathsala Achar <VathsalaAchar>`. + API changes summary ------------------- diff --git a/sklearn/svm/classes.py b/sklearn/svm/classes.py index 2de3029cb2f26d1298d2f6bd76739ded543df10c..8b7d2f42bdb5a8aa53c6f40b0d013f8c5dc4dff1 100644 --- a/sklearn/svm/classes.py +++ b/sklearn/svm/classes.py @@ -1064,3 +1064,24 @@ class OneClassSVM(BaseLibSVM): """ dec = self._decision_function(X) return dec + + def predict(self, X): + """ + Perform classification on samples in X. + + For an one-class model, +1 or -1 is returned. + + Parameters + ---------- + X : {array-like, sparse matrix}, shape (n_samples, n_features) + For kernel="precomputed", the expected shape of X is + [n_samples_test, n_samples_train] + + Returns + ------- + y_pred : array, shape (n_samples,) + Class labels for samples in X. + """ + y = super(OneClassSVM, self).predict(X) + return np.asarray(y, dtype=np.intp) + diff --git a/sklearn/svm/tests/test_svm.py b/sklearn/svm/tests/test_svm.py index 0f85be117a9ac766c52ab85472077a30a229fe09..daf35f82a39e5f91c9bb9c35ef55d4fa19f50185 100644 --- a/sklearn/svm/tests/test_svm.py +++ b/sklearn/svm/tests/test_svm.py @@ -241,7 +241,8 @@ def test_oneclass(): clf.fit(X) pred = clf.predict(T) - assert_array_almost_equal(pred, [-1, -1, -1]) + assert_array_equal(pred, [-1, -1, -1]) + assert_equal(pred.dtype, np.dtype('intp')) assert_array_almost_equal(clf.intercept_, [-1.008], decimal=3) assert_array_almost_equal(clf.dual_coef_, [[0.632, 0.233, 0.633, 0.234, 0.632, 0.633]],