{"id":134,"date":"2021-03-18T07:44:50","date_gmt":"2021-03-18T07:44:50","guid":{"rendered":"https:\/\/datasciencebasic.com\/?p=134"},"modified":"2021-04-29T00:12:39","modified_gmt":"2021-04-29T00:12:39","slug":"k-nearest-neighbors-knn","status":"publish","type":"post","link":"https:\/\/datasciencebasic.com\/?p=134","title":{"rendered":"K-Nearest Neighbors (KNN)"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">K- Nearest Neighbors (kNN) l\u00e0 m\u1ed9t thu\u1eadt to\u00e1n h\u1ecdc m\u00e1y c\u00f3 gi\u00e1m s\u00e1t (supervised learning) c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng trong c\u1ea3 ph\u00e2n lo\u1ea1i (classification) v\u00e0 h\u1ed3i quy (regression). C\u00f3 th\u1ec3 n\u00f3i kNN l\u00e0 m\u1ed9t thu\u1eadt to\u00e1n xu\u1ea5t ph\u00e1t t\u1eeb th\u1ef1c t\u1ebf cu\u1ed9c s\u1ed1ng. M\u1ecdi ng\u01b0\u1eddi c\u00f3 xu h\u01b0\u1edbng b\u1ecb \u1ea3nh h\u01b0\u1edfng b\u1edfi nh\u1eefng ng\u01b0\u1eddi xung quanh h\u1ecd. H\u00e0nh vi c\u1ee7a ch\u00fang ta \u0111\u01b0\u1ee3c h\u01b0\u1edbng d\u1eabn b\u1edfi nh\u1eefng ng\u01b0\u1eddi b\u1ea1n m\u00e0 ch\u00fang ta \u0111\u00e3 l\u1edbn l\u00ean c\u00f9ng. Cha m\u1eb9 ch\u00fang ta c\u0169ng h\u00ecnh th\u00e0nh nh\u00e2n c\u00e1ch c\u1ee7a ch\u00fang ta theo m\u1ed9t s\u1ed1 c\u00e1ch. N\u1ebfu b\u1ea1n l\u1edbn l\u00ean v\u1edbi nh\u1eefng ng\u01b0\u1eddi y\u00eau th\u1ec3 thao, r\u1ea5t c\u00f3 th\u1ec3 b\u1ea1n s\u1ebd y\u00eau th\u1ec3 thao, t\u1ea5t nhi\u00ean c\u0169ng c\u00f3 nh\u1eefng ngo\u1ea1i l\u1ec7.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">kNN ho\u1ea1t \u0111\u1ed9ng v\u1edbi nguy\u00ean l\u00fd t\u01b0\u01a1ng t\u1ef1. Gi\u00e1 tr\u1ecb c\u1ee7a m\u1ed9t \u0111i\u1ec3m d\u1eef li\u1ec7u \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh b\u1edfi c\u00e1c \u0111i\u1ec3m d\u1eef li\u1ec7u xung quanh n\u00f3.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">N\u1ebfu b\u1ea1n c\u00f3 m\u1ed9t ng\u01b0\u1eddi b\u1ea1n r\u1ea5t th\u00e2n v\u00e0 d\u00e0nh ph\u1ea7n l\u1edbn th\u1eddi gian cho anh \u1ea5y \/ c\u00f4 \u1ea5y, b\u1ea1n s\u1ebd c\u00f3 chung s\u1edf th\u00edch v\u00e0 t\u1eadn h\u01b0\u1edfng nh\u1eefng \u0111i\u1ec1u gi\u1ed1ng nhau. \u0110\u00f3 l\u00e0 kNN v\u1edbi k = 1.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">N\u1ebfu b\u1ea1n lu\u00f4n \u0111i ch\u01a1i v\u1edbi m\u1ed9t nh\u00f3m 5 ng\u01b0\u1eddi, m\u1ed7i ng\u01b0\u1eddi trong nh\u00f3m c\u00f3 \u1ea3nh h\u01b0\u1edfng \u0111\u1ebfn h\u00e0nh vi c\u1ee7a b\u1ea1n v\u00e0 b\u1ea1n s\u1ebd l\u00e0 trung b\u00ecnh c\u1ee7a 5. \u0110\u00f3 l\u00e0 kNN v\u1edbi k = 5.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">B\u1ed9 ph\u00e2n lo\u1ea1i kNN x\u00e1c \u0111\u1ecbnh l\u1edbp (class) c\u1ee7a m\u1ed9t \u0111i\u1ec3m d\u1eef li\u1ec7u theo nguy\u00ean t\u1eafc bi\u1ec3u quy\u1ebft \u0111a s\u1ed1. N\u1ebfu k \u0111\u01b0\u1ee3c \u0111\u1eb7t l\u00e0 5, c\u00e1c l\u1edbp c\u1ee7a 5 \u0111i\u1ec3m g\u1ea7n nh\u1ea5t s\u1ebd \u0111\u01b0\u1ee3c ki\u1ec3m tra. D\u1ef1 \u0111o\u00e1n \u0111\u01b0a ra k\u1ebft qu\u1ea3 l\u1edbp c\u1ee7a \u0111i\u1ec3m d\u1eef li\u1ec7u d\u1ef1a v\u00e0o l\u1edbp n\u00e0o chi\u1ebfm \u0111a s\u1ed1 trong 5 \u0111i\u1ec3m g\u1ea7n nh\u1ea5t. T\u01b0\u01a1ng t\u1ef1, h\u1ed3i quy kNN l\u1ea5y gi\u00e1 tr\u1ecb trung b\u00ecnh c\u1ee7a 5 \u0111i\u1ec3m g\u1ea7n nh\u1ea5t.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L\u00e0m th\u1ebf n\u00e0o c\u00e1c \u0111i\u1ec3m d\u1eef li\u1ec7u \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh l\u00e0 g\u1ea7n nhau? Tr\u01b0\u1edbc h\u1ebft c\u1ea7n \u0111o kho\u1ea3ng c\u00e1ch gi\u1eefa c\u00e1c \u0111i\u1ec3m d\u1eef li\u1ec7u. C\u00f3 nhi\u1ec1u ph\u01b0\u01a1ng ph\u00e1p \u0111\u1ec3 \u0111o kho\u1ea3ng c\u00e1ch. Ph\u00e9p \u0111o kho\u1ea3ng c\u00e1ch Euclid l\u00e0 m\u1ed9t trong nh\u1eefng ph\u00e9p \u0111o kho\u1ea3ng c\u00e1ch \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng ph\u1ed5 bi\u1ebfn nh\u1ea5t. H\u00ecnh d\u01b0\u1edbi \u0111\u00e2y cho th\u1ea5y c\u00e1ch t\u00ednh kho\u1ea3ng c\u00e1ch euclid gi\u1eefa hai \u0111i\u1ec3m trong kh\u00f4ng gian 2 chi\u1ec1u. Kho\u1ea3ng c\u00e1ch Euclid \u0111\u01b0\u1ee3c t\u00ednh to\u00e1n b\u1eb1ng c\u00f4ng th\u1ee9c sau:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"221\" height=\"32\" src=\"https:\/\/i0.wp.com\/datasciencebasic.com\/wp-content\/uploads\/2021\/04\/formular.png?resize=221%2C32&#038;ssl=1\" alt=\"\" class=\"wp-image-145\"\/><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"450\" height=\"380\" src=\"https:\/\/i0.wp.com\/datasciencebasic.com\/wp-content\/uploads\/2021\/04\/distance.png?resize=450%2C380&#038;ssl=1\" alt=\"\" class=\"wp-image-135\" srcset=\"https:\/\/i0.wp.com\/datasciencebasic.com\/wp-content\/uploads\/2021\/04\/distance.png?w=450&amp;ssl=1 450w, https:\/\/i0.wp.com\/datasciencebasic.com\/wp-content\/uploads\/2021\/04\/distance.png?resize=300%2C253&amp;ssl=1 300w\" sizes=\"auto, (max-width: 450px) 100vw, 450px\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Ngu\u1ed3n: <a href=\"https:\/\/www.codespeedy.com\/python-program-to-compute-euclidean-distance\/\">https:\/\/www.codespeedy.com\/python-program-to-compute-euclidean-distance\/<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kho\u1ea3ng c\u00e1ch Euclide trong kh\u00f4ng gian hai chi\u1ec1u g\u1ee3i nh\u1edb cho ch\u00fang ta \u0111\u1ecbnh l\u00fd pythagore n\u1ed5i ti\u1ebfng: kho\u1ea3ng c\u00e1ch gi\u1eefa 2 \u0111i\u1ec3m ch\u00ednh l\u00e0 c\u1ea1nh huy\u1ec1n c\u1ee7a tam gi\u00e1c, c\u00f2n ch\u00eanh l\u1ec7ch gi\u1eefa t\u1ecda \u0111\u1ed9 x, y c\u1ee7a 2 \u0111i\u1ec3m d\u1eef li\u1ec7u ch\u00ednh l\u00e0 2 c\u1ea1nh g\u00f3c vu\u00f4ng.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sau \u0111\u00e2y t\u00f4i s\u1ebd gi\u1edbi thi\u1ec7u 1 v\u00ed d\u1ee5 \u0111\u01a1n gi\u1ea3n v\u1ec1 c\u00e1ch s\u1eed d\u1ee5ng ph\u01b0\u01a1ng ph\u00e1p kNN v\u1edbi c\u00e1c d\u1eef li\u1ec7u trong kh\u00f4ng gian 2 chi\u1ec1u (s\u1ed1 \u0111\u1eb7c tr\u01b0ng \u2013 features = 2). T\u00f4i s\u1eed d\u1ee5ng Kaggle Notebook.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0110\u1ea7u ti\u00ean, c\u1ea7n nh\u1eadp c\u00e1c th\u01b0 vi\u1ec7n numpy, pandas, matplotib, sklearn:<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<pre class=\"wp-block-preformatted\"> <strong>import<\/strong> numpy <strong>as<\/strong> np\n <strong>import<\/strong> pandas <strong>as<\/strong> pd\n <strong>import<\/strong> matplotlib.pyplot <strong>as<\/strong> plt <em>#datavisualization<\/em>\n <strong>from<\/strong> sklearn.datasets <strong>import<\/strong> make_blobs <em>#synthetic dataset<\/em>\n <strong>from<\/strong> sklearn.neighbors <strong>import<\/strong> KNeighborsClassifier <em>#kNN classifier<\/em>\n <strong>from<\/strong> sklearn.model_selection <strong>import<\/strong> train_test_split <em>#train and test sets<\/em> <\/pre>\n<\/div><\/div>\n<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Scikit-learning cung c\u1ea5p nhi\u1ec1u ch\u1ee9c n\u0103ng h\u1eefu \u00edch \u0111\u1ec3 t\u1ea1o b\u1ed9 d\u1eef li\u1ec7u t\u1ed5ng h\u1ee3p, r\u1ea5t h\u1eefu \u00edch cho vi\u1ec7c th\u1ef1c h\u00e0nh c\u00e1c thu\u1eadt to\u00e1n h\u1ecdc m\u00e1y. \u1ede \u0111\u00e2y ch\u00fang ta s\u1ebd s\u1eed d\u1ee5ng h\u00e0m <strong>make_blobs<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">X,y = make_blobs(n_samples = 100, n_features = 2, centers = 4, cluster_std = 1, random_state = 4) <\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;\u0110o\u1ea1n code n\u00e0y t\u1ea1o ra m\u1ed9t t\u1eadp d\u1eef li\u1ec7u v\u1edbi 100 m\u1eabu \u0111\u01b0\u1ee3c chia th\u00e0nh 4 l\u1edbp v\u00e0 s\u1ed1 \u0111\u1eb7c tr\u01b0ng l\u00e0 2. S\u1ed1 l\u01b0\u1ee3ng m\u1eabu, s\u1ed1 \u0111\u1eb7c tr\u01b0ng v\u00e0 l\u1edbp c\u00f3 th\u1ec3 d\u1ec5 d\u00e0ng \u0111\u01b0\u1ee3c \u0111i\u1ec1u ch\u1ec9nh b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng c\u00e1c tham s\u1ed1 li\u00ean quan. Ch\u00fang ta c\u0169ng c\u00f3 th\u1ec3 \u0111i\u1ec1u ch\u1ec9nh \u0111\u1ed9 ph\u00e2n t\u00e1n (b\u1eb1ng c\u00e1ch \u0111i\u1ec1u ch\u1ec9nh \u0111\u1ed9 l\u1ec7ch chu\u1ea9n) c\u1ee7a m\u1ed7i c\u1ee5m (ho\u1eb7c l\u1edbp). \u0110\u1ec3 th\u1ec3 hi\u1ec7n t\u1eadp d\u1eef li\u1ec7u t\u1ed5ng h\u1ee3p n\u00e0y tr\u00ean \u0111\u1ed3 th\u1ecb scatter plot, ch\u00fang ta s\u1eed d\u1ee5ng \u0111o\u1ea1n code sau:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"> plt.figure(figsize = (9,6))\n plt.scatter(X[:,0], X[:,1], c=y, marker = 'o', s=50)\n plt.show()  <\/pre>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"576\" height=\"358\" src=\"https:\/\/i0.wp.com\/datasciencebasic.com\/wp-content\/uploads\/2021\/04\/knn-full-dataset.png?resize=576%2C358&#038;ssl=1\" alt=\"\" class=\"wp-image-136\" srcset=\"https:\/\/i0.wp.com\/datasciencebasic.com\/wp-content\/uploads\/2021\/04\/knn-full-dataset.png?w=576&amp;ssl=1 576w, https:\/\/i0.wp.com\/datasciencebasic.com\/wp-content\/uploads\/2021\/04\/knn-full-dataset.png?resize=300%2C186&amp;ssl=1 300w\" sizes=\"auto, (max-width: 576px) 100vw, 576px\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0110\u1ed1i v\u1edbi b\u1ea5t k\u1ef3 thu\u1eadt to\u00e1n h\u1ecdc m\u00e1y c\u00f3 gi\u00e1m s\u00e1t n\u00e0o, ch\u00fang ta ph\u1ea3i chia t\u1eadp d\u1eef li\u1ec7u th\u00e0nh c\u00e1c t\u1eadp h\u1ee3p d\u1eef li\u1ec7u \u0111\u00e0o t\u1ea1o (training set) v\u00e0 ki\u1ec3m tra (test set). \u0110\u1ea7u ti\u00ean, ch\u00fang ta \u0111\u00e0o t\u1ea1o m\u00f4 h\u00ecnh v\u00e0 sau \u0111\u00f3 ki\u1ec3m tra n\u00f3 b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng c\u00e1c ph\u1ea7n kh\u00e1c nhau c\u1ee7a t\u1eadp d\u1eef li\u1ec7u. N\u1ebfu kh\u00f4ng th\u1ef1c hi\u1ec7n vi\u1ec7c ph\u00e2n chia n\u00e0y, c\u00f3 th\u1ec3 ch\u00fang ta s\u1ebd ki\u1ec3m tra m\u00f4 h\u00ecnh b\u1eb1ng m\u1ed9t s\u1ed1 d\u1eef li\u1ec7u m\u00e0 n\u00f3 \u0111\u00e3 bi\u1ebft t\u1eeb tr\u01b0\u1edbc. Vi\u1ec7c ph\u00e2n chia d\u1eef li\u1ec7u n\u00e0y c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n d\u1ec5 d\u00e0ng b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng h\u00e0m <strong>train_test_split<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"> X_train, X_test, y_train, y_test = train_test_split(X,y,random_state=0) <\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ch\u00fang ta c\u00f3 th\u1ec3 ch\u1ec9 \u0111\u1ecbnh s\u1ed1 l\u01b0\u1ee3ng d\u1eef li\u1ec7u ban \u0111\u1ea7u \u0111\u01b0\u1ee3c ph\u00e2n chia v\u00e0o c\u00e1c t\u1eadp d\u1eef li\u1ec7u \u0111\u00e0o t\u1ea1o ho\u1eb7c ki\u1ec3m tra b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng c\u00e1c tham s\u1ed1 train_size ho\u1eb7c test_size t\u01b0\u01a1ng \u1ee9ng. T\u1ef7 l\u1ec7 ph\u00e2n chia m\u1eb7c \u0111\u1ecbnh c\u1ee7a h\u00e0m n\u00e0y l\u00e0 75% cho t\u1eadp d\u1eef li\u1ec7u \u0111\u00e0o t\u1ea1o v\u00e0 25% cho t\u1eadp d\u1eef li\u1ec7u ki\u1ec3m tra.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ti\u1ebfp theo, ch\u00fang ta t\u1ea1o m\u1ed9t b\u1ed9 ph\u00e2n lo\u1ea1i kNN. \u0110\u1ec3 ch\u1ec9 ra s\u1ef1 kh\u00e1c bi\u1ec7t gi\u1eefa t\u1ea7m quan tr\u1ecdng c\u1ee7a gi\u00e1 tr\u1ecb k, t\u00f4i t\u1ea1o hai b\u1ed9 ph\u00e2n lo\u1ea1i v\u1edbi k gi\u00e1 tr\u1ecb 1 v\u00e0 5. Sau \u0111\u00f3, c\u00e1c m\u00f4 h\u00ecnh n\u00e0y \u0111\u01b0\u1ee3c \u0111\u00e0o t\u1ea1o b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng t\u1eadp h\u1ee3p d\u1eef li\u1ec7u \u0111\u00e0o t\u1ea1o. Trong \u0111o\u1ea1n code sau \u0111\u00e2y, tham s\u1ed1 <strong>n_neighbors<\/strong> \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 ch\u1ecdn gi\u00e1 tr\u1ecb k. N\u1ebfu kh\u00f4ng ch\u1ec9 \u0111\u1ecbnh r\u00f5 r\u00e0ng gi\u00e1 tr\u1ecb k, gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh k=5 s\u1ebd \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng.<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<pre class=\"wp-block-preformatted\"> knn5 = KNeighborsClassifier() #k=5\n knn1 = KNeighborsClassifier() #k=1\n knn5.fit(X_train, y_train)\n knn1.fit(X_train, y_train) <\/pre>\n<\/div><\/div>\n<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">B\u00e2y gi\u1edd, ch\u00fang ta s\u1ebd d\u1ef1 \u0111o\u00e1n c\u00e1c gi\u00e1 tr\u1ecb m\u1ee5c ti\u00eau trong b\u1ed9 d\u1eef li\u1ec7u ki\u1ec3m tra v\u00e0 so s\u00e1nh v\u1edbi c\u00e1c gi\u00e1 tr\u1ecb th\u1ef1c t\u1ebf.<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<pre class=\"wp-block-preformatted\">y_pred_5 <strong>=<\/strong> knn5.predict(X_test)\ny_pred_1 <strong>=<\/strong> knn1.predict(X_test)<\/pre>\n<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0110\u1ec3 xem \u1ea3nh h\u01b0\u1edfng c\u1ee7a gi\u00e1 tr\u1ecb k, ch\u00fang ta s\u1ebd so s\u00e1nh t\u1eadp d\u1eef li\u1ec7u ki\u1ec3m tra v\u00e0 c\u00e1c gi\u00e1 tr\u1ecb d\u1ef1 \u0111o\u00e1n v\u1edbi k = 5 v\u00e0 k = 1.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">D\u1eef li\u1ec7u ki\u1ec3m tra g\u1ed1c<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<pre class=\"wp-block-preformatted\">plt.figure(figsize = (9,6))\nplt.scatter(X_test[:,0], X_test[:,1], c=y_test, marker= 'o', s=40)\nplt.show()<\/pre>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"578\" height=\"358\" src=\"https:\/\/i0.wp.com\/datasciencebasic.com\/wp-content\/uploads\/2021\/04\/original-test-set.png?resize=578%2C358&#038;ssl=1\" alt=\"\" class=\"wp-image-137\" srcset=\"https:\/\/i0.wp.com\/datasciencebasic.com\/wp-content\/uploads\/2021\/04\/original-test-set.png?w=578&amp;ssl=1 578w, https:\/\/i0.wp.com\/datasciencebasic.com\/wp-content\/uploads\/2021\/04\/original-test-set.png?resize=300%2C186&amp;ssl=1 300w\" sizes=\"auto, (max-width: 578px) 100vw, 578px\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">D\u1eef li\u1ec7u d\u1ef1 \u0111o\u00e1n v\u1edbi k=1<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<pre class=\"wp-block-preformatted\">plt.figure(figsize = (9,6))\nplt.scatter(X_test[:,0], X_test[:,1], c=y_pred_1, marker= 'o', s=40)\nplt.show()<\/pre>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"569\" height=\"365\" src=\"https:\/\/i0.wp.com\/datasciencebasic.com\/wp-content\/uploads\/2021\/04\/knn-k1.png?resize=569%2C365&#038;ssl=1\" alt=\"\" class=\"wp-image-138\" srcset=\"https:\/\/i0.wp.com\/datasciencebasic.com\/wp-content\/uploads\/2021\/04\/knn-k1.png?w=569&amp;ssl=1 569w, https:\/\/i0.wp.com\/datasciencebasic.com\/wp-content\/uploads\/2021\/04\/knn-k1.png?resize=300%2C192&amp;ssl=1 300w\" sizes=\"auto, (max-width: 569px) 100vw, 569px\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">D\u1eef li\u1ec7u d\u1ef1 \u0111o\u00e1n v\u1edbi k=5<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<pre class=\"wp-block-preformatted\">plt.figure(figsize = (9,6))\nplt.scatter(X_test[:,0], X_test[:,1], c=y_pred_5, marker= 'o', s=40)\nplt.show()<\/pre>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"569\" height=\"365\" src=\"https:\/\/i0.wp.com\/datasciencebasic.com\/wp-content\/uploads\/2021\/04\/knn-k5.png?resize=569%2C365&#038;ssl=1\" alt=\"\" class=\"wp-image-139\" srcset=\"https:\/\/i0.wp.com\/datasciencebasic.com\/wp-content\/uploads\/2021\/04\/knn-k5.png?w=569&amp;ssl=1 569w, https:\/\/i0.wp.com\/datasciencebasic.com\/wp-content\/uploads\/2021\/04\/knn-k5.png?resize=300%2C192&amp;ssl=1 300w\" sizes=\"auto, (max-width: 569px) 100vw, 569px\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">K\u1ebft qu\u1ea3 d\u01b0\u1eddng nh\u01b0 r\u1ea5t gi\u1ed1ng nhau v\u00ec ch\u00fang ta \u0111\u00e3 s\u1eed d\u1ee5ng m\u1ed9t t\u1eadp d\u1eef li\u1ec7u c\u00f3 k\u00edch th\u01b0\u1edbc nh\u1ecf. N\u1ebfu s\u1eed d\u1ee5ng t\u1eadp d\u1eef li\u1ec7u c\u00f3 k\u00edch th\u01b0\u1edbc l\u1edbn h\u01a1n, ch\u00fang ta s\u1ebd th\u1ea5y c\u00f3 nh\u1eefng \u0111i\u1ec3m kh\u00e1c bi\u1ec7t.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>C\u00e1ch x\u00e1c \u0111\u1ecbnh gi\u00e1 tr\u1ecb k t\u1ed1i \u01b0u<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">k = 1: M\u00f4 h\u00ecnh qu\u00e1 c\u1ee5 th\u1ec3 v\u00e0 kh\u00f4ng kh\u00e1i qu\u00e1t h\u00f3a t\u1ed1t. N\u00f3 c\u0169ng c\u00f3 xu h\u01b0\u1edbng nh\u1ea1y c\u1ea3m v\u1edbi c\u00e1c d\u1eef li\u1ec7u b\u1ea5t th\u01b0\u1eddng (nhi\u1ec5u) trong t\u1eadp d\u1eef li\u1ec7u. M\u00f4 h\u00ecnh \u0111\u1ea1t \u0111\u01b0\u1ee3c \u0111\u1ed9 ch\u00ednh x\u00e1c cao tr\u00ean d\u1eef li\u1ec7u \u0111\u00e0o t\u1ea1o nh\u01b0ng s\u1ebd l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 d\u1ef1 \u0111o\u00e1n k\u00e9m \u0111\u1ed1i v\u1edbi c\u00e1c \u0111i\u1ec3m d\u1eef li\u1ec7u m\u1edbi ch\u01b0a t\u1eebng g\u1eb7p tr\u01b0\u1edbc \u0111\u00e2y. Do \u0111\u00f3, ch\u00fang ta c\u00f3 th\u1ec3 s\u1ebd t\u1ea1o ra m\u1ed9t m\u00f4 h\u00ecnh qu\u00e1 kh\u1edbp (overfit).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">k = 100: ng\u01b0\u1ee3c l\u1ea1i v\u1edbi tr\u01b0\u1eddng h\u1ee3p tr\u00ean, m\u00f4 h\u00ecnh qu\u00e1 t\u1ed5ng qu\u00e1t v\u00e0 kh\u00f4ng ph\u1ea3i l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 d\u1ef1 b\u00e1o t\u1ed1t tr\u00ean c\u1ea3 t\u1eadp d\u1eef li\u1ec7u \u0111\u00e0o t\u1ea1o v\u00e0 t\u1eadp d\u1eef li\u1ec7u ki\u1ec3m tra. T\u00ecnh tr\u1ea1ng n\u00e0y \u0111\u01b0\u1ee3c g\u1ecdi l\u00e0 m\u00f4 h\u00ecnh ch\u01b0a kh\u1edbp (underfit).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L\u00e0m th\u1ebf n\u00e0o \u0111\u1ec3 ch\u00fang ta t\u00ecm th\u1ea5y gi\u00e1 tr\u1ecb k t\u1ed1i \u01b0u? Scikit-learning cung c\u1ea5p ch\u1ee9c n\u0103ng GridSearchCV cho ph\u00e9p ch\u00fang ta d\u1ec5 d\u00e0ng ki\u1ec3m tra nhi\u1ec1u gi\u00e1 tr\u1ecb k kh\u00e1c nhau. Sau \u0111\u00e2y l\u00e0 m\u1ed9t v\u00ed d\u1ee5 s\u1eed d\u1ee5ng t\u1eadp d\u1eef li\u1ec7u c\u00f3 s\u1eb5n trong module dataset c\u1ee7a scikit-learning.<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<pre class=\"wp-block-preformatted\">from sklearn.datasets import load_breast_cancer\nfrom sklearn.model_selection import GridSearchCV\ncancer = load_breast_cancer()\n(X_cancer,y_cancer) = load_breast_cancer(return_X_y = True)<\/pre>\n<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Sau khi nh\u1eadp c\u00e1c th\u01b0 vi\u1ec7n c\u1ea7n thi\u1ebft v\u00e0 t\u1ea3i t\u1eadp d\u1eef li\u1ec7u, ch\u00fang ta c\u00f3 th\u1ec3 t\u1ea1o m\u1ed9t h\u00e0m GridSearchCV nh\u01b0 sau.<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<pre class=\"wp-block-preformatted\">knn_grid = GridSearchCV(estimator = KNeighborsClassifier(), param_grid={'n_neighbors': np.arange(1,20)}, cv=5)\nknn_grid.fit(X_cancer,y_cancer)<\/pre>\n<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u1ede \u0111\u00e2y, ch\u00fang ta kh\u00f4ng c\u1ea7n ph\u1ea3i s\u1eed d\u1ee5ng h\u00e0m train_test_split \u0111\u1ec3 ph\u00e2n chia t\u1eadp d\u1eef li\u1ec7u v\u00ec tham s\u1ed1 cv s\u1ebd th\u1ef1c hi\u1ec7n vi\u1ec7c \u0111\u00f3. Gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh cho tham s\u1ed1 cv l\u00e0 5 nh\u01b0ng t\u00f4i \u0111\u00e3 vi\u1ebft n\u00f3 m\u1ed9t c\u00e1ch r\u00f5 r\u00e0ng \u0111\u1ec3 nh\u1ea5n m\u1ea1nh l\u00fd do t\u1ea1i sao ch\u00fang ta kh\u00f4ng c\u1ea7n s\u1eed d\u1ee5ng h\u00e0m train_test_split.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">cv = 5 v\u1ec1 c\u01a1 b\u1ea3n chia t\u1eadp d\u1eef li\u1ec7u th\u00e0nh 5 t\u1eadp con. GridSearchCV s\u1ebd th\u1ef1c hi\u1ec7n 5 l\u1ea7n l\u1eb7p v\u00e0 s\u1eed d\u1ee5ng 4 t\u1eadp h\u1ee3p con \u0111\u1ec3 l\u00e0m d\u1eef li\u1ec7u \u0111\u00e0o t\u1ea1o v\u00e0 1 t\u1eadp h\u1ee3p con \u0111\u1ec3 ki\u1ec3m tra t\u1ea1i m\u1ed7i th\u1eddi \u0111i\u1ec3m. B\u1eb1ng c\u00e1ch n\u00e0y, ch\u00fang ta c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng t\u1ea5t c\u1ea3 c\u00e1c \u0111i\u1ec3m d\u1eef li\u1ec7u cho c\u1ea3 \u0111\u00e0o t\u1ea1o v\u00e0 ki\u1ec3m tra.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ch\u00fang ta c\u00f3 th\u1ec3 ki\u1ec3m tra gi\u00e1 tr\u1ecb k n\u00e0o cho ta k\u1ebft qu\u1ea3 t\u1ed1t nh\u1ea5t b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng h\u00e0m best_params_:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">knn_grid.best_params_<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">K\u1ebft qu\u1ea3:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{'n_neighbors': 13}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Trong tr\u01b0\u1eddng h\u1ee3p n\u00e0y, gi\u00e1 tr\u1ecb t\u1ed1i \u01b0u c\u1ee7a k l\u00e0 13.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u01afu v\u00e0 nh\u01b0\u1ee3c \u0111i\u1ec3m c\u1ee7a kNN<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>\u01afu \u0111i\u1ec3m<\/em><\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>\u0110\u01a1n gi\u1ea3n v\u00e0 d\u1ec5 gi\u1ea3i th\u00edch<\/li><li>Kh\u00f4ng d\u1ef1a tr\u00ean b\u1ea5t k\u1ef3 gi\u1ea3 \u0111\u1ecbnh n\u00e0o, v\u00ec th\u1ebf n\u00f3 c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng trong c\u00e1c b\u00e0i to\u00e1n phi tuy\u1ebfn t\u00ednh.<\/li><li>Ho\u1ea1t \u0111\u1ed9ng t\u1ed1t trong tr\u01b0\u1eddng h\u1ee3p ph\u00e2n lo\u1ea1i v\u1edbi nhi\u1ec1u l\u1edbp<\/li><li>S\u1eed d\u1ee5ng \u0111\u01b0\u1ee3c trong c\u1ea3 ph\u00e2n lo\u1ea1i v\u00e0 h\u1ed3i quy<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>Nh\u01b0\u1ee3c \u0111i\u1ec3m<\/em><\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Tr\u1edf n\u00ean r\u1ea5t ch\u1eadm khi s\u1ed1 l\u01b0\u1ee3ng \u0111i\u1ec3m d\u1eef li\u1ec7u t\u0103ng l\u00ean v\u00ec m\u00f4 h\u00ecnh c\u1ea7n l\u01b0u tr\u1eef t\u1ea5t c\u1ea3 c\u00e1c \u0111i\u1ec3m d\u1eef li\u1ec7u.<\/li><li>T\u1ed1n b\u1ed9 nh\u1edb<\/li><li>Nh\u1ea1y c\u1ea3m v\u1edbi c\u00e1c d\u1eef li\u1ec7u b\u1ea5t th\u01b0\u1eddng (nhi\u1ec5u)<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>K- Nearest Neighbors (kNN) l\u00e0 m\u1ed9t thu\u1eadt to\u00e1n h\u1ecdc m\u00e1y c\u00f3 gi\u00e1m s\u00e1t (supervised learning) c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3],"tags":[],"class_list":["post-134","post","type-post","status-publish","format-standard","hentry","category-kien-thuc"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/datasciencebasic.com\/index.php?rest_route=\/wp\/v2\/posts\/134","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/datasciencebasic.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/datasciencebasic.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/datasciencebasic.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/datasciencebasic.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=134"}],"version-history":[{"count":5,"href":"https:\/\/datasciencebasic.com\/index.php?rest_route=\/wp\/v2\/posts\/134\/revisions"}],"predecessor-version":[{"id":148,"href":"https:\/\/datasciencebasic.com\/index.php?rest_route=\/wp\/v2\/posts\/134\/revisions\/148"}],"wp:attachment":[{"href":"https:\/\/datasciencebasic.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=134"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/datasciencebasic.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=134"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/datasciencebasic.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=134"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}