F1 점수
Coddy Machine Learning 여정의 지도 학습 섹션에 포함된 레슨. 58개 중 23번째.
모델은 다른 하나를 포기하면 정밀도나 재현율을 최대화할 수 있습니다. F1 점수는 이 둘을 결합하며, 둘 다 높지 않으면 낮게 유지됩니다:
정밀도를 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는 해당 클래스의 테스트 행 수를 셉니다. 가장 점수가 낮은 행을 보면 무엇을 먼저 수정해야 할지 알 수 있습니다.
챌린지
중급재활용 공장의 카메라는 물품을 유리, 금속, 종이, 플라스틱 통으로 분류합니다. 프로그램은 k를 읽고, 시작 코드는 카메라의 k-NN을 학습시키고 pred를 채우며 bins를 나열합니다.
- 분류 보고서를 출력하세요.
- 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_
# 아래에 코드를 작성하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
지도 학습의 모든 레슨
직접 연습해 보세요: 온라인 Python 컴파일러