Điểm F1
Thuộc phần Học có giám sát trong hành trình Machine Learning của Coddy. Bài học 23 trên 58.
Một mô hình có thể đạt độ chính xác hoặc độ thu hồi tối đa bằng cách hy sinh chỉ số còn lại. F1 score kết hợp hai chỉ số này và vẫn thấp trừ khi cả hai đều cao:
Với P là độ chính xác và R là độ bao phủ, F1 bằng 2 * P * R / (P + R). Với một mô hình dự báo thời tiết:
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)) # mỗi lớp một giá trị, đã sắp xếp
print(classification_report(y_test, pred))Kết quả này in ra:
[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Điểm report đánh giá từng lớp; support đếm số dòng test của lớp đó. Dòng có điểm thấp nhất cho bạn biết nên sửa gì trước.
Thử thách
Trung bìnhCamera của một nhà máy tái chế phân loại các món đồ vào thùng thủy tinh, kim loại, giấy và nhựa. Chương trình đọc k, còn phần code khởi tạo huấn luyện camera bằng k-NN, điền pred và liệt kê các bins.
- In báo cáo phân loại.
- Tìm thùng có điểm F1 thấp nhất và in thùng đó, sau đó in chỉ số yếu hơn của thùng, precision hoặc recall, như bên dưới (3 chữ số thập phân).
Sau báo cáo, với một nhà máy khác:
Weakest bin: metal, F1 0.667
Its weaker side: recall 0.571Tự làm thử
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())
# Mỗi vật trên băng chuyền có một hàng dữ liệu và một thùng phân loại tương ứng
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)
# Mô hình của camera
model = KNeighborsClassifier(n_neighbors=k)
model.fit(X_train, y_train)
pred = model.predict(X_test)
# Các thùng phân loại theo thứ tự xuất hiện của điểm số cho từng lớp
bins = model.classes_
# Viết code của bạn bên dưới
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Học có giám sát
1Mô hình đầu tiên của bạn
Học từ ví dụTập huấn luyện và tập kiểm traHuấn luyện và dự đoánChấm điểm mô hìnhÔn tập: Bộ sắp xếp hạt giống2Láng giềng gần nhất
Cách k-NN đưa ra quyết địnhChọn kRanh giới quyết địnhChuẩn hóa dữ liệu cho láng giềngÔn tập: láng giềng với dữ liệu rượu vang5Đánh giá bộ phân loại
Ma trận nhầm lẫnĐộ chính xác và độ thu hồiĐiểm F1Các lớp mất cân bằngĐường cong ROCÔn tập: Bài kiểm tra sàng lọc11Dự án: Các loài chim cánh cụt
Làm quen với chim cánh cụtChuẩn bị dữ liệuChọn mô hìnhTinh chỉnh mô hình tốt nhấtĐưa mô hình vào sử dụng3Hồi quy tuyến tính
Dự đoán các con sốNhiều đặc trưngĐo lường sai sốBiểu đồ phần dưÔn tập: Thuê xe đạp6Cây quyết định
Cây đặt câu hỏiĐọc câyĐộ sâu của câyTầm quan trọng của đặc trưngÔn tập: quyết định cho vay9Các mô hình tổ hợp
Rừng ngẫu nhiênVì sao rừng hoạt động hiệu quảTăng cường độ dốcÔn tập: Người kiểm lâm rừng12Thử thách cuối cùng
Tiến triển của bệnh tiểu đườngPhê duyệt tín dụngChữ số viết tayKhách hàng rời bỏTự luyện tập: Trình biên dịch Python online