lỗi phân loại SVM của sklearn
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
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]