Menu
CoddyTech

F1 점수

Coddy Machine Learning 여정의 지도 학습 섹션에 포함된 레슨. 58개 중 23번째.

모델은 다른 하나를 포기하면 정밀도나 재현율을 최대화할 수 있습니다. F1 점수는 이 둘을 결합하며, 둘 다 높지 않으면 낮게 유지됩니다:

두 모델의 막대. 불균형: 정밀도 1, 재현율 0.1, 단순 평균 0.55, F1은 0.18에 불과함. 균형: 정밀도 0.8, 재현율 0.7, 단순 평균 0.75, F1 0.75

정밀도를 P, 재현율을 R이라고 하면 F1은 2 * P * R / (P + R)입니다. 날씨 모델의 경우:

from sklearn.metrics import f1_score, classification_report

y_test = ["sun", "sun", "rain", "rain", "snow", "sun", "rain", "snow"]
pred   = ["sun", "rain", "rain", "rain", "snow", "sun", "sun", "rain"]
print(f1_score(y_test, pred, average=None))  # 클래스별로 하나씩, 정렬된 순서로
print(classification_report(y_test, pred))

다음과 같이 출력됩니다:

[0.57142857 0.66666667 0.66666667]
              precision    recall  f1-score   support

        rain       0.50      0.67      0.57         3
        snow       1.00      0.50      0.67         2
         sun       0.67      0.67      0.67         3

    accuracy                           0.62         8
   macro avg       0.72      0.61      0.63         8
weighted avg       0.69      0.62      0.63         8

보고서는 모든 클래스를 점수화하고, support는 해당 클래스의 테스트 행 수를 셉니다. 가장 점수가 낮은 행을 보면 무엇을 먼저 수정해야 할지 알 수 있습니다.

challenge icon

챌린지

중급

재활용 공장의 카메라는 물품을 유리, 금속, 종이, 플라스틱 통으로 분류합니다. 프로그램은 k를 읽고, 시작 코드는 카메라의 k-NN을 학습시키고 pred를 채우며 bins를 나열합니다.

  1. 분류 보고서를 출력하세요.
  2. F1이 가장 낮은 통을 찾아 출력한 다음, 아래와 같이 그 통의 더 약한 쪽인 정밀도 또는 재현율을 출력하세요(소수점 3자리).

보고서 다음에, 다른 공장의 경우:

Weakest bin: metal, F1 0.667
Its weaker side: recall 0.571

직접 해보기

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import classification_report, f1_score, precision_score, recall_score

k = int(input())

# 벨트 위 각 물품당 한 행씩 있으며, 해당 물품이 들어갈 분류함이 표시됨
items = pd.read_csv("recycling.csv")
features = ["weight_g", "shine", "see_through", "bend"]
X_train, X_test, y_train, y_test = train_test_split(items[features], items["material"], test_size=0.25, random_state=0)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# 카메라의 모델
model = KNeighborsClassifier(n_neighbors=k)
model.fit(X_train, y_train)
pred = model.predict(X_test)
# 클래스별 점수가 나오는 순서대로 나열된 분류함
bins = model.classes_

# 아래에 코드를 작성하세요
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

지도 학습의 모든 레슨

직접 연습해 보세요: 온라인 Python 컴파일러