1. Trang chủ
  2. » Giáo Dục - Đào Tạo

BÁO cáo đồ án PYTHON CHO máy học đề tài k nearest neighbors (k NN) classifier

21 91 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 21
Dung lượng 257,47 KB

Nội dung

Trang 1

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ

K-Nearest Neighbors (K-NN) classifíer

Giảng Viên Hướng Dẫn:TS Nguyễn Vinh Tiệp

Sinh viên thực hiện:

Trang 2

4.3 Tuning siêu tham số tham số KNN classifier.8

Bộ cơ sở dữ liệu dự đoán loại thuốc cho bệnh nhân ( Drug Classification).95.3 Áp dụng hàm KNN classifier vào bài toán.9

Trang 3

I Giới thiệu chung

Trong Machine Learning có một thuật toán được gọi là máy lười học hay trong dân gian còn gọi là “nước đến chân mới nhảy” Bởi lẻ ý tưởng của thuật toán này là nó không học một điều gì từ tập dữ liệu học, mọi tính toán được thực hiện khi nó cần dự đoán nhãn của dữ liệu mới Lớp (nhãn) của một đối tượng dữ liệu mới có thể dự đoán từ các lớp (nhãn) của k hàng xóm gần nó nhất Vì có tính chất như vậy nên thuật toán này được gọi là K-Nearest Neighbors (KNN).

I \ou &6T2 V0U LooK Ạ5 vrs 3 Mts NỄI&HMS AMTo CLAÍS1VYTHÍUS NtMỉss-r<5RANWSr sa T-HIS IS íVogrta/

K-nearest neighbor là một trong những thuật toán supervised-learning đơn giản nhất (mà hiệu quả trong một vài trường hợp) trong Machine Learning Được xếp vào loại lazy learning, K-nearest neighbor có thể áp dụng được vào cả hai loại của bài toán

Supervised learning là Classification và Regression KNN còn được gọi là một thuật toán Instance-based hay Memory-based learning Trong phần nội dung, nhóm sẽ trình bày về kiến thức cơ bản về K-nearest neighbor khi áp dụng vào bài toán Classification.

II Nội dung

1 Giới thiệu KNN Classifier.

KNN viết tắt của K-Nearest Neighbors, là một thuật toán supervised learning Thuật toán này có thể được sử dụng để giải quyết cả những bài toán phân lớp lẫn những bài toán hồi quy Ở bài báo cáo này thuật toán chủ yếu sử dụng cho bài toán phân lớp, gọi là

Trang 4

K-Nearest Neighbors Classifier Đơn giản là thuật toỏn lấy dữ liệu từ input, so sỏnh với những điểm dữ liệu cú nhón gần nhất và dự đoỏn nhón cho điểm dữ liệu input.

K-Nearest Neighbors Classitication

K là gỡ?

K biểu thị số lỏng giềng gần nhất xung quanh điểm kiểm tra hoặc một điểm mới Nếu k = 3, cỏc nhón của ba lớp gần nhất với điểm mới sẽ được kiểm tra và nhón chung nhất được gỏn cho điểm mới.

Choice of value of K

mđấÍỈĩ)iỉ[ớĩ)đOđđmlỉiĩagfeiwwl]đ(ẩ]gđ<,ẵiớ

Trang 5

2 Cách thức hoạt động của KNN.

Giả sử ta cần đoán xem con vật trong hình là con chó hay con mèo Ta có thể dựa vào các đặc điểm ngoại hình của hai con vật này để đưa ra kết luận.

Giờ nhìn vào ảnh và đoán thử xem đó là con chó hay con mèo Ta có thể thấy các đặc điểm của nó giống chó hơn nên nó là chó, hay nói cách khác là giống những con chó khác nên có thể coi nó là chó.

Trang 6

Như vậy thì ta có thể đoán ra là con chó // Không Nó là Chemes

Cách hoạt động của KNN Classifier cũng tương tự như vậy Nó tìm những điểm dữ liệu tương tự điểm dữ liệu input và phân loại điểm điểm dữ liệu đó K là siêu tham số để thuật toán tìm k điểm dữ liệu gần nhất với điểm đang dự đoán.Giả sử K = 5 thì nó sẽ tìm 5 điểm dữ liệu gần với điểm mình cần dự đoán nhất, sau đó dựa trên 5 điểm này thuộc phân lớp nào nhiều nhất thì điểm mình cần dự đoán sẽ thuộc phân lớp đó.

Trang 7

3 Khi nào nên dùng KNN Classifier.

Một vài tiêu chí để có thể có thể sử dụng KNN tốt hơn.

- Vì KNN Classifier là thuật toán supervised learning nên bộ data được gán nhãn sẽ có thể áp dụng KNN.

