lỗi phân loại SVM của sklearn

Oct 04 2020

Tôi đang cố lắp một bộ phân loại tầm thường nhưng không chắc mình đang làm gì sai. Tôi đang cung cấp bộ phân loại tuyến tính svm.SVC của scikit-learning với hai mẫu X = [[0.], [0,5]] và nhãn y = [0, 1] và tôi nhận được một phân loại hoàn hảo nhưng sau đó khi tôi thêm một nhãn khác được gắn thẻ lấy mẫu thành X của [0,4], và nhãn tương ứng từ 1 đến y, và cố gắng khớp lại, phân loại không thành công và tôi luôn nhận được dự đoán là 1. Tại sao nó không thành công?

Mã mẫu:

from sklearn import svm
import numpy as np


clf = svm.SVC(C=1, kernel='linear')
X = [[0.], [0.5]]
y = [0, 1]
clf.fit(X, y)

print('coefs: ', clf.coef_)
print('svs: ', clf.support_vectors_)

if np.all(y == clf.predict(X)):
    print('classification worked')
else:
    print('classification failed:')
print('X=', X, ',y=', y, ' ,prediction=', clf.predict(X))

print('\n\n')

X.append([0.4])
y.append(1)

clf = svm.SVC(C=1, kernel='linear')
clf.fit(X, y)

print('coefs: ', clf.coef_)
print('svs: ', clf.support_vectors_)


if np.all(y == clf.predict(X)):
    print('classification worked')
else:
    print('classification failed:')
print('X=', X, ',y=', y, ' ,prediction=', clf.predict(X))

và đầu ra:

coefs:  [[0.5]]
svs:  [[0. ]
 [0.5]]
classification worked
X= [[0.0], [0.5]] ,y= [0, 1]  ,prediction= [0 1]


coefs:  [[0.4]]
svs:  [[0. ]
 [0.4]]
classification failed:
X= [[0.0], [0.5], [0.4]] ,y= [0, 1, 1]  ,prediction= [1 1 1]

Trả lời

1 gunes Oct 04 2020 at 15:47

Có sự cân bằng giữa độ rộng ký quỹ và lỗi phân loại sai (tùy thuộc vào các biến độ chùng). Hình như$C=1$ủng hộ độ rộng lề nhiều hơn. Nếu bạn tăng nó lên, buộc nó phải phạt việc phân loại sai nghiêm trọng hơn, nó sẽ tìm thấy một điểm phân tách tốt hơn .

from sklearn import svm
import numpy as np


clf = svm.SVC(C=1, kernel='linear')
X = [[0.], [0.5]]
y = [0, 1]
clf.fit(X, y)

print('coefs: ', clf.coef_)
print('svs: ', clf.support_vectors_)

if np.all(y == clf.predict(X)):
    print('classification worked')
else:
    print('classification failed:')
print('X=', X, ',y=', y, ' ,prediction=', clf.predict(X))

print('\n\n')

X.append([0.4])
y.append(1)

clf = svm.SVC(C=10, kernel='linear')
clf.fit(X, y)

print('coefs: ', clf.coef_)
print('svs: ', clf.support_vectors_)


if np.all(y == clf.predict(X)):
    print('classification worked')
else:
    print('classification failed:')
print('X=', X, ',y=', y, ' ,prediction=', clf.predict(X))

cái nào mang lại những điều sau đây

coefs:  [[0.5]]
svs:  [[0. ]
 [0.5]]
classification worked
X= [[0.0], [0.5]] ,y= [0, 1]  ,prediction= [0 1]



coefs:  [[4.]]
svs:  [[0. ]
 [0.4]]
classification worked
X= [[0.0], [0.5], [0.4]] ,y= [0, 1, 1]  ,prediction= [0 1 1]