Menu
CoddyTech

Chọn eps

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 22 trên 51.

eps chỉ là một giá trị phỏng đoán cho đến khi bạn quan sát dữ liệu. Với công viên trong bài Các điểm nhiễu, hãy đo khoảng cách từ mỗi điểm đến điểm gần thứ 4, tính cả chính điểm đó, tương tự như min_samples=4. Sắp xếp rồi vẽ biểu đồ:

Đường cong tăng của 71 khoảng cách đã sắp xếp: thấp và bằng phẳng ở gần 1 m tại các điểm dã ngoại, sau đó rẽ gấp ở khoảng 3 m, nơi đường nét đứt đánh dấu eps, rồi tăng dốc tại những người đi một mình

Các điểm trong cụm nằm thấp và phẳng; các điểm đơn lẻ vọt lên cao. Điểm gối, nơi đường cong bắt đầu hướng lên, là một giá trị eps phù hợp:

from sklearn.neighbors import NearestNeighbors
nn = NearestNeighbors(n_neighbors=4).fit(X)
distances, rows = nn.kneighbors(X)
ax.plot(np.sort(distances[:, -1]))

kneighbors cho biết khoảng cách từ mỗi điểm đến 4 điểm gần nhất, theo thứ tự từ gần nhất đến xa nhất, vì vậy cột -1 là điểm thứ 4. np.sort sắp xếp chúng.

challenge icon

Thử thách

Trung bình

Các nhà địa chấn học muốn DBSCAN tìm các đường đứt gãy dưới khu vực xảy ra động đất trong một năm, với min_samples=5. Hãy chọn eps.

  1. Khớp NearestNeighbors(n_neighbors=5) với X và lấy khoảng cách của mọi trận động đất.
  2. Vẽ khoảng cách đến trận động đất gần thứ 5 theo thứ tự đã sắp xếp.
  3. Chạy và xác định điểm gấp khúc. Giữ giá trị đó trong eps, vẽ đường nét đứt màu xám bằng ax.axhline rồi hiển thị biểu đồ.

Ở một khu vực khác, điểm gấp khúc nằm gần 4 km:

Biểu đồ có tiêu đề Khoảng cách đến trận động đất gần thứ 5: đường cong nằm ngang gần mức 2 km trong khoảng 145 trận động đất, sau đó tăng mạnh vượt quá 50 km, với đường nét đứt màu xám tại mức 4 km ở điểm gấp khúc

Coddy mô tả biểu đồ của bạn, sau đó chạy DBSCAN với eps bạn chọn.

Tự làm thử

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.neighbors import NearestNeighbors

# Các trận động đất trong một năm ở một khu vực: tọa độ mỗi tâm chấn tính bằng km
quakes = pd.read_csv("quakes.csv")
X = np.column_stack([quakes["east_km"], quakes["north_km"]])

fig, ax = plt.subplots()
ax.set_title("Distance to the 5th Nearest Quake")
ax.set_xlabel("Quakes, sorted")
ax.set_ylabel("Distance (km)")

# 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