- Không phải ngẫu nhiên mà KNN còn được gọi là “lazy learner”, KNN không thực sự học từ bộ dữ liệu, mà khi dự đoán dữ liệu mới nó chỉ nhìn vào bộ dữ liệu đã có, tìm những phần tử gần nhất để dự đoán dữ liệu mới Nó cần duyệt qua hết bộ dữ liệu mỗi lần dự đoán một dữ liệu mới Do đó với một bộ data nhỏ thì KNN sẽ chạy nhanh hơn.

- Ngoài ra, bộ data cần phải ko có nhiễu hoặc nhiễu ít Vì thuật toán dự đoán trên những điểm dữ liệu gần nó nên có nhiễu thì sẽ gây vấn đề khá lớn Mình không muốn ở bài toán dự đoán con chó hay con mèo mà thuật toán lại dự đoán ra con khỉ thì không hợp lý chút nào.

Trang 8

Ứng dụng:

KNN là một mô hình đơn giản và trực quan nhưng vẫn có hiệu quả cao vì nó không tham số; mô hình không đưa ra giả định nào về việc phân phối dữ liệu Hơn nữa, nó có thể được sử dụng trực tiếp để phân loại đa lớp.

Thuật toán KNN có nhiều ứng dụng trong ngành đầu tư, bao gồm dự đoán phá sản, dự đoán giá cổ phiếu, phân bổ xếp hạng tín dụng trái phiếu doanh nghiệp, tạo ra chỉ số vốn và trái phiếu tùy chỉnh.

4 Hàm KNN Classifier của thư viện sklearn.

Thư viện scikit-learn đã xây dựng hai mô hình phân loại dựa trên nearest neighbors đó là KNeighborsClassifier và

RadiusNeighborsClassifier, tuy nhiên trong nội dung này chúng ta sẽ chỉ đề cập tới KNeighborsClassifier.

KNeighborsClassifier là một trong những phương pháp phân loại thông dụng nhất Quá trình học của KNeighborsClassifier được dựa trên k neighbors gần nhất của mỗi điểm truy vấn (query point), k là một giá trị số nguyên được cung cấp bởi người dùng Giá trị tối ưu của k thường phụ thuộc nhiều vào dữ liệu: k càng lớn thì càng ít bị ảnh hưởng bởi nhiễu, nhưng sẽ làm ranh giới giữa các lớp ít rõ ràng hơn

- n_neighbors: chính là số K của KNN, là tham số cơ bản nhất của thuật toán KNN Mặc định có giá trị là 5.

- weights: cách phân bố trọng số cho các phần tử xung quanh • ‘uniform’ : Tất các các phần tử có trọng số như nhau

• ‘distance’ : Trọng số dựa theo nghịch đảo khoảng cách Những phần tử ở gần với phần tử được dự đoán hơn thì có ảnh hưởng lớn hơn và ngược lại.

Trang 9

• [callable] : Là một hàm tự chọn có đầu vào là một dãy các khoảng cách và đầu ra là một dãy cùng độ lớn chứa trọng số tương ứng algorithm: thuật toán để tìm những phần tử lân cận Gồm {‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’} và mặc định là ‘auto’.

• ball_tree: sử dụng thuật toán ball tree.

• kd_tree: dùng thuật toán kd tree.

• brute: tìm bằng cách vét cạn

• auto: tự động chọn thuật toán phù hợp dựa vào giá trị của data

4/ C-D ộ g ■ ĩfrom sklearn.neighbors ỉmport KNeỉghborsClassỉfier

H -From sklearn.model_selection ỉmport cross_val_scoreknn_model = KNeighborsClassỉíierl^)]

