Tải bản đầy đủ (.docx) (21 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (500.86 KB, 21 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ
MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
-—□&□-—

BÁO CÁO ĐỒ ÁN PYTHON

CHO MÁY HỌC
Đề tài:

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:
STT
Họ tên
1
Huỳnh Phạm Việt Pháp
2
Hoàng Anh Tú
3
Nguyễn Lộc Linh

MSSV
19522571
19522449
19521754


MỤC LỤC



2


I. Giới thiệu chung
Trong Machine Learning có một thuật tố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 tố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 tốn được thực hiện khi nó cần dự đố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ự đố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 &6T

2..V0U LooK Ạ5 vrs

3 Mts NỄI&HMS AM

To CLAÍS1VY

THÍUS NtMỉss-r

<5RANWSr sa T-HIS IS íVogrta/
AN

K-nearest neighbor là một trong những thuật tốn supervisedlearning đơ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 tố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ề Knearest 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 tốn supervised
learning. Thuật tố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à 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

mđ@lhtađớỡđđ[?Bitađ0m)âớđlđđ=ó3

K l gỡ?
K biu th s lỏng ging 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í


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

Giả sử ta cần đố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.
Mèo

Chó

Móng nhọn, có măng cụt

Móng cùn

Kích cỡ tai nhỏ hơn

Tai lớn hơn

Mũi mà mõm nhỏ hơn

Mũi và mõm dài hơn

Kích thước cơ thể nhỏ

Kích thước cơ thể lớn hơn

Giờ nhìn vào ảnh và đố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ó.


Như vậy thì ta có thể đố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 tốn tìm k điểm dữ liệu
gần nhất với điểm đang dự đố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ự đố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ự đốn
sẽ thuộc phân lớp đó.


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 tố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ự
đố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ự đố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.

- Ngồi ra, bộ data cần phải ko có nhiễu hoặc nhiễu ít. Vì thuật
tốn dự đố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 tốn dự đốn
con chó hay con mèo mà thuật tốn lại dự đốn ra con khỉ thì
khơng hợp lý chút nào.


Ứ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.
4.1.

Giới thiệu hàm KNN Classifier.
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

4.2.



Các tham số của hàm KNN classifier.

n_neighbors: chính là số K của KNN, là tham số cơ bản nhất của thuật

tố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ự đốn hơn thì có ảnh hưởng lớn
hơn và ngược lại.


• [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 tố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 tốn ball tree.

• kd_tree: dùng thuật tố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.3.

Tuning hyperparameter (Điều chỉnh siêu tham số).
4/ C-D ộ g ■ ĩ

from sklearn.neighbors ỉmport KNeỉghborsClassỉfier
H -From sklearn.model_selection ỉmport cross_val_score
knn_model = KNeighborsClassỉíierl^)]

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


Q í rom sklearn.model_selection import GridSearchCV
params = {
'nneighbors': range(lj 11),
'weights':['uniform*, 'distance'],
’algorithm‘: ['auto*, ’ball_tree’, ’kd_tree’, ‘brute’],
‘leaf_size‘: [30, 31, 32, 33, 34, 35],
'p’: [1, 2]
}
model = KNeighborsClassifỉer()
grỉd_s = GridSearchCV(model, params)
grỉd_s.fit(X, y)
12* GridSearchCV(estỉmator=KNeỉghborsClassỉfier(),
param grid={'algorithm*: ['auto’, ’ball_tree‘, ’kd_tree’, 'brute'],
*leaf_size': [30, 31, 32, 33, 34, 35],
'n_neighbors■: range(l, 11), ’p‘: [1, 2],
‘weights*: [‘uniíorm’, 'distance’]})
[44] grid_s.best_params_
{'algorithm’: ’auto',
■leaf_sỉze’: 30,
’nneighbors’: 7,
’p’: 2?
■weights’: ■uniíorm■}
knn_model = KNeighborsClassifier(n_neighbors=7, algorithm=’auto’, leaf_size=30, p=2, weights=■unỉíorm')
score = cross_val_score(knn_model, X, y, cv=kf)
prỉnt('accuracy: ’, score.meanO)

Q accuracy: 0.9719047619047618
[46] írom sklearn.model_selectỉon import RandomỉzedSearchCV
rand_s = RandomizedSearchCV(knn_model, params, random_state=0)
rand_s.fit(x, y)
rand_s.best_params_
{'algorỉthm': 'kd_tree',
’leaf_size’: 35,
’n_neỉghbors’: 8,
■p': 17
'weights': 'uniíorm’}
4" 4/ C-D q ộ £)

Q knn_model = KNeighborsClassifier(n_neỉghbors=8, algorithm='kd_tree', leaf_size=35, p=l, weỉghts=■uniíorm*)
score = cross_val_scoreỊ(jknn_model, X, y, cv=kfỊ)Ị
prỉnt(‘accuracy: ', score.meanO)
accuracy: 0.9663492063492063

/>usp=sharing
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úc
khở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.


ộ1 írom sklearn.neighbors import KNeighborsClassiíier
íroir sklearn.modelselectỈDn ỉinport cross val score
knn_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ách
này không hề hiệu quả khi ta có khơng gian siêu tham số q lớn. Ngồi cách tự điều chỉnh ra
thì 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ều
nhất, đó là Randomized Search (Tìm kiếm ngẫu nhiên) và Grid Search (Tìm kiếm kiểu mạng
lướ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 scikitlearn và có tên là GridSearchCV và RandomizedSearchCV.

sklearn.model_selection.RandornizedSearchCV
class sklearn.model_selection.RandomizedSearchCV(esf(mữfor, poram_distrìbutions, *, n_iter=1O, scoríng^None,
n_jobs=None,
refit-True, cv=None, verbose-O, pre_dispatch=2*njobs', random_state-None, error_score=nan, return_train_score=False]
[source]

sklearn .modelselection.GridSearchCV
class sklearn.model_selection.GridSearchCV(estí'mafor, param_grid, *, scoring^None, n_jobs=None, refit=True, cv^None,
verbose=0,
pre_dispatch=2*nJobs', error score-nan, return_train_score=False)
[source]

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ác
tham 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 được
tổ 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
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


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 đảm
bảo được bộ tham số đầu ra sẽ là tốt nhất.

[46] írom sklearn.model_selectỉon import RandonỉzedSearchCV
rand_s - RandoniỉzedSearchCV(knn_inodelJ params, random_state-0)
rand_s.fỉt(x, y)
rand_s.best_params_
{■algorithm': ’kd_tree’,
’leaf_size’: 35,
’n_neighbors*: 8,
■p': 17
‘weights‘: ’uniform’}
-t 4/ GD n ộ £)
Q knn_model = KNeighborsClassifier(n_neỉghbors=8, algorithm='kd_tree', leaf_size=35, p=l, weỉghts=■uniíorm*)
score = cross_val_scoreỊịjknn_model, X, y, cv=kfjịỊ
prỉnt(‘accuracy:
score.meanO)
o accuracy: 0.9663492063492063

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ả đầu
ra sẽ tốt hơn.

5. Thử nghiệm.
5.1.

Đặt vấn đề.


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 tốn này, trong đó ta có thể dùng
KNN Classifier để đố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:
1) Alcohol
2) Malic acid
3) Ash
4) Alkalinity of ash
5) Magnesium
6) Total phenols
7) Flavanoids
8) Nonflavonoid phenols
9) Proanthocyanins
10)
Color intensity
11)Hue
12)
OD280/OD315 of diluted wines (phương pháp pha loãng
rượu)
13)

