Scikit Learn SVC decision_function et de prédire

J'essaie de comprendre la relation entre decision_function et de prévoir, qui sont des méthodes d'instance de la SVC (http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html). Jusqu'à présent, j'ai compris que la décision de la fonction retourne deux à deux les scores entre les classes. J'étais sous l'impression que prédire choisit la classe qui maximise ses paires score, mais j'ai testé ce et a obtenu des résultats différents. Voici le code que j'utilisais pour essayer de bien comprendre la relation entre les deux. D'abord, j'ai généré le paires score de la matrice, et puis j'ai imprimé la classe qui a maximale par paires score qui était différente de celle de la classe prédite par la fcf.prédire.

        result = clf.decision_function(vector)[0]
        counter = 0
        num_classes = len(clf.classes_)
        pairwise_scores = np.zeros((num_classes, num_classes))
        for r in xrange(num_classes):
            for j in xrange(r + 1, num_classes):
                pairwise_scores[r][j] = result[counter]
                pairwise_scores[j][r] = -result[counter]
                counter += 1

        index = np.argmax(pairwise_scores)
        class = index_star / num_classes
        print class
        print clf.predict(vector)[0]

Personne ne sait la relation entre ces prédire et decision_function?

  • "la prise de fonction retourne deux à deux les scores entre les classes" est incorrecte. Il doit être le "score pour chaque classe" comme il est écrit dans la page de documentation pour decision_function partie: "la Distance des échantillons de X à la séparation hyperplane."
  • non, l'OP est correct. sklearn.svm.SVC utilise des paires (un contre un) décomposition par défaut et les retours des distances pour tous les n(n-1)/2 hyperplans pour chaque échantillon.
  • Oups, oui, j'ai souvenu d'avoir lu ça quelque part. mais il a été induit en erreur par la documentation. Désolé!
  • Après une tentative de réponse, je pense que bcorso la réponse devrait être le seul. La relation est en fait basé sur le code, il a traduit de l'implémentation C++: decision = decision_function(params, sv, nv, a, b, X); votes = [(i if decision[p] > 0 else j) for p,(i,j) in enumerate((i,j) for i in range(len(cs)) for j in range(i+1,len(cs)))]. La majorité de votes est essentiellement ce predict n'.
InformationsquelleAutor Peter Tseng | 2013-11-21