độ phức tạp tính toán k-NN


17

Độ phức tạp thời gian của thuật toán k -NN với phương pháp tìm kiếm ngây thơ (không có cây kd hoặc similars) là gì?

Tôi quan tâm đến độ phức tạp thời gian của nó khi xem xét cả siêu tham số k . Tôi đã tìm thấy câu trả lời mâu thuẫn:

  1. O (nd + kn), trong đó n là giá trị chính của tập huấn luyện và d kích thước của mỗi mẫu. [1]

  2. O (ndk), trong đó một lần nữa n là giá trị chính của tập huấn luyện và d kích thước của mỗi mẫu. [2]

[1] http://www.csd.uwo.ca/cifts/CS9840a/Lecture2_knn.pdf (Trang 18/20)

[2] http://www.cs.haifa.ac.il/~rita/ml_cference/lectures/KNN.pdf (Trang 18/31)

Câu trả lời:


20

Giả sử là cố định (như cả hai bài giảng được liên kết đều làm), thì các lựa chọn thuật toán của bạn sẽ xác định xem tính toán của bạn có thời gian chạy hay thời gian chạy .O ( n d + k n ) O ( n d k )kÔi(nd+kn)Ôi(ndk)

Trước tiên, hãy xem xét thuật toán thời gian chạy :Ôi(nd+kn)

  • Khởi tạo select_i cho tất cả các quan sát trong tập huấn luyệniSetôiectedTôi= =0Tôi
  • Đối với mỗi tập huấn quan sát , tính , khoảng cách từ quan sát mới đến tập quan sát tậpd i s t i iTôidTôiStTôiTôi
  • Đối với đến : Lặp qua tất cả các quan sát tập huấn luyện, chọn chỉ số có giá trị nhỏ nhất và được . Chọn quan sát này bằng cách đặt .j= =1kTôidTôiStTôiSetôiectedTôi= =0SetôiectedTôi= =1
  • Trả về các chỉ số đã chọnk

Mỗi tính toán khoảng cách yêu cầu thời gian chạy , vì vậy bước thứ hai yêu cầu thời gian chạy . Đối với mỗi lần lặp trong bước thứ ba, chúng tôi thực hiện công việc bằng cách lặp qua các quan sát tập huấn luyện, do đó, tổng thể bước yêu cầu công việc . Các bước đầu tiên và thứ tư chỉ yêu cầu hoạt động, vì vậy chúng tôi nhận được thời gian chạy .Ôi(d)Ôi(nd)Ôi(n)Ôi(nk)Ôi(n)Ôi(nd+kn)

Bây giờ, hãy xem xét thuật toán thời gian chạy :Ôi(ndk)

  • Khởi tạo cho tất cả các quan sát i trong tập huấn luyệnSetôiectedTôi= =0Tôi
  • Với đến k : Lặp lại tất cả các quan sát tập huấn luyện và tính khoảng cách d giữa quan sát tập huấn đã chọn và quan sát mới. Chọn chỉ số i có giá trị d nhỏ nhất mà s e l e c t e d i = 0 . Chọn quan sát này bằng cách đặt s e l e c t e d i = 1 .j= =1kdTôidSetôiectedTôi= =0SetôiectedTôi= =1
  • Trả về các chỉ số đã chọnk

Đối với mỗi lần lặp trong bước thứ hai, chúng tôi tính khoảng cách giữa quan sát mới và mỗi lần quan sát tập huấn luyện, yêu cầu làm việc cho một lần lặp và do đó O ( n d k ) làm việc tổng thể.Ôi(nd)Ôi(ndk)

Sự khác biệt giữa hai thuật toán là tiền thuật toán đầu tiên và lưu trữ khoảng cách (yêu cầu bộ nhớ phụ ), trong khi thuật toán thứ hai thì không. Tuy nhiên, do chúng tôi đã lưu trữ toàn bộ tập huấn luyện, yêu cầu bộ nhớ O ( n d ) , cũng như vectơ s e l e c t e d , yêu cầu lưu trữ O ( n ) , việc lưu trữ hai thuật toán là không có triệu chứng tương tự. Kết quả là thời gian chạy tiệm cận tốt hơn cho k > 1 làm cho thuật toán đầu tiên hấp dẫn hơn.Ôi(n)Ôi(nd)SetôiectedÔi(n)k>1

Điều đáng chú ý là có thể có được thời gian chạy bằng cách sử dụng một cải tiến thuật toán:Ôi(nd)

  • Đối với mỗi tập huấn quan sát , hãy tính d i s t i , khoảng cách từ quan sát mới đến tập quan sát tập iTôidTôiStTôiTôi
  • Chạy thuật toán quickselect để tính khoảng cách nhỏ nhất trong thời gian chạy O ( n )kthÔi(n)
  • Trả lại tất cả các chỉ số không lớn hơn so với tính toán khoảng cách nhỏ nhấtkth

Cách tiếp cận này lợi dụng thực tế là các cách tiếp cận hiệu quả tồn tại để tìm giá trị nhỏ nhất trong một mảng chưa được sắp xếp.kth


1
Câu trả lời tuyệt vời và tôi đặc biệt thích lời khuyên đối với việc sử dụng quickselect.
usεr11852 nói Phục hồi Monic

Một câu hỏi nữa: đối với tùy chọn thứ ba tôi tin rằng độ phức tạp thời gian phải là O (nd + k), vì bạn vẫn phải tính nhãn phổ biến nhất trong số các hàng xóm gần nhất để phát ra dự đoán, phải không?
Daniel López

@Daniel Vì , O ( n d + k ) giống với O ( n d ) . knÔi(nd+k)Ôi(nd)
josliber

Lần trước tôi làm phiền bạn: cố gắng xác định độ phức tạp tính toán của phiên bản sửa đổi của k -NN tôi đang làm việc, tôi nhận được các thông tin sau: O (nd + nd / p) Trong đó theo định nghĩa n , dp là các số nguyên lớn hơn số không. Tôi có thể đơn giản hóa nó thành O (nd) không?
Daniel López

Ôi(nd)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.