Menu
CoddyTech

Tìm những điểm khác biệt

Thuộc phần Học không giám sát trong hành trình Machine Learning của Coddy. Bài học 34 trên 51.

Chương này tìm các hàng bất thường. Khi kết thúc, bạn sẽ khoanh tròn những phút bất thường của máy chủ:

Một đêm ghi lại số phút hoạt động của máy chủ web, số yêu cầu mỗi giây tăng theo chiều ngang và độ trễ tăng lên: một đám điểm dày đặc có xu hướng đi lên, cùng bốn phút đơn lẻ được khoanh đỏ, nơi hai bộ phát hiện cùng đánh dấu

Điểm bất thường là một hàng hiếm gặp, khác với phần còn lại: một lỗi, một vụ gian lận, một lỗi đánh máy. Mỗi điểm bất thường mới đều khác nhau, nên không ai có thể gán nhãn trước.

Bắt đầu với z-score. StandardScaler chuyển mỗi cột thành các z-score, vì vậy một dòng có thể đánh dấu những hàng có bất kỳ giá trị nào vượt quá 3:

z = StandardScaler().fit_transform(X)
odd = (np.abs(z) > 3).sum(axis=1) > 0

Độ biến dạng của cảm biến trên cầu tăng theo nhiệt độ. Một số đo cao hơn hẳn các số đo còn lại được khoanh đỏ, đánh dấu vì z-score độ biến dạng vượt quá 3. Một số đo thấp hơn xu hướng ở 27 độ được khoanh cam: bị bỏ lỡ

Nhưng một hàng có thể bình thường ở từng cột mà chỉ trở nên bất thường khi kết hợp các giá trị. Điểm z của từng cột không phát hiện được điều này.

challenge icon

Thử thách

Trung bình

Một siêu thị ghi lại giá trị trung bình trong ngày của 80 tủ đông. Tủ nào cần kỹ thuật viên kiểm tra? Chương trình đọc một ngưỡng.

  1. Chuyển từng cột của X thành điểm z (z-score).
  2. Với mỗi cột, in ra số tủ đông bị đánh dấu: điểm z cách 0 nhiều hơn ngưỡng.
  3. In ra mọi tủ đông bị đánh dấu bởi ít nhất một cột, theo thứ tự trong bảng.

Với một cửa hàng khác và 3:

temp_c: 1 flagged
power_kw: 2 flagged
door_openings: 0 flagged
defrost_min: 0 flagged
Freezers to check:
  F05
  F13
  F51

Tự làm thử

import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler

# Mỗi hàng tương ứng với một tủ đông: các giá trị trung bình hằng ngày
freezers = pd.read_csv("freezers.csv")
columns = ["temp_c", "power_kw", "door_openings", "defrost_min"]
X = freezers[columns]
cutoff = float(input())

# Viết code bên dưới
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 không giám sát

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