sklearn.GridSearchCV를 sklearn.SVC (확률 = True)보다 높게 사용하면 훈련 데이터가 작고 균형이 맞으면 근본적으로 다른 예측/모델이 반환됩니다. (작고 불균형). 이 예제를 고려하십시오, 불균형 데이터 수익률을 사용하여 훈련 모델에 하나 기대 일반적으로 결과 만 반면작은 평형 데이터 세트로 GridSearchCV를 사용할 때 sklearn.SVC가 근본적으로 다른 예측 (모델)을 반환합니다
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
from sklearn import svm, datasets
iris = datasets.load_iris()
# Take the first two features. We could avoid this by using a two-dim dataset
X = iris.data[:, :2]
y = iris.target
index = [0,1,2,3,51,52,53,54]
index_unequal = [0,1,2,3,51,52,53,54,55]
new_predictions = [5, 6, 7, 56, 57, 58]
pred_mat, pred_y = X[new_predictions], y[new_predictions]
c_s = [0.01, 0.1, 1.0, 10.0, 100.0]
gamma = [1e-4, 1e-3, 1e-2, 1e-1, 1, 10]
svc_params = [{'kernel': ['rbf'], 'gamma': gamma, 'C': c_s},
{'kernel': ['linear'], 'C': c_s}]
mat, ye = X[index], y[index]
mat_unequal, y_unequal = X[index_unequal], y[index_unequal]
balanced = GridSearchCV(SVC(probability=True), svc_params, cv=4).fit(mat, ye)
unbalanced = GridSearchCV(SVC(probability=True), svc_params, cv=4).fit(mat_unequal, y_unequal)
print(balanced.predict_proba(pred_mat))
print(unbalanced.predict_proba(pred_mat))
균형 데이터에 대한 교육 모델은 모든 새로운 데이터를 0.5
의 확률을 반환합니다. 이 예제에서 사용 된 훈련 데이터는 작지만 1의 차이 만 있으면, 나는 근본적으로 다른 모델/확률을주기 위해 어떤 메커니즘이 변경되는지 궁금합니다.
업데이트 # 1 좀 더이 파고 아래 비벡의 반응을 고려하면 (정말 좋은 링크 감사합니다!), predict
과 predict_proba
의 차이를 이해하는 것은 전투 반이다. 확률을 최적화하고 결정 기능을 최적화하는 GridSearch에 대한 채점 기능을 선택할 수 있습니다 (예 : scoring='neg_log_loss'
을 GridSearchCV
호출에 추가). 이것은 두 모델간에 더 좋은 결과를 가져올 것입니다. 그러나, 나는 여전히 위에 언급 된 문제의 결과에 대해 궁금합니다. 두 모델의 차이점을 살펴보면 두 가지 차이점은 추가 데이터 및 교차 유효성 검사 생성 도구 (예 : StratifiedKFold
의 cv 속성)가 데이터를 분할하는 방식입니다. 예를 들어, 이러한 성층 K 배의 모든 인덱스를 고려해
balanced_cv_iter = [(np.array([1, 2, 3, 5, 6, 7]), np.array([0, 4])),
(np.array([0, 2, 3, 4, 6, 7]), np.array([1, 5])),
(np.array([0, 1, 3, 4, 5, 7]), np.array([2, 6])),
(np.array([0, 1, 2, 4, 5, 6]), np.array([3, 7]))]
unbalanced_cv_iter = [(np.array([1, 2, 3, 6, 7, 8]), np.array([0, 4, 5])),
(np.array([0, 2, 3, 4, 5, 7, 8]), np.array([1, 6])),
(np.array([0, 1, 3, 4, 5, 6, 8]), np.array([2, 7])),
(np.array([0, 1, 2, 4, 5, 6, 7]), np.array([3, 8]))]
balanced_cv_iter_new = [(np.array([1, 2, 3, 5, 6]), np.array([0, 4, 7])),
(np.array([0, 2, 3, 4, 6, 7, 1]), np.array([5])),
(np.array([0, 1, 3, 4, 5, 7, 2]), np.array([6])),
(np.array([0, 1, 2, 4, 5, 6]), np.array([3, 7]))]
balanced_cv_iter
및 unbalanced_cv_iter
두 모델 트레이닝/테스트 데이터를 상기 코드와 관련하여 발생하는 두 가능성리스트이다. 그러나 우리가 balanced_cv_iter
을 훈련/시험에 몇 가지 홀수 개의 요소 (불평형 열차/시험 세트)를 갖도록 변경하면 balanced_cv_iter_new
을 얻을 수 있습니다. 이렇게하면 균형 모델과 불균형 모델 모두에서 유사한 예측이 발생합니다. 여기 모델의 의도 된 사용을 최적화하기위한 교훈이 있다고 생각합니다. (즉, 모델 사용과 일치하는 채점 기능 선택)? 그러나 GridSearch가 왜 불균형 프레임 워크에서 더 나은 확률 모델로 이어지는 하이퍼 매개 변수가있는 SVM 평가기를 선택하는지에 대한 추가 생각/의견이 있으면 알려 드리고 싶습니다.
Vivek,이 문제를 조사해 주셔서 감사합니다. 위의 게시물을 업데이트하고 의견 및 링크를 사용하여 다른 사용자를위한 하나의 잠재적 솔루션을 설명합니다. 그러나 불균형 설계가 왜이 경우 더 나은 확률 모델로 이어지는 지에 대해 궁금합니다. (심지어 불균형 설계를 유도하는 교차 유효성 검사 객체를 선택할 때조차도). – benneely