score = crossvalscoreCknnmodel, X, y, cv=kf)print('accuracy: score.meanO)

accuracy: 0.9492063492063492

Trang 10

Q í rom sklearn.model_selection import GridSearchCVparams = {

'nneighbors': range(lj 11),

'weights':'uniform*, 'distance'],

’algorithm‘: ['auto*, ’ball_tree’, ’kd_tree’, ‘brute’],

[46] írom sklearn.model_selectỉon import RandomỉzedSearchCVrand_s = RandomizedSearchCV(knn_model, params, random_state=0)

Giá trị đầu ra của mô hình sẽ bị ảnh hưởng nhiều bởi các siêu tham số chúng ta truyền vào lúckhởi tạo mô hình, vì vậy để mô hình có hiệu quả cao chúng ta cần phải tiến hành điều chỉnh(tuning) để tìm ra các siêu tham số phù hợp với dữ liệu và mô hình.

Trang 11

ộírom sklearn.neighbors import KNeighborsClassiíieríroir sklearn.modelselectỈDn ỉinport cross val scoreknn_nodel = KNeighborsClas5Ìfĩer](Ị)]

score = cross_val_score(knn_model, X, y, cv=kf)print('accuracy:score.meanO)accuracy: 0.9492063492063492

Cách đơn giản nhất để điều chỉnh các siêu tham số là tự điều chỉnh bằng tay, tuy nhiên cáchnày không hề hiệu quả khi ta có không gian siêu tham số quá lớn Ngoài cách tự điều chỉnh rathì chúng ta còn có 2 phương pháp để điều chỉnh siêu tham số thường được sử dụng nhiềunhất, đó là Randomized Search (Tìm kiếm ngẫu nhiên) và Grid Search (Tìm kiếm kiểu mạnglưới) May mắn là hai phương pháp tìm kiếm này đều được xây dựng ở trong thư viện scikit-learn và có tên là GridSearchCV và RandomizedSearchCV.

Grid Search sẽ tìm kiếm bằng cách vét cạn mọi tổ hợp siêu tham số có thể xảy ra dựa trên cáctham số và giá trị tham số được chỉ định Ưu điểm của Grid Search là chắc chắn sẽ tìm ra đượctổ hợp siêu tham số tốt nhất trong các giá trị được chỉ định, tuy nhiên khi không gian tham sốcàng lớn thì thời gian tìm kiếm sẽ càng lâu vì Grid Search phải duyệt mọi giá trị.

Trái ngược với Grid Search, Randomized Search lại tìm kiếm bằng cách lựa chọn ngẫu nhiên

Trang 12

các tham số Vì sẽ không phải vét cạn mọi giá trị tham số mà sẽ chọn ngẫu nhiên nên ưu điểm

Trang 13

của Randomized Search chính là tốc độ, ngược lại nhược điểm của nó chính là việc không đảmbảo được bộ tham số đầu ra sẽ là tốt nhất.

[46] írom sklearn.model_selectỉon import RandonỉzedSearchCVrand_s - RandoniỉzedSearchCV(knn_inodelJ params, random_state-0)

Một điểm đặc biệt của hai hàm GridSearchCV và RandomizedSearchCV của scikit-learn này làchúng đều có “CV” ở cuối tên “CV” là viết tắt cho Cross Validation, và đúng vậy hai hàm nàyđều được tích hợp sẵn Cross Validation vào quá trình đánh giá tham số, giúp cho kết quả đầura sẽ tốt hơn.

5 Thử nghiệm.

Trang 14

Giả sử cho bài toán phân loại rượu dựa vào các thành phần trong nó Làm sao để biết được loại rượu có nồng độ cồn là 14.23°, tỉ lệ tro là 2.43%, độ kiềm của tro là 15.6, lượng magiê là 127mg, v.v thì thuộc loại rượu nào?

Có nhiều cách để giải quyết bài toán này, trong đó ta có thể dùng KNN Classifier để đoán ra loại rượu.

5.2 Mô tả dữ liệu.

Bộ cơ sở dữ liệu Rượu (Wine Database)

Những dữ liệu này là kết quả phân tích hóa học của rượu vang được trồng trong cùng một vùng ở Ý nhưng có nguồn gốc từ ba giống cây trồng khác nhau Sau khi phân tích đã xác định được giá trị của 13 thành phần hóa học được tìm thấy trong mỗi loại rượu.

Bộ dữ liệu bao gồm các thành phần hóa học như sau:

Trang 15

Bộ dữ liệu gồm 178 dòng, mỗi dòng là một chai rượu vang đã

Mục tiêu của bài toán là dự đoán loại rượu thuộc 1 trong 3 loại rượu vang.

Số lượng mỗi loại rượu vang trong bộ dữ liệu.

5.3 Áp dụng hàm KNN classifier vào bài toán.

Vì bài toán này là bài toán phân lớp nên có thể áp dụng các bước phân lớp dữ liệu như sau:

B1: Thu thập dữ liệu.

Wine Data Set, hoặc có thể lấy từ bộ datasets của sklearn với load_wine.

Data columns (total 14 columns);#ColumnNon-Null CountDtype0Alcohol178 non-null Float6

41MalỉcAcid178 non-nullfloat642Ash178 non-nullfloat64

3Ash_Alcanity178 non-nullfloat64

Trang 16

B3: Chọn mô hình

Vì bài báo cáo đang nói về mô hình KNN nên áp dụng mô hình KNN vào giải quyết bài toán Ngoài ra chúng ta sẽ áp dụng thêm một số mô hình phân lớp khác để so sánh kết quả với KNN, bao gồm Random Forest, SVM, Logistic Regression, Gaussian, XgBoost.

B4: Xử lý dữ liệu.

Vì thuật toán KNN khá phụ thuộc vào feature scaling nên nhóm sẽ áp dụng standardscaler của thư viện sklearn để tiêu chuẩn hoá dữ liệu.

B5: Huấn luyện mô hình

KNN là thuật toán lười và chỉ thực sự huấn luyện mô hình khi dự đoán dữ liệu Nhóm sẽ gom bước huấn luyện, dự đoán và đánh giá vào chung với nhau Sử dụng hàm scross_val_score của sklearn giúp nhóm đạt được mục tiêu này và chỉ cần nhìn vào phần đánh giá độ chính xác của mô hình để đưa ra nhận xét Đồng thời kết hợp với KFold với k = 5 của sklearn để có được độ chính xác khách quan nhất.

Kết quả cho ra độ chính xác vào khoảng 0.9492.

B6: Điều chỉnh tham số

Sau khi chạy mô hình với tham số mặc định Nhóm nhận thấy có thể thử thay đổi các tham số để độ chính xác có thể tăng thêm Vì thế nhóm đã dùng

GridSearchCV và RandomizedSearchCV của scikit-learn để có thể tự động tìm ra tham số tối ưu hơn với bộ data này.

Bộ tham số dùng để chỉnh sửa là n_neighbors, weights, algorithm, leaf_size và p với các giá trị như sau:

■nneĩghbors■: range(l, 11),

'ueights1:1unĩíorm', ■distance1] J

'algorithm': ['auto', ■ball_tree', ■ kdtree', 'brute'],■leaf_size': [30, 31, 32, 33, 34, 35],

'p': |1 2]}

Trang 17

Sau khi tuning các siêu tham số với RandomizedSearchCV thì độ chính xác đã tăng lên là khoảng 0.9663, chứng minh mô hình còn có thể cái thiện.

from sklearn.model_selection import RandomizedSearchCVrands = RandomizedSearchCV(knn_model, params, randon_state=0)

Nhóm dùng đến GridSearchCV để tìm tham số tốt nhất có thể Độ chính xác tăng lên 0.9719 với những tham số như sau:

6 Ưu điểm và nhược điểm

Trang 18

mới dễ dàng

• Độ phức tạp tính toán nhỏ, thời gian chạy ngắn.

• Không tốt khi sử dụng với

dụng thuật toán KNN là giá trị k và hàm khoảng cách đa dạng có thể sử dụng linh hoạt số liệu khoảng cách phù hợp nhất • Dự đoán kết quả của dữ liệu mới dễ dàng: nhờ vào phương

pháp tiếp cận dựa trên bộ nhớ, cho phép thích ứng nhanh với các dữ liệu mới.

• Độ phức tạp tính toán nhỏ, thời gian chạy ngắn: vì đây là thuật toán thuộc loại lazy learning, thuật toán này không học một điều gì từ dữ liệu training mọi tính toán được thực hiện khi nó cần dự đoán kết quả của dữ liệu, mới Chính điều này làm thời

gian học của thuật toán KNN ngắn hơn so với các thuật toán khác “siêng năng” hơn.

6.2 Nhược điểm

• Nhạy cảm với dữ liệu nhiễu: KNN nhiễu dễ đưa ra kết quả với độ chính xác thấp khi k nhỏ.

• Không tốt khi sử dụng với tập dữ liệu lớn, nhiều chiều: Cần thời gian lưu training set, khi dữ liệu training và test tăng lên nhiều sẽ cần nhiều thời gian tính toán Như đã nói, KNN là một thuật toán mà mọi tính toán đều nằm ở khâu test Trong đó việc tính khoảng cách tới từng điểm dữ liệu trong training set sẽ tốn rất nhiều thời gian, đặc biệt là với các cơ sở dữ liệu có số chiều lớn và có nhiều điểm dữ liệu Với K càng lớn thì độ phức tạp cũng sẽ tăng lên Ngoài ra, việc lưu toàn bộ dữ liệu trong bộ nhớ cũng ảnh hưởng tới hiệu năng của KNN.

• Khá phụ thuộc vào feature scaling: Việc tiêu chuẩn hoá dữ liệu trước khi dùng KNN Classifier giúp tăng độ chính xác khi dự đoán lên rất nhiều.

Trang 19

III.Kết luận

Trí tuệ nhân tạo (AI) giúp máy móc có thể học hỏi kinh nghiệm, điều chỉnh theo các đầu vào mới và thực hiện các tác vụ giống như con người Mọi người trên các lĩnh vực khác nhau đang cố gắng áp dụng AI để làm cho nhiệm vụ của họ dễ dàng hơn rất nhiều.

Bài báo cáo cung cấp các thông tin cơ bản nhất về thuật toán máy học KNN classifier như khái niệm, thành phần, ưu khuyết điểm và xây dựng ví dụ tìm hiểu thuật toán một cách trực quan giúp dễ dàng nắm bắt các thông tin quan trọng về thuật toán K-Nearest

Neighbors.

Trang 20

IV Tài liệu tham khảo

[1] KNN Algorithm In Machine Learning | KNN Algorithm Using Python | K Nearest Neighbor | Simplilearn - YouTube

Trang 21

20

Ngày đăng: 15/01/2022, 17:59

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w