2017-02-10 41 views
0

我擁有帶有標記爲「0」或「1」的樣本的數據集。sklearn二進制分類器的標籤值

對於正確的分類,標籤應該是「-1」還是「1」?

我不確定什麼損失函數sklearn分類器最小化。也許它依賴於值是「1」還是「-1」?

回答

1

sklearn分類器通常可以使用不同的損失函數或罰款。儘管我無法在任何地方找到這種記錄,但根據我的經驗,通常您通過的類很聰明。實際的解算器使用外部庫,因此在引擎蓋下可能會發生一些消毒。但是總體來說,我覺得這些工作開箱:

>>> from sklearn.linear_model import LogisticRegression 
>>> import numpy as np 
>>> X = np.random.randint(0,10,(20,5)) 
>>> y1 = np.random.choice([-1,1], 20) 
>>> y2 = np.random.choice([0,1], 20) 
>>> y1 
array([-1, -1, 1, -1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, 1, 
     1, -1, 1]) 
>>> y2 
array([0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0]) 
>>> model1, model2 = LogisticRegression(), LogisticRegression() 
>>> model1.fit(X,y1) 
LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True, 
      intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1, 
      penalty='l2', random_state=None, solver='liblinear', tol=0.0001, 
      verbose=0, warm_start=False) 
>>> model2.fit(X, y2) 
LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True, 
      intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1, 
      penalty='l2', random_state=None, solver='liblinear', tol=0.0001, 
      verbose=0, warm_start=False) 
>>> model1.predict(X) 
array([-1, 1, 1, -1, 1, -1, -1, 1, -1, -1, 1, 1, 1, -1, -1, -1, -1, 
     1, -1, 1]) 
>>> model2.predict(X) 
array([1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0]) 
>>> y1 
array([-1, -1, 1, -1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, 1, 
     1, -1, 1]) 
>>> y2 
array([0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0]) 

甚至:

>>> y3 = np.random.choice(['a','b'], 20) 
>>> model3 = LogisticRegression() 
>>> model3.fit(X,y3) 
LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True, 
      intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1, 
      penalty='l2', random_state=None, solver='liblinear', tol=0.0001, 
      verbose=0, warm_start=False) 
>>> model3.classes_ 
array(['a', 'b'], 
     dtype='<U1') 
>>> model3.predict(X) 
array(['b', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'b', 'b', 'a', 'a', 'a', 
     'a', 'b', 'b', 'a', 'a', 'a', 'a'], 
     dtype='<U1') 

或者,使用支持向量機:

>>> from sklearn.svm import LinearSVC 
>>> svm1 = LinearSVC() 
>>> svm1.fit(X,y1) 
LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True, 
    intercept_scaling=1, loss='squared_hinge', max_iter=1000, 
    multi_class='ovr', penalty='l2', random_state=None, tol=0.0001, 
    verbose=0) 
>>> svm1.predict(X) 
array([-1, 1, -1, -1, 1, -1, -1, 1, -1, -1, 1, 1, 1, -1, -1, -1, 1, 
     1, -1, 1]) 
>>> svm2 = LinearSVC() 
>>> svm2.fit(X,y3) 
LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True, 
    intercept_scaling=1, loss='squared_hinge', max_iter=1000, 
    multi_class='ovr', penalty='l2', random_state=None, tol=0.0001, 
    verbose=0) 
>>> svm2.predict(X) 
array(['b', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 
     'a', 'a', 'a', 'a', 'a', 'a', 'a'], 
     dtype='<U1') 

只是經常閱讀的文檔,你的分類器,我認爲如果它只是接受特定類型的標籤方案,它將被記錄。