Triển khai kNN trong Python
Thuật toán K-láng giềng gần nhất (KNN) là một loại thuật toán học máy có giám sát được sử dụng để phân loại, hồi quy cũng như phát hiện ngoại lệ. Nó cực kỳ dễ thực hiện ở dạng cơ bản nhất nhưng có thể thực hiện các tác vụ khá phức tạp. Đó là một thuật toán lười học vì nó không có giai đoạn đào tạo chuyên biệt. Thay vào đó, nó sử dụng tất cả dữ liệu để đào tạo trong khi phân loại (hoặc hồi quy) một điểm dữ liệu hoặc phiên bản mới Show
KNN là một thuật toán học phi tham số, có nghĩa là nó không thừa nhận bất cứ điều gì về dữ liệu cơ bản. Đây là một tính năng cực kỳ hữu ích vì hầu hết dữ liệu trong thế giới thực không thực sự tuân theo bất kỳ giả định lý thuyết nào. g. khả năng phân tách tuyến tính, phân phối đồng đều, v.v.
Khi nào bạn nên sử dụng KNN?Giả sử bạn muốn thuê một căn hộ và gần đây phát hiện ra hàng xóm của bạn mình có thể cho thuê căn hộ của cô ấy sau 2 tuần. Vì căn hộ chưa có trên trang web cho thuê nên bạn có thể thử ước tính giá trị cho thuê của nó như thế nào? Giả sử bạn của bạn trả 1.200 đô la tiền thuê nhà. Giá thuê của bạn có thể vào khoảng con số đó, nhưng các căn hộ không hoàn toàn giống nhau (hướng, diện tích, chất lượng nội thất, v.v. ), vì vậy, sẽ rất tuyệt nếu có thêm dữ liệu về các căn hộ khác Bằng cách hỏi những người hàng xóm khác và xem các căn hộ từ cùng một tòa nhà được liệt kê trên trang web cho thuê, giá thuê ba căn hộ lân cận gần nhất là 1.200 đô la, 1.210 đô la, 1.210 đô la và 1.215 đô la. Những căn hộ đó ở cùng dãy nhà và tầng với căn hộ của bạn bạn Các căn hộ khác, xa hơn, trên cùng một tầng nhưng ở khác dãy nhà có giá thuê là $1.400, $1.430, $1.500 và $1.470. Có vẻ như chúng đắt hơn do có nhiều ánh sáng mặt trời hơn vào buổi tối Xem xét mức độ gần gũi của căn hộ, có vẻ như tiền thuê ước tính của bạn sẽ vào khoảng $1,210. Đó là ý tưởng chung về thuật toán K-Láng giềng gần nhất (KNN) thực hiện. Nó phân loại hoặc hồi quy dữ liệu mới dựa trên mức độ gần gũi của nó với dữ liệu hiện có Dịch ví dụ thành lý thuyếtKhi giá trị ước tính là một số liên tục, chẳng hạn như giá trị tiền thuê, KNN được sử dụng để hồi quy. Nhưng chúng ta cũng có thể chia căn hộ thành các loại dựa trên giá thuê tối thiểu và tối đa chẳng hạn. Khi giá trị rời rạc, biến nó thành một danh mục, KNN được sử dụng để phân loại Ngoài ra còn có khả năng ước tính xem những người hàng xóm nào quá khác biệt với những người khác đến mức họ có thể sẽ ngừng trả tiền thuê nhà. Điều này giống như việc phát hiện điểm dữ liệu nào ở quá xa mà chúng không phù hợp với bất kỳ giá trị hoặc danh mục nào, khi điều đó xảy ra, KNN được sử dụng để phát hiện ngoại lệ Trong ví dụ của chúng tôi, chúng tôi cũng đã biết giá thuê của từng căn hộ, điều đó có nghĩa là dữ liệu của chúng tôi đã được gắn nhãn. KNN sử dụng dữ liệu được gắn nhãn trước đó, làm cho nó trở thành thuật toán học có giám sát
Mỗi khi có một điểm mới được thêm vào dữ liệu, KNN chỉ sử dụng một phần dữ liệu để quyết định giá trị (hồi quy) hoặc loại (phân loại) của điểm được thêm đó. Vì nó không phải xem xét lại tất cả các điểm, điều này làm cho nó trở thành một thuật toán lười học KNN cũng không giả định bất cứ điều gì về các đặc điểm dữ liệu cơ bản, nó không mong muốn dữ liệu phù hợp với một số loại phân phối, chẳng hạn như đồng nhất hoặc có thể phân tách tuyến tính. Điều này có nghĩa nó là một thuật toán học phi tham số. Đây là một tính năng cực kỳ hữu ích vì hầu hết dữ liệu trong thế giới thực không thực sự tuân theo bất kỳ giả định lý thuyết nào Hình dung các cách sử dụng khác nhau của KNNNhư đã chỉ ra, trực giác đằng sau thuật toán KNN là một trong những thuật toán học máy được giám sát trực tiếp nhất. Đầu tiên, thuật toán tính toán khoảng cách của một điểm dữ liệu mới tới tất cả các điểm dữ liệu huấn luyện khác Ghi chú. Khoảng cách có thể được đo theo nhiều cách khác nhau. Bạn có thể sử dụng công thức Minkowski, Euclidean, Manhattan, Mahalanobis hoặc Hamming để đặt tên cho một số chỉ số. Với dữ liệu chiều cao, đôi khi khoảng cách Euclide bắt đầu thất bại (số chiều cao là. lạ) và khoảng cách Manhattan được sử dụng thay thế Sau khi tính toán khoảng cách, KNN chọn một số điểm dữ liệu gần nhất - 2, 3, 10 hoặc thực sự là bất kỳ số nguyên nào. Số điểm này (2, 3, 10, v.v. ) là K trong K-Hàng xóm gần nhất Ở bước cuối cùng, nếu là tác vụ hồi quy, KNN sẽ tính tổng trọng số trung bình của K-điểm gần nhất cho dự đoán. Nếu đó là một nhiệm vụ phân loại, điểm dữ liệu mới sẽ được gán cho lớp mà phần lớn K-điểm gần nhất được chọn thuộc về. Hãy hình dung thuật toán đang hoạt động với sự trợ giúp của một ví dụ đơn giản. Xem xét một tập dữ liệu có hai biến và K là 3 Khi thực hiện hồi quy, nhiệm vụ là tìm giá trị của một điểm dữ liệu mới, dựa trên trung bình cộng trọng số của 3 điểm gần nhất KNN với 6, khi được sử dụng để hồi quyThuật toán KNN sẽ bắt đầu bằng cách tính khoảng cách của điểm mới từ tất cả các điểm. Sau đó, nó tìm 3 điểm có khoảng cách nhỏ nhất đến điểm mới. Điều này được thể hiện trong hình thứ hai ở trên, trong đó ba điểm gần nhất, 7, 8 và 9 đã được bao quanh. Sau đó, nó tính tổng trọng số của 7, 8 và 9 - trong trường hợp này, trọng số bằng 1 - chúng tôi coi tất cả các điểm là bằng nhau, nhưng chúng tôi cũng có thể gán các trọng số khác nhau dựa trên khoảng cách. Sau khi tính tổng trọng số, giá trị điểm mới là 3Và khi thực hiện phân loại, nhiệm vụ của KNN là phân loại một điểm dữ liệu mới, thành lớp 4 hoặc lớp 5KNN với 6, khi được sử dụng để phân loạiThuật toán KNN sẽ bắt đầu theo cách tương tự như trước đây, bằng cách tính khoảng cách của điểm mới từ tất cả các điểm, tìm 3 điểm gần nhất có khoảng cách nhỏ nhất đến điểm mới và sau đó, thay vì tính một số, nó sẽ gán . Do đó, điểm dữ liệu mới sẽ được phân loại là 5Quá trình phát hiện ngoại lệ khác với cả hai bên trên, chúng ta sẽ nói nhiều hơn về nó khi triển khai nó sau khi triển khai hồi quy và phân loại Ghi chú. Mã được cung cấp trong hướng dẫn này đã được thực thi và thử nghiệm với sổ ghi chép Jupyter sau Bộ dữ liệu nhà ở California Scikit-LearnChúng tôi sẽ sử dụng bộ dữ liệu nhà ở California để minh họa cách thức hoạt động của thuật toán KNN. Bộ dữ liệu được lấy từ 1990 U. S. điều tra dân số. Một hàng của tập dữ liệu đại diện cho điều tra dân số của một nhóm khối
Nhóm khối là đơn vị địa lý nhỏ nhất mà U. S. Cục điều tra dân số công bố dữ liệu mẫu. Bên cạnh nhóm khối, một thuật ngữ khác được sử dụng là hộ gia đình, hộ gia đình là một nhóm người cư trú trong một nhà Bộ dữ liệu bao gồm chín thuộc tính
Bộ dữ liệu đã là một phần của thư viện Scikit-Learn, chúng tôi chỉ cần nhập và tải nó dưới dạng khung dữ liệu Nhập dữ liệu trực tiếp từ Scikit-Learn, không chỉ nhập các cột và số và bao gồm mô tả dữ liệu dưới dạng đối tượng 47 - vì vậy chúng tôi vừa trích xuất 48. Thông tin chi tiết về bộ dữ liệu có sẵn tại đâyHãy nhập Pandas và xem qua một vài hàng dữ liệu đầu tiên 3Thực thi mã sẽ hiển thị năm hàng đầu tiên của tập dữ liệu của chúng tôi 4Trong hướng dẫn này, chúng tôi sẽ sử dụng 8, 9, 40, 41, 42, 43, 44, 45 để dự đoán 46. Một cái gì đó tương tự như câu chuyện động lực của chúng tôiBây giờ chúng ta hãy bắt đầu triển khai thuật toán KNN cho hồi quy Hồi quy với K-Hàng xóm gần nhất với Scikit-LearnCho đến nay, chúng tôi đã biết tập dữ liệu của mình và bây giờ có thể tiến hành các bước khác trong thuật toán KNN Dữ liệu tiền xử lý cho hồi quy KNNTiền xử lý là nơi xuất hiện sự khác biệt đầu tiên giữa các nhiệm vụ hồi quy và phân loại. Vì phần này là tất cả về hồi quy, nên chúng tôi sẽ chuẩn bị tập dữ liệu của mình cho phù hợp Đối với hồi quy, chúng ta cần dự đoán một giá trị nhà trung bình khác. Để làm như vậy, chúng tôi sẽ gán 46 cho 59 và tất cả các cột khác cho 60 chỉ bằng cách bỏ 46 8Bằng cách xem xét các mô tả biến của chúng tôi, chúng tôi có thể thấy rằng chúng tôi có sự khác biệt trong các phép đo. Để tránh phải đoán, hãy sử dụng phương pháp 62 để kiểm traKết quả này trong
Ở đây, chúng ta có thể thấy rằng giá trị 63 của 8 là xấp xỉ 65 và giá trị 63 của 9 là khoảng 68, tức là 7. lớn gấp 4 lần so với 8. Các đối tượng địa lý khác cũng có sự khác biệt về giá trị trung bình và độ lệch chuẩn - để thấy điều đó, hãy nhìn vào các giá trị 63 và 91 và quan sát xem chúng cách xa nhau như thế nào. Đối với 8, 91 là khoảng 94, đối với 9, 91 là 97 và áp dụng tương tự cho các tính năng khácChúng tôi đang sử dụng một thuật toán dựa trên khoảng cách và các thuật toán dựa trên khoảng cách chịu ảnh hưởng rất lớn từ dữ liệu không cùng tỷ lệ, chẳng hạn như dữ liệu này. Thang điểm có thể (và trên thực tế, hầu như luôn luôn như vậy) làm sai lệch khoảng cách thực giữa các giá trị Để thực hiện Chia tỷ lệ tính năng, chúng tôi sẽ sử dụng lớp 98 của Scikit-Learn sau. Nếu chúng tôi áp dụng tỷ lệ ngay bây giờ (trước khi phân tách thử nghiệm đào tạo), phép tính sẽ bao gồm dữ liệu thử nghiệm, rò rỉ thông tin dữ liệu thử nghiệm một cách hiệu quả vào phần còn lại của đường ống. Thật không may, loại rò rỉ dữ liệu này thường bị bỏ qua, dẫn đến những phát hiện không thể tái tạo hoặc ảo tưởngTách dữ liệu thành các tập huấn luyện và kiểm traĐể có thể mở rộng quy mô dữ liệu của chúng tôi mà không bị rò rỉ, cũng như để đánh giá kết quả của chúng tôi và để tránh khớp quá mức, chúng tôi sẽ chia tập dữ liệu của mình thành các phần tách đào tạo và thử nghiệm Một cách đơn giản để tạo các phân tách đào tạo và thử nghiệm là phương pháp 99 từ Scikit-Learn. Sự phân tách không phân chia tuyến tính tại một số điểm, nhưng lấy mẫu ngẫu nhiên X% và Y%. Để làm cho quy trình này có thể lặp lại (để làm cho phương thức luôn lấy mẫu các điểm dữ liệu giống nhau), chúng tôi sẽ đặt đối số 80 thành một 81 nhất định
Đoạn mã này lấy mẫu 75% dữ liệu để đào tạo và 25% dữ liệu để kiểm tra. Bằng cách thay đổi 82 thành 0. 3, chẳng hạn, bạn có thể đào tạo với 70% dữ liệu và kiểm tra với 30%Bằng cách sử dụng 75% dữ liệu để huấn luyện và 25% để kiểm tra, trong số 20640 bản ghi, tập huấn luyện chứa 15480 và tập kiểm tra chứa 5160. Chúng tôi có thể kiểm tra những con số đó một cách nhanh chóng bằng cách in độ dài của tập dữ liệu đầy đủ và dữ liệu được phân tách Tuyệt quá. Giờ đây, chúng tôi có thể điều chỉnh bộ chia tỷ lệ dữ liệu trên bộ 83 và chia tỷ lệ cho cả 83 và 85 mà không làm rò rỉ bất kỳ dữ liệu nào từ 85 sang 83Mở rộng tính năng cho hồi quy KNNBằng cách nhập 98, khởi tạo nó, điều chỉnh nó theo dữ liệu đào tạo của chúng tôi (ngăn rò rỉ) và chuyển đổi cả bộ dữ liệu đào tạo và kiểm tra, chúng tôi có thể thực hiện thay đổi quy mô tính năngGhi chú. Vì đôi khi bạn sẽ gọi 89 theo sau là 400 - bạn có thể gọi một 401 theo sau là 402 để cuộc gọi ngắn hơnBây giờ dữ liệu của chúng tôi được thu nhỏ. Bộ chia tỷ lệ chỉ duy trì các điểm dữ liệu chứ không phải tên cột khi được áp dụng trên 403. Hãy sắp xếp lại dữ liệu vào DataFrame với các tên cột và sử dụng 62 để quan sát các thay đổi trong 63 và 91 4Điều này sẽ cho chúng ta 5Quan sát cách tất cả các độ lệch chuẩn hiện nay là 407 và phương tiện đã trở nên nhỏ hơn. Đây là những gì làm cho dữ liệu của chúng tôi thống nhất hơn. Hãy đào tạo và đánh giá một hồi quy dựa trên KNNĐào tạo và dự đoán hồi quy KNNAPI ổn định và trực quan của Scikit-Learn làm cho các trình hồi quy và phân loại đào tạo trở nên rất đơn giản. Hãy nhập lớp 408 từ mô-đun 409, khởi tạo nó và khớp nó với dữ liệu tàu của chúng ta 6Trong đoạn mã trên, 410 là giá trị của K hoặc số lượng hàng xóm mà thuật toán sẽ xem xét để chọn giá trị nhà trung bình mới. 411 là giá trị mặc định cho 412. Không có giá trị lý tưởng cho K và nó được chọn sau khi thử nghiệm và đánh giá, tuy nhiên, để bắt đầu, 411 là giá trị thường được sử dụng cho KNN và do đó được đặt làm giá trị mặc địnhBước cuối cùng là đưa ra dự đoán về dữ liệu thử nghiệm của chúng tôi. Để làm như vậy, hãy thực thi đoạn script sau 9Bây giờ chúng ta có thể đánh giá mức độ mô hình của chúng ta khái quát hóa dữ liệu mới mà chúng ta có nhãn (sự thật cơ bản) cho - tập kiểm tra Đánh giá thuật toán hồi quy KNNCác số liệu hồi quy được sử dụng phổ biến nhất để đánh giá thuật toán là lỗi tuyệt đối trung bình (MAE), lỗi bình phương trung bình (MSE), lỗi bình phương trung bình gốc (RMSE) và hệ số xác định (R2)
$$ Ghi chú. Bạn cũng có thể gặp ký hiệu 59 và 415 (đọc là y-hat) trong các phương trình. 59 đề cập đến các giá trị thực tế và 415 đề cập đến các giá trị dự đoán
$$
$$ Các phương pháp 418 và 419 của 420 có thể được sử dụng để tính toán các số liệu này như có thể thấy trong đoạn mã sau 8Đầu ra của tập lệnh trên trông như thế này 40R2 có thể được tính trực tiếp bằng phương pháp 421 41đầu ra nào 42Kết quả cho thấy rằng lỗi tổng thể và lỗi trung bình của thuật toán KNN của chúng tôi nằm trong khoảng 422 và 423. Ngoài ra, RMSE cho thấy rằng chúng ta có thể tăng hoặc giảm giá trị thực của dữ liệu bằng cách cộng hoặc trừ 424. Làm thế nào tốt là điều đó?Hãy kiểm tra xem giá trông như thế nào 43 44Giá trị trung bình là _______2426 và độ lệch chuẩn so với giá trị trung bình là _______2427 vì vậy điểm của chúng tôi là ~ 422 không thực sự xuất sắc nhưng cũng không quá tệVới R2, ta càng gần 1 (hoặc 100) càng tốt. R2 cho biết mức độ thay đổi trong dữ liệu hoặc phương sai dữ liệu đang được KNN hiểu hoặc giải thích $$ Với giá trị là 429, chúng ta có thể thấy rằng mô hình của chúng ta giải thích được 67% phương sai của dữ liệu. Nó đã hơn 50%, điều đó cũng ổn, nhưng không tốt lắm. Có cách nào chúng ta có thể làm tốt hơn không?Chúng tôi đã sử dụng K được xác định trước với giá trị là 411, vì vậy, chúng tôi đang sử dụng 5 hàng xóm để dự đoán các mục tiêu của mình, đây không nhất thiết phải là số tốt nhất. Để hiểu đâu sẽ là số Ks lý tưởng, chúng ta có thể phân tích các lỗi thuật toán của mình và chọn K sao cho giảm thiểu tổn thấtTìm K tốt nhất cho hồi quy KNNLý tưởng nhất là bạn sẽ thấy chỉ số nào phù hợp hơn với ngữ cảnh của mình - nhưng việc kiểm tra tất cả các chỉ số thường rất thú vị. Bất cứ khi nào bạn có thể kiểm tra tất cả chúng, hãy làm điều đó. Ở đây, chúng tôi sẽ trình bày cách chọn K tốt nhất chỉ sử dụng sai số tuyệt đối trung bình, nhưng bạn có thể thay đổi nó thành bất kỳ số liệu nào khác và so sánh kết quả Để làm điều này, chúng tôi sẽ tạo một vòng lặp for và chạy các mô hình có từ 1 đến X hàng xóm. Tại mỗi lần tương tác, chúng tôi sẽ tính toán MAE và vẽ số lượng K cùng với kết quả MAE Bây giờ, hãy vẽ đồ thị của 431 45Nhìn vào cốt truyện, có vẻ như giá trị MAE thấp nhất là khi K là 432. Hãy xem xét kỹ hơn cốt truyện để chắc chắn bằng cách vẽ ít dữ liệu hơn 46Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó Bạn cũng có thể nhận được lỗi thấp nhất và chỉ mục của điểm đó bằng cách sử dụng hàm 433 tích hợp sẵn (hoạt động trên danh sách) hoặc chuyển đổi danh sách thành mảng NumPy và nhận được 434 (chỉ mục của phần tử có giá trị thấp nhất)Chúng tôi bắt đầu đếm hàng xóm trên 1, trong khi mảng dựa trên 0, vì vậy chỉ số thứ 11 là 12 hàng xóm Điều này có nghĩa là chúng ta cần 12 người hàng xóm để có thể dự đoán một điểm có lỗi MAE thấp nhất. Chúng tôi có thể thực hiện lại mô hình và số liệu với 12 hàng xóm để so sánh kết quả 47Các đầu ra mã sau đây 48Với 12 nước láng giềng, mô hình KNN của chúng tôi hiện giải thích được 69% phương sai trong dữ liệu và đã mất ít hơn một chút, từ 422 đến 423, 423 đến 438 và 424 đến 440 với các chỉ số tương ứng. Nó không phải là một cải tiến rất lớn, nhưng dù sao nó cũng là một cải tiếnGhi chú. Đi xa hơn trong phân tích này, thực hiện Phân tích dữ liệu khám phá (EDA) cùng với phân tích còn lại có thể giúp chọn các tính năng và đạt được kết quả tốt hơn Chúng ta đã thấy cách sử dụng KNN cho hồi quy - nhưng nếu chúng ta muốn phân loại một điểm thay vì dự đoán giá trị của nó thì sao? Trong nhiệm vụ này, thay vì dự đoán một giá trị liên tục, chúng tôi muốn dự đoán lớp mà các nhóm khối này thuộc về. Để làm điều đó, chúng ta có thể chia giá trị nhà trung bình cho các quận thành các nhóm có phạm vi giá trị nhà khác nhau hoặc các nhóm
Hãy tạo các thùng dữ liệu để chuyển đổi các giá trị liên tục của chúng ta thành các danh mục Sau đó, chúng tôi có thể chia tập dữ liệu của mình thành các thuộc tính và nhãn của nó 49Vì chúng tôi đã sử dụng cột 46 để tạo thùng, nên chúng tôi cần bỏ cột ________ 146 và cột ________ 2443 khỏi ________ 360. Bằng cách này, 403 sẽ chứa 8 cột đầu tiên của tập dữ liệu (i. e. thuộc tính, tính năng) trong khi 59 của chúng tôi sẽ chỉ chứa nhãn được gán cho 443Ghi chú. Bạn cũng có thể chọn các cột bằng cách sử dụng 448 thay vì bỏ chúng. Khi xóa, chỉ cần lưu ý rằng bạn cần gán giá trị 59 trước khi gán giá trị 60, bởi vì bạn không thể gán cột bị loại bỏ của 403 cho một đối tượng khác trong bộ nhớTách dữ liệu thành các tập huấn luyện và kiểm traVì nó đã được thực hiện với hồi quy, chúng tôi cũng sẽ chia tập dữ liệu thành các phần tách đào tạo và thử nghiệm. Vì chúng tôi có dữ liệu khác nhau, chúng tôi cần lặp lại quy trình này
Chúng tôi sẽ sử dụng lại giá trị Scikit-Learn tiêu chuẩn của 75% dữ liệu huấn luyện và 25% dữ liệu thử nghiệm. Điều này có nghĩa là chúng ta sẽ có cùng số lượng bản ghi đào tạo và kiểm tra như trong hồi quy trước Vì chúng tôi đang xử lý cùng một tập dữ liệu chưa được xử lý và các đơn vị đo lường khác nhau của nó, nên chúng tôi sẽ thực hiện lại quy mô đối tượng, giống như cách chúng tôi đã làm đối với dữ liệu hồi quy của mình 81Đào tạo và dự đoán để phân loạiSau khi tạo thùng, tách và chia tỷ lệ dữ liệu, cuối cùng chúng ta cũng có thể điều chỉnh bộ phân loại trên đó. Để dự đoán, chúng tôi sẽ sử dụng lại 5 người hàng xóm làm đường cơ sở. Bạn cũng có thể khởi tạo lớp 452 mà không cần bất kỳ đối số nào và nó sẽ tự động sử dụng 5 lớp lân cận. Ở đây, thay vì nhập 408, chúng tôi sẽ nhập 454, lớp 82Sau khi lắp 454, chúng tôi có thể dự đoán các lớp của dữ liệu thử nghiệm 83Thời gian để đánh giá các dự đoán. Các lớp dự đoán có phải là một cách tiếp cận tốt hơn so với dự đoán các giá trị trong trường hợp này không? Để đánh giá trình phân loại KNN, chúng tôi cũng có thể sử dụng phương pháp 456, nhưng nó thực thi một số liệu khác vì chúng tôi đang chấm điểm cho một trình phân loại chứ không phải một biến hồi quy. Số liệu cơ bản để phân loại là 457 - nó mô tả có bao nhiêu dự đoán mà trình phân loại của chúng tôi đã đúng. Giá trị độ chính xác thấp nhất là 0 và cao nhất là 1. Chúng tôi thường nhân giá trị đó với 100 để có tỷ lệ phần trăm$$ Ghi chú. Rất khó để đạt được độ chính xác 100% trên bất kỳ dữ liệu thực nào, nếu điều đó xảy ra, hãy lưu ý rằng có thể xảy ra rò rỉ hoặc điều gì đó không ổn - không có sự đồng thuận về giá trị độ chính xác lý tưởng và nó cũng phụ thuộc vào ngữ cảnh. Tùy thuộc vào chi phí của sai sót (tệ hại đến mức nào nếu chúng ta tin tưởng bộ phân loại và hóa ra là sai), tỷ lệ sai sót chấp nhận được có thể là 5%, 10% hoặc thậm chí 30%. Hãy ghi điểm phân loại của chúng tôi Bằng cách nhìn vào điểm kết quả, chúng tôi có thể suy luận rằng trình phân loại của chúng tôi đã đúng ~62% số lớp của chúng tôi. Điều này đã giúp ích trong việc phân tích, mặc dù chỉ biết những gì bộ phân loại đã đúng, rất khó để cải thiện nó
Lỗi hệ thống của một số lớp, trái ngược với lỗi cân bằng được chia sẻ giữa các lớp đều có thể mang lại điểm chính xác 62%. Độ chính xác không phải là thước đo thực sự tốt để đánh giá thực tế - nhưng đóng vai trò là một đại diện tốt. Thông thường, với các bộ dữ liệu cân bằng, độ chính xác 62% được trải đều tương đối. Ngoài ra, thường xuyên hơn không, các bộ dữ liệu không cân bằng, vì vậy chúng tôi quay lại hình vuông với độ chính xác là một số liệu không đủ Chúng tôi có thể xem xét kỹ hơn các kết quả bằng cách sử dụng các số liệu khác để có thể xác định rằng. Bước này cũng khác với hồi quy, ở đây chúng ta sẽ sử dụng
$$
$$
$$ Ghi chú. Điểm F1 có trọng số cũng tồn tại và đó chỉ là điểm F1 không áp dụng cùng trọng số cho tất cả các lớp. Trọng số thường được quyết định bởi sự hỗ trợ của các lớp - có bao nhiêu trường hợp "hỗ trợ" điểm F1 (tỷ lệ nhãn thuộc về một lớp nhất định). Hỗ trợ càng thấp (càng ít phiên bản của một lớp), trọng số F1 cho lớp đó càng thấp, vì lớp đó càng không đáng tin cậy Các phương pháp 459 và 460 của mô-đun 420 có thể được sử dụng để tính toán và hiển thị tất cả các chỉ số này. 462 được hiển thị rõ hơn bằng cách sử dụng bản đồ nhiệt. Báo cáo phân loại đã cung cấp cho chúng tôi 457, 464, 465 và 458, nhưng bạn cũng có thể nhập từng chỉ số này từ 420Để có được số liệu, hãy thực thi đoạn mã sau Đầu ra của tập lệnh trên trông như thế này 84Kết quả cho thấy KNN có thể phân loại tất cả 5160 bản ghi trong bộ kiểm tra với độ chính xác 62%, cao hơn mức trung bình. Các hỗ trợ khá bằng nhau (phân bổ đều các lớp trong tập dữ liệu), do đó, F1 có trọng số và F1 không trọng số sẽ gần giống nhau Chúng ta cũng có thể xem kết quả của các số liệu cho từng lớp trong số 4 lớp. Từ đó, chúng tôi có thể nhận thấy rằng ________ 2468 có độ chính xác thấp nhất, thấp nhất ________ 2465 và thấp nhất ________ 2458. 471 xếp ngay sau 468 vì có điểm số thấp nhất, và sau đó, chúng ta có 473 với điểm số cao nhất, tiếp theo là 474Bằng cách nhìn vào ma trận nhầm lẫn, chúng ta có thể thấy rằng
Ngoài ra, hãy lưu ý rằng đường chéo hiển thị các giá trị dương thực, khi nhìn vào nó, dễ dàng thấy rằng 468 và 479 có các giá trị được dự đoán chính xác nhấtVới những kết quả đó, chúng tôi có thể đi sâu hơn vào phân tích bằng cách kiểm tra thêm chúng để tìm ra lý do tại sao điều đó xảy ra và cũng hiểu liệu 4 lớp có phải là cách tốt nhất để phân loại dữ liệu hay không. Có lẽ các giá trị từ 468 và 479 quá gần nhau nên khó phân biệt
Bên cạnh số ngăn dữ liệu tùy ý, còn có một số tùy ý khác mà chúng tôi đã chọn, số lượng hàng xóm của K. Kỹ thuật tương tự mà chúng tôi đã áp dụng cho tác vụ hồi quy có thể được áp dụng cho phân loại khi xác định số lượng K tối đa hóa hoặc giảm thiểu giá trị số liệu Hãy lặp lại những gì đã được thực hiện cho hồi quy và vẽ đồ thị của các giá trị K và số liệu tương ứng cho tập kiểm tra. Bạn cũng có thể chọn số liệu nào phù hợp hơn với ngữ cảnh của mình, ở đây, chúng tôi sẽ chọn 458Bằng cách này, chúng tôi sẽ vẽ đồ thị của 458 cho các giá trị dự đoán của tập kiểm tra cho tất cả các giá trị K trong khoảng từ 1 đến 40Đầu tiên, chúng tôi nhập 492 từ 420 và sau đó tính toán giá trị của nó cho tất cả các dự đoán của bộ phân loại K-Hàng xóm gần nhất, trong đó K nằm trong khoảng từ 1 đến 40Bước tiếp theo là vẽ các giá trị 492 theo giá trị K. Sự khác biệt so với hồi quy là thay vì chọn giá trị K tối thiểu hóa lỗi, lần này chúng tôi sẽ chọn giá trị tối đa hóa 458Thực thi đoạn script sau để tạo cốt truyện 85Biểu đồ đầu ra trông như thế này Từ đầu ra, chúng ta có thể thấy rằng ________ 2458 là cao nhất khi giá trị của K là ________ 2497. Hãy đào tạo lại bộ phân loại của chúng ta với 15 người hàng xóm và xem nó làm gì với kết quả báo cáo phân loại của chúng ta 86kết quả này 87Lưu ý rằng số liệu của chúng tôi đã được cải thiện với 15 lớp lân cận, chúng tôi có độ chính xác 63% và cao hơn 464, 465 và 800, nhưng chúng tôi vẫn cần xem xét thêm các thùng để cố gắng hiểu tại sao 458 cho các lớp 802 và 803 vẫn thấpBên cạnh việc sử dụng KNN để hồi quy và xác định giá trị khối và để phân loại, để xác định các lớp khối - chúng ta cũng có thể sử dụng KNN để phát hiện giá trị khối trung bình nào khác với hầu hết - những giá trị không tuân theo những gì hầu hết dữ liệu đang làm. Nói cách khác, chúng ta có thể sử dụng KNN để phát hiện các ngoại lệ Triển khai KNN để phát hiện ngoại lệ với Scikit-LearnPhát hiện ngoại lệ sử dụng một phương pháp khác với những gì chúng tôi đã làm trước đây để hồi quy và phân loại Ở đây, chúng ta sẽ xem mỗi hàng xóm cách một điểm dữ liệu bao xa. Hãy sử dụng 5 hàng xóm mặc định. Đối với một điểm dữ liệu, chúng tôi sẽ tính khoảng cách đến từng K-hàng xóm gần nhất. Để làm điều đó, chúng tôi sẽ nhập một thuật toán KNN khác từ Scikit-learning, thuật toán này không dành riêng cho hồi quy hoặc phân loại được gọi đơn giản là 804Sau khi nhập, chúng tôi sẽ khởi tạo một lớp 804 với 5 hàng xóm - bạn cũng có thể khởi tạo nó với 12 hàng xóm để xác định các ngoại lệ trong ví dụ hồi quy của chúng tôi hoặc với 15, để thực hiện tương tự cho ví dụ phân loại. Sau đó, chúng tôi sẽ điều chỉnh dữ liệu tàu của mình và sử dụng phương pháp 806 để tìm khoảng cách được tính toán của chúng tôi cho từng điểm dữ liệu và các chỉ mục lân cậnBây giờ chúng tôi có 5 khoảng cách cho mỗi điểm dữ liệu - khoảng cách giữa chính nó và 5 điểm lân cận và một chỉ mục xác định chúng. Hãy xem qua ba kết quả đầu tiên và hình dạng của mảng để hình dung điều này rõ hơn Để xem hình dạng ba khoảng cách đầu tiên, hãy thực hiện 88 89Quan sát thấy có 3 hàng cách nhau 5 hàng. Chúng ta cũng có thể xem và các chỉ số của hàng xóm 0Kết quả này trong 1Trong kết quả ở trên, chúng ta có thể thấy các chỉ số của mỗi trong số 5 người hàng xóm. Bây giờ, chúng ta có thể tiếp tục tính giá trị trung bình của 5 khoảng cách và vẽ biểu đồ đếm từng hàng trên trục X và hiển thị từng khoảng cách trung bình trên trục Y 2Lưu ý rằng có một phần của biểu đồ trong đó khoảng cách trung bình có giá trị thống nhất. Điểm trục Y mà phương tiện không quá cao hoặc quá thấp chính là điểm chúng ta cần xác định để loại bỏ các giá trị ngoại lệ Trong trường hợp này, đó là nơi khoảng cách trung bình là 3. Hãy vẽ lại đồ thị bằng một đường chấm chấm nằm ngang để có thể phát hiện ra nó 3Dòng này đánh dấu khoảng cách trung bình mà trên đó tất cả các giá trị khác nhau. Điều này có nghĩa là tất cả các điểm có khoảng cách 63 trên 803 đều là điểm ngoại lệ của chúng tôi. Chúng ta có thể tìm ra chỉ số của những điểm đó bằng cách sử dụng 809. Phương thức này sẽ xuất ra hoặc là 810 hoặc là 811 cho mỗi chỉ mục liên quan đến điều kiện 3 ở trên của 63Các đầu ra mã trên 4Bây giờ chúng tôi có chỉ số điểm ngoại lệ của chúng tôi. Hãy định vị chúng trong khung dữ liệu Kết quả này trong 5Phát hiện ngoại lệ của chúng tôi đã hoàn tất. Đây là cách chúng tôi phát hiện từng điểm dữ liệu đi chệch khỏi xu hướng dữ liệu chung. Chúng tôi có thể thấy rằng có 16 điểm trong dữ liệu đào tạo của chúng tôi cần được xem xét, điều tra thêm, có thể được xử lý hoặc thậm chí xóa khỏi dữ liệu của chúng tôi (nếu chúng được nhập sai) để cải thiện kết quả. Những điểm đó có thể là do lỗi đánh máy, có nghĩa là giá trị khối không nhất quán hoặc thậm chí cả hai Ưu và nhược điểm của KNNTrong phần này, chúng tôi sẽ trình bày một số ưu và nhược điểm của việc sử dụng thuật toán KNN ưu
Nhược điểm
Tiến xa hơn - Cầm tay chỉ việc End-to-End Project
Sử dụng Keras, API học sâu được xây dựng dựa trên Tensorflow, chúng tôi sẽ thử nghiệm các kiến trúc, xây dựng một tập hợp các mô hình xếp chồng lên nhau và huấn luyện mạng nơ-ron siêu học (mô hình cấp 1) để tính giá của một ngôi nhà Học sâu thật tuyệt vời - nhưng trước khi sử dụng đến nó, bạn cũng nên thử giải quyết vấn đề bằng các kỹ thuật đơn giản hơn, chẳng hạn như với thuật toán học nông. Hiệu suất cơ bản của chúng tôi sẽ dựa trên thuật toán Random Forest Regression. Ngoài ra - chúng ta sẽ khám phá việc tạo các nhóm mô hình thông qua Scikit-Learn thông qua các kỹ thuật như đóng gói và biểu quyết Đây là một dự án toàn diện và giống như tất cả các dự án Máy học, chúng tôi sẽ bắt đầu với Phân tích dữ liệu khám phá, tiếp theo là Tiền xử lý dữ liệu và cuối cùng là Xây dựng các mô hình học nông và học sâu để phù hợp với dữ liệu mà chúng tôi đã khám phá và làm sạch trước đó Phần kết luậnKNN là một thuật toán đơn giản nhưng mạnh mẽ. Nó có thể được sử dụng cho nhiều tác vụ như hồi quy, phân loại hoặc phát hiện ngoại lệ KNN đã được sử dụng rộng rãi để tìm sự giống nhau của tài liệu và nhận dạng mẫu. Nó cũng đã được sử dụng để phát triển các hệ thống đề xuất và giảm kích thước và các bước tiền xử lý cho thị giác máy tính - đặc biệt là các nhiệm vụ nhận dạng khuôn mặt Trong hướng dẫn này - chúng tôi đã trải qua hồi quy, phân loại và phát hiện ngoại lệ bằng cách sử dụng triển khai thuật toán K-Láng giềng gần nhất của Scikit-Learn KNN là gì và việc triển khai nó là gì?Thuật toán k-láng giềng gần nhất (KNN) là thuật toán máy học đơn giản, được giám sát có thể được sử dụng để giải quyết cả vấn đề phân loại và hồi quy. It's easy to implement and understand, but has a major drawback of becoming significantly slows as the size of that data in use grows.
Python tính toán khoảng cách KNN như thế nào?Các bước của thuật toán KNN là (mã giả chính thức). Khởi tạo selecti = 0 cho tất cả i điểm dữ liệu từ tập huấn luyện. Chọn một thước đo khoảng cách (giả sử chúng ta sử dụng Khoảng cách Euclide) Đối với mỗi điểm dữ liệu của tập huấn luyện i tính toán distancei = khoảng cách giữa điểm dữ liệu mới và điểm huấn luyện i.
KNN có nghĩa là gì trong Python?K-Nearest Neighbors, viết tắt là KNN, là một trong những thuật toán học máy đơn giản nhất và được sử dụng trong nhiều tổ chức. KNN là một thuật toán lười học phi tham số |