Chúng cung cấp nền tảng cho nhiều thuật toán học máy phổ biến và hiệu quả như k-hàng xóm gần nhất cho học có giám sát và phân cụm k-mean cho học không giám sát
Các biện pháp khoảng cách khác nhau phải được chọn và sử dụng tùy thuộc vào loại dữ liệu. Như vậy, điều quan trọng là phải biết cách thực hiện và tính toán một loạt các thước đo khoảng cách phổ biến khác nhau và trực giác cho điểm số thu được.
Trong hướng dẫn này, bạn sẽ khám phá các phép đo khoảng cách trong học máy
Sau khi hoàn thành hướng dẫn này, bạn sẽ biết
- Vai trò và tầm quan trọng của thước đo khoảng cách trong thuật toán học máy
- Cách thực hiện và tính toán các phép đo khoảng cách Hamming, Euclidean và Manhattan
- Cách thực hiện và tính toán khoảng cách Minkowski tổng quát hóa các phép đo khoảng cách Euclide và Manhattan
Bắt đầu dự án của bạn với cuốn sách mới của tôi Machine Learning Mastery With Python, bao gồm các hướng dẫn từng bước và các tệp mã nguồn Python cho tất cả các ví dụ
Bắt đầu nào
Đo khoảng cách cho máy học
Ảnh của Hoàng tử Roy, bảo lưu một số quyền.
Hướng dẫn tổng quan
Hướng dẫn này được chia thành năm phần;
- Vai trò của thước đo khoảng cách
- Khoảng cách hamming
- Khoảng cách Euclide
- Khoảng cách Manhattan [Taxicab hoặc City Block]
- Khoảng cách Minkowski
Vai trò của thước đo khoảng cách
Các biện pháp khoảng cách đóng một vai trò quan trọng trong học máy
Thước đo khoảng cách là điểm số khách quan tóm tắt sự khác biệt tương đối giữa hai đối tượng trong một miền vấn đề
Thông thường nhất, hai đối tượng là các hàng dữ liệu mô tả một chủ đề [chẳng hạn như người, ô tô hoặc nhà] hoặc một sự kiện [chẳng hạn như mua hàng, khiếu nại hoặc chẩn đoán]
Có lẽ cách có nhiều khả năng nhất mà bạn sẽ gặp phải các phép đo khoảng cách là khi bạn đang sử dụng một thuật toán học máy cụ thể sử dụng các phép đo khoảng cách làm cốt lõi của nó. Thuật toán nổi tiếng nhất thuộc loại này là thuật toán k-láng giềng gần nhất, viết tắt là KNN
Trong thuật toán KNN, dự đoán phân loại hoặc hồi quy được thực hiện cho các ví dụ mới bằng cách tính khoảng cách giữa ví dụ mới [hàng] và tất cả các ví dụ [hàng] trong tập dữ liệu huấn luyện. Các ví dụ k trong tập dữ liệu huấn luyện có khoảng cách nhỏ nhất sau đó được chọn và dự đoán được đưa ra bằng cách lấy trung bình kết quả [chế độ của nhãn lớp hoặc giá trị trung bình của giá trị thực cho hồi quy]
KNN thuộc về một lĩnh vực thuật toán rộng lớn hơn được gọi là học tập dựa trên trường hợp hoặc trường hợp, hầu hết trong số đó sử dụng các phép đo khoảng cách theo cách tương tự. Một thuật toán dựa trên trường hợp phổ biến khác sử dụng các phép đo khoảng cách là lượng tử hóa vectơ học tập, hay LVQ, thuật toán cũng có thể được coi là một loại mạng thần kinh
Liên quan là thuật toán bản đồ tự tổ chức, hay SOM, cũng sử dụng các phép đo khoảng cách và có thể được sử dụng cho học tập có giám sát hoặc không giám sát. Một thuật toán học tập không giám sát khác sử dụng các phép đo khoảng cách làm cốt lõi của nó là thuật toán phân cụm K-means
Trong học tập dựa trên cá thể, các ví dụ đào tạo được lưu trữ nguyên văn và một hàm khoảng cách được sử dụng để xác định thành viên nào của tập huấn luyện gần nhất với một cá thể thử nghiệm chưa biết. Khi phiên bản đào tạo gần nhất đã được định vị, lớp của nó được dự đoán cho phiên bản thử nghiệm
— Trang 135, Khai thác dữ liệu. Công cụ và kỹ thuật học máy thực hành, tái bản lần thứ 4, 2016
Dưới đây là danh sách ngắn về một số thuật toán học máy phổ biến sử dụng thước đo khoảng cách làm cốt lõi
- K-Hàng xóm gần nhất
- Học lượng tử hóa véc tơ [LVQ]
- Bản đồ tự tổ chức [SOM]
- Phân cụm K-Means
Có nhiều phương pháp dựa trên kernel cũng có thể được coi là thuật toán dựa trên khoảng cách. Có lẽ phương pháp kernel được biết đến rộng rãi nhất là thuật toán máy vector hỗ trợ, viết tắt là SVM.
Bạn có biết thêm các thuật toán sử dụng thước đo khoảng cách không?
Hãy cho tôi biết trong phần nhận xét bên dưới.
Khi tính toán khoảng cách giữa hai ví dụ hoặc hàng dữ liệu, có thể các loại dữ liệu khác nhau được sử dụng cho các cột khác nhau của ví dụ. Một ví dụ có thể có giá trị thực, giá trị boolean, giá trị phân loại và giá trị thứ tự. Các phép đo khoảng cách khác nhau có thể được yêu cầu cho mỗi phép đo được tổng hợp thành một điểm khoảng cách duy nhất
Các giá trị số có thể có các tỷ lệ khác nhau. Điều này có thể ảnh hưởng lớn đến việc tính toán thước đo khoảng cách và thông thường nên bình thường hóa hoặc chuẩn hóa các giá trị số trước khi tính toán thước đo khoảng cách
Lỗi số trong các bài toán hồi quy cũng có thể được coi là một khoảng cách. Ví dụ: sai số giữa giá trị dự kiến và giá trị dự đoán là thước đo khoảng cách một chiều có thể được tính tổng hoặc lấy trung bình trên tất cả các ví dụ trong tập kiểm tra để đưa ra khoảng cách tổng giữa kết quả dự kiến và kết quả dự đoán trong tập dữ liệu. Việc tính toán sai số, chẳng hạn như sai số bình phương trung bình hoặc sai số tuyệt đối trung bình, có thể giống với phép đo khoảng cách tiêu chuẩn
Như chúng ta có thể thấy, các phép đo khoảng cách đóng một vai trò quan trọng trong học máy. Có lẽ bốn trong số các thước đo khoảng cách được sử dụng phổ biến nhất trong học máy như sau
- Khoảng cách hamming
- Khoảng cách Euclide
- Khoảng cách Manhattan
- Khoảng cách Minkowski
Một số thước đo khoảng cách khác mà bạn đã sử dụng hoặc đã nghe nói đến là gì?
Hãy cho tôi biết trong phần nhận xét bên dưới.
Bạn cần biết cách tính toán từng thước đo khoảng cách này khi triển khai các thuật toán từ đầu và trực giác về những gì đang được tính toán khi sử dụng các thuật toán sử dụng các thước đo khoảng cách này
Chúng ta hãy lần lượt xem xét kỹ hơn từng
Khoảng cách hamming
Khoảng cách Hamming tính toán khoảng cách giữa hai vectơ nhị phân, còn được gọi tắt là chuỗi nhị phân hoặc chuỗi bit
Rất có thể bạn sẽ gặp phải các chuỗi bit khi bạn mã hóa một lần nóng các cột dữ liệu phân loại
Ví dụ: nếu một cột có các danh mục 'đỏ', 'xanh lá cây' và 'xanh dương', bạn có thể mã hóa nóng từng ví dụ dưới dạng chuỗi bit với một bit cho mỗi cột
- đỏ = [1, 0, 0]
- xanh lục = [0, 1, 0]
- màu xanh = [0, 0, 1]
Khoảng cách giữa màu đỏ và màu xanh lá cây có thể được tính bằng tổng hoặc số chênh lệch bit trung bình giữa hai chuỗi bit. Đây là khoảng cách Hamming
Đối với chuỗi được mã hóa một lần, có thể hợp lý hơn khi tóm tắt thành tổng chênh lệch bit giữa các chuỗi, giá trị này sẽ luôn là 0 hoặc 1
- HammingDistance = tổng cho i đến N abs[v1[i] – v2[i]]
Đối với các chuỗi bit có thể có nhiều bit 1, thông thường sẽ tính toán số chênh lệch bit trung bình để cho điểm khoảng cách hamming giữa 0 [giống hệt nhau] và 1 [tất cả đều khác nhau]
- HammingDistance = [tổng của i đến N abs[v1[i] – v2[i]]] / N
Chúng ta có thể chứng minh điều này bằng một ví dụ tính toán khoảng cách Hamming giữa hai chuỗi bit, được liệt kê bên dưới
1
2
3
4
5
6
7
8
9
10
11
12
# tính khoảng cách hamming giữa các chuỗi bit
# tính khoảng cách hamming
def hamming_ distance[a, b]:
return sum[abs[e1 - e2] for e1, e2 in zip[a, b]] / len[a]
# xác định dữ liệu
row1 = [0, 0, 0, 0, 0, 1]
row2 = [0, 0, 0, 0, 1, 0]
# tính khoảng cách
dist = hamming_ distance[row1, row2]
in[dist]
Chạy ví dụ báo cáo khoảng cách Hamming giữa hai bitstrings
Chúng ta có thể thấy rằng có 2 sự khác biệt giữa các chuỗi hoặc 2 trong số 6 vị trí bit khác nhau, tính trung bình [2/6] là khoảng 1/3 hoặc 0. 333
1
0. 3333333333333333
Chúng ta cũng có thể thực hiện phép tính tương tự bằng cách sử dụng hàm minkowski_ distance[] từ SciPy. Ví dụ đầy đủ được liệt kê dưới đây