Proline
Alcohol
Malic_Acid
14.23
13.20
13.16
14.37
13.24

A
s
h
2.
4
3
2.
1
4
2.
6
7
2.
5
0
2.
8
7

Ash_Alcan
ity


Magne
siim

1
5.6

1
27

'
1.2

1

1

1

1

2
.80

1

3.85

13
2


1.0

2
.65

01

6.8

2
.80

00

8.6

Total_Phen
ols

1
18

Plavano
ids

Nonflavanoid_Phe
nols

Proanthocya

nins

Color_Intensi
ty

Hue
ŨD280

Prolin
e

3.06

0.28

2.29

5.64

1.04 3.92

1065

2.76

0.26

1.28

4.38


1.05 3.40

1050

3.24

0.30

2.81

5.68

1.03 3.17

1185

3.49

0.24

2.18

7.80

0.86 3.45

1480

2.69


0.39

1.82

4.32

1.04 2.93

735

2
.80

Tất cả các thành phần đều có giá trị liên tục (continuous).


Bộ dữ liệu gồm 178 dòng, mỗi dòng là một chai rượu vang đã
được phân tích các thành phần và thuộc 1 trong 3 loại rượu vang đã
được chọn trước.
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 tốn.

Vì bài tốn này là bài tố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.
Dữ liệu về rượu có thể được lấy từ trang UCI Machine Learning Repository:
Wine Data Set, hoặc có thể lấy từ bộ datasets của sklearn với load_wine.
B2: Phân tích dữ liệu.
[5] df.info()
<class 'pandas.core.frame.DataFrame ’>
Rangelndex: 178 entries, 0 to 177
Data columns (total 14 columns);
# Column
Non-Null Count

Dtype

0
1
2

Alcohol
MalỉcAcid
Ash

178 non-null
178 non-null
178 non-null

Float6
4
float64
float64


3
4
5
6
7
8
9
i
e
1
1
2
1
3

Ash_Alcanity
Magnesium
TotalPhenols
Flavanoỉds
Nonflavanoid_Phenols
Proanthocyanins
Colorlntensity

178 non-null
178 non-null
178 non-null
178 non-null
178 non-null
178 non-null

178 non-null
178 non-null
178 non-null
178 non-null
178 non-null

float64
Ĩnt64
float64
float64
float64
float64
float64
float64
float64
Ĩnt64
Ĩnt64

Hue

00280
Proline
CustomerSegment

Nhóm đã mơ tả dữ liệu ở phần trên

dtypes: float64(ll)J Ĩnt64(3)
memory usage: 19.6 KB



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 tốn. Ngồ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 tố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 tốn lười và chỉ thực sự huấn luyện mơ hình khi dự đốn dữ liệu.
Nhóm sẽ gom bước huấn luyện, dự đố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:
params = {
■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]

}


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 RandomizedSearchCV
rands = RandomizedSearchCV(knn_model, params, randon_state=0)
rand_s.fit(x, y)
rands.best_params_
{'algorithm’: ’kd tree',
'leaf_size': 35,
■n_neighbors■: 8,
■p': 17

'weỉghts': ,uniform'}
knn model = KNeighborsClassifier(n_neighbors=8, algorithm= ’ kd tree', leaf_size=35, p=l, weights=>' Liniíorm' )
score ■ cross_val_score(knn_nodel, X, y, cv=kf)
print('accuracy:
score.mean())
accuracy: 0.9663492063492063

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:
grỉd_s.best_params_
{■algorithm': 'auto',
'leaf_size': 30,
■n_neighbors': 7,
'p,; 2,
'neights': 'unifor«'}


knnmodel = KNeighborsClassifier(n_neighbors=7, algorithm='auto', leaf_size=30, p=2, weights='uniform')
score = cross_val_score(knn_iỉiodel, X, y, cv=kf)
print('accuracy:
score.meanO)
accuracy: 0.9719047619047618

5.4.

Đánh giá kết quả.

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

Ưu điểm



Dễ sử dụng và cài đặt
Dự đốn kết quả của dữ liệu

Nhược điểm
• Nhạy cảm với dữ liệu
nhiễu


mới dễ dàng
• Độ phức tạp tính tốn nhỏ,
thời gian chạy ngắn.









Khơng tốt khi sử dụng với
tập dữ liệu lớn, nhiều
chiều.
Khá phụ thuộc vào feature
scaling

6.1. Ưu điểm
Dễ sử dụng và cài đặt: Chỉ có hai tham số được yêu cầu khi sử
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 tốn nhỏ, thời gian chạy ngắn: vì đây là thuật
tốn thuộc loại lazy learning, thuật tốn này khơng học một
điều gì từ dữ liệu training mọi tính tốn được thực hiện khi nó
cần dự đố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 tố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 tốn. Như đã nói, KNN là một thuật tốn mà mọi
tính tố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ự đốn
lên rất nhiều.


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 tố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 tố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.


IV.


Tài liệu tham khảo

[1] KNN Algorithm In Machine Learning | KNN Algorithm Using Python | K
Nearest Neighbor | Simplilearn - YouTube
[2] Analytics Vidhya: KNN - The Distance Based Machine Learning
Algorithm (analyticsvidhya.com)
[3] sklearn.neighbors.KNeighborsClassifier — scikit-learn 1.0.1
documentation
[4] UCI Machine Learning Repository: Wine Data Set
[5]


20



×