Tổng hợp mọi thứ
Bên cạnh pipeline phát hiện bất thường dựa trên khoảng cách mà bạn đã xây dựng ở bài trước, bạn cũng muốn hỗ trợ cách học dựa trên đặc trưng với one-class SVM. Bạn quyết định trích xuất hai đặc trưng: thứ nhất là độ dài chuỗi; thứ hai là mã hóa số của chữ cái đầu tiên trong chuỗi, thu được bằng hàm LabelEncoder() mô tả ở Chương 1. Để đảm bảo so sánh công bằng, bạn sẽ đưa các điểm outlier vào phép tính AUC. Đã được import sẵn: LabelEncoder(), roc_auc_score() dưới tên auc() và OneClassSVM. Dữ liệu có sẵn dưới dạng pandas data frame tên proteins với hai cột label và seq, và hai lớp IMMUNE SYSTEM và VIRUS. Một bộ phát hiện LoF đã fit sẵn có tên lof_detector.
Bài tập này là một phần của khóa học
Thiết kế quy trình Machine Learning bằng Python
Hướng dẫn bài tập
- Với một chuỗi
s,len(s)trả về độ dài của nó. Áp dụng vào cộtseqđể tạo cột mớilen. - Với một chuỗi
s,list(s)trả về danh sách các ký tự. Dùng cách này để lấy chữ cái đầu tiên của mỗi chuỗi, rồi mã hóa nó bằngLabelEncoder(). - Điểm LoF nằm trong thuộc tính
negative_outlier_factor_. Tính AUC của chúng. - Fit một 1-class SVM cho data frame chỉ có hai cột
lenvàfirst. Trích xuất điểm số và đánh giá cả điểm LoF và điểm SVM bằng AUC.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# Create a feature that contains the length of the string
proteins['len'] = proteins['seq'].apply(____)
# Create a feature encoding the first letter of the string
proteins['first'] = ____.____(
proteins['seq'].apply(____))
# Extract scores from the fitted LoF object, compute its AUC
scores_lof = lof_detector.____
print(____(proteins['label']==____, scores_lof))
# Fit a 1-class SVM, extract its scores, and compute its AUC
svm = ____.____(proteins[['len', 'first']])
scores_svm = svm.____(proteins[['len', 'first']])
print(____(proteins['label']==____, scores_svm))