Menu
CoddyTech

Nhiều lớp

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 19 trên 58.

Chanh vàng, chanh xanh hay cam? Hồi quy logistic cũng xử lý được ba lớp. Ở đây, một loại quả mới nằm giữa chanh vàng và cam:

Bên trái: 45 loại quả được biểu diễn theo đường kính và khối lượng, chanh xanh nhỏ, chanh vàng ở giữa, cam lớn, và một ngôi sao đen đánh dấu loại quả mới nằm giữa chanh vàng và cam. Bên phải: xác suất của từng loại quả được biểu diễn bằng các thanh, chanh vàng 0.61, chanh xanh 0.00, cam 0.39

model = LogisticRegression(max_iter=1000)
model.fit(X, kind)  # X: đường kính, cân nặng; kind: chanh vàng, chanh xanh hoặc cam
print(model.classes_)
print(np.round(model.predict_proba([[6.7, 144]]), 2))
print(model.predict([[6.7, 144]]))

Kết quả in ra là:

['lemon' 'lime' 'orange']
[[0.61 0.   0.39]]
['lemon']

Mỗi hàng chứa một xác suất cho từng lớp, theo thứ tự trong classes_, và tổng các xác suất bằng 1. predict chọn giá trị lớn nhất.

Vậy là mô hình cho biết mức độ chắc chắn của nó: 61% chanh là một trường hợp khó phân định, đáng để xem xét lại.

challenge icon

Thử thách

Trung bình

Ứng dụng podcast phân loại các tập mới vào mục hài, tin tức hoặc tội phạm có thật. Mã khởi đầu huấn luyện một mô hình LogisticRegression trên episodes.csv (thời lượng, số người nói, số lần cười mỗi phút) và đọc một tập mới vào episode, một bảng chỉ có một hàng.

Hoàn thành describe(episode):

  1. In xác suất của từng loại chương trình theo thứ tự trong model.classes_, làm tròn đến phần trăm nguyên.
  2. Trả về loại có khả năng cao nhất.

Với tập của một ứng dụng khác:

comedy: 12%
news: 70%
true crime: 18%
Best guess: news

Tự làm thử

import pandas as pd
from sklearn.linear_model import LogisticRegression

episodes = pd.read_csv("episodes.csv")
features = ["length_min", "speakers", "laughs_per_min"]
model = LogisticRegression(max_iter=1000)
model.fit(episodes[features], episodes["show_type"])


# In ra xác suất của từng loại chương trình cho một tập (bảng một hàng), rồi trả về loại có khả năng cao nhất
def describe(episode):
    # Viết code của bạn ở đây
    return "unknown"


# Đừng thay đổi các dòng bên dưới: một tập mới từ đầu vào
length = float(input())
speakers = int(input())
laughs = float(input())
episode = pd.DataFrame({"length_min": [length], "speakers": [speakers], "laughs_per_min": [laughs]})
best = describe(episode)
print(f"Best guess: {best}")
quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch Python online