소셜 네트워크 게시물 인식 모델을 훈련 시키려고하는데 이상한 일이 생겼습니다. 사용자 게시물의 텍스트를 받고 모델이 한 클래스를 예측하지만 가장 높은 확률은 다른 클래스에 해당합니다. 아래에 가장 간단한 예가 있지만 다른 모델에서 찾은 것과 동일합니다. 내가 predict_proba 방법에 대해 이해하지 못할 수도 있습니다.
모델:
texts = np.array(get_train_texts()[0])
labels = np.array(get_train_texts()[1])
X_train, X_test, y_train, y_test = train_test_split(texts, labels,
test_size=0.25, random_state=True)
gbc_model = Pipeline([
('tf_idf', TfidfVectorizer()),
('gbc', GradientBoostingClassifier(n_estimators=128,
max_depth=16,
criterion='friedman_mse'))])
gbc_model.fit(X_train, y_train)
text_to_recognize = [get_post(id, offset, access_token)]
label = gbc_model.predict(text_to_recognize)
grades = gbc_model.predict_proba(text_to_recognize)
grades = [f'{classes[i]}: {round(grades[0][i] * 100, 4)} %' for i in range(len(classes))]
산출:
...
['science']
['science: 3.6298 %', 'cinema: 1.0597 %', 'IT: 1.5812 %', 'art: 2.1504 %', 'games: 91.5788 %']
따라서 학년에서 argmax를 선택하면 "과학"대신 잘못된 클래스 "게임"이 표시됩니다.
grades = gbc_model.predict_proba(text_to_recognize)
result = classes[np.argmax(grades)]
print(result)
산출:
['science']
['science: 3.6298 %', 'cinema: 1.0597 %', 'IT: 1.5812 %', 'art: 2.1504 %', 'games: 91.5788 %']
games
왜 발생합니까?
gbc 모델은 사용하는 것과 다른 클래스 순서를 사용합니다. 을 선택 classes[i]
하지만에서 사용하는 클래스의 색인 GradientBoostingClassifier
이 동일 하다는 보장은 없습니다 .
실제로 분류기 는 클래스를 알파벳순으로 정렬 하여 과학을 마지막 클래스로 만들고 가장 확률이 높은 클래스로 만듭니다. 이것이 내부 gbc_model.classes_
속성 또는 LabelEncoder
.
즉, 모든 것이 분류기와 잘 어울립니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다