This page says that SVC minimizes sum(square(w)) + C * sum(margins) I believe it actually minimizes sum(square(w)) + C * mean(margins)
This may seem like a pedantic distinction but it's very important for being able to compare sklearn to other svm implementations. Am I correct that SVC minimizes the mean rather than the sum of the margins? If so the doc should be updated. The following script demonstrates that fitting two copies of X and y with C=1 is equivalent to fitting just X,y with C=1 and is not equivalent to fitting X,y with C=2. If SVC followed the doc we would expect the opposite result in both cases. import numpy as np rng = np.random.RandomState([1,2,3]) from sklearn.svm import SVC svm_type = SVC(kernel = 'linear', C = 1.) X = rng.randn(100,5) W = rng.randn(5,5) y = np.dot(X,W).argmax(axis=1) print 'fitting svm 1' svm1 = svm_type.fit(X,y) print 'fitting svm 2' svm2 = svm_type.fit(np.concatenate([X,X],axis=0), np.concatenate([y,y],axis=0)) idiff = np.abs(svm1.intercept_-svm2.intercept_).max() wdiff = np.abs(svm1.coef_-svm2.coef_).max() print max(idiff,wdiff) svm3 = SVC(kernel = 'linear', C = 2.).fit(X,y) print np.abs(svm1.intercept_-svm3.intercept_).max() ------------------------------------------------------------------------------ Keep Your Developer Skills Current with LearnDevNow! The most comprehensive online learning library for Microsoft developers is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3, Metro Style Apps, more. Free future releases when you subscribe now! http://p.sf.net/sfu/learndevnow-d2d _______________________________________________ Scikit-learn-general mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/scikit-learn-general
