From c5c20c1ed253c444d8834071232acd3b3734cff1 Mon Sep 17 00:00:00 2001 From: "hy.kim" Date: Fri, 15 Sep 2023 15:29:33 +0900 Subject: [PATCH] update --- 09_KNN/knn-result2.png | Bin 879 -> 4084 bytes 09_KNN/knn.cpp | 2 +- README.md | 345 +++++++++++++++++++++++++++++++++++++++++ x64/Debug/09_KNN.exe | Bin 159744 -> 159744 bytes x64/Debug/09_KNN.pdb | Bin 3354624 -> 3715072 bytes 5 files changed, 346 insertions(+), 1 deletion(-) diff --git a/09_KNN/knn-result2.png b/09_KNN/knn-result2.png index eb3298410048c1fd4fc0b1554f9e4da08e7ecdfe..d044ed916e4405f727f7e9d7f2c54802ee2cb4c6 100644 GIT binary patch literal 4084 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 uQ^3P-LcP{!YE6CELH{jd<^Ru6dn8T&kc1 ouQIh^E7BZ=qaiRF0=Pne+0&YFqC4y1kD#37>FVdQ&MBb@0M-2j*Z=?k diff --git a/09_KNN/knn.cpp b/09_KNN/knn.cpp index 1340b99..500c2c9 100644 --- a/09_KNN/knn.cpp +++ b/09_KNN/knn.cpp @@ -184,10 +184,10 @@ int knn_digits() knn->findNearest(img_flatten, 3, res); cout << cvRound(res.at(0, 0)) << endl; + imwrite("knn-result2.png", img); img.setTo(0); imshow("img", img); - imwrite("knn-result2.png", img); } } diff --git a/README.md b/README.md index e69de29..5eef360 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,345 @@ +--- +layout: default +title: 09. KNN +subtitle: 지능자동화실제 과목 +--- +----- + +[PINBlog Gitea Repository](https://gitea.pinblog.codes/CBNU/09_KNN) + +----- + +# Feature Matching +- 산업인공지능학과 대학원 + 2022254026 + 김홍열 + + +--- + + +# **K-Nearest Neighbors (KNN)** +### **가장 가까운 이웃을 통한 예측** + +오늘은 기계 학습의 간단하면서도 강력한 알고리즘인 K-Nearest Neighbors (KNN)에 대해 알아보려고 합니다. +KNN은 분류와 회귀 문제 모두에 사용될 수 있습니다. + + +# **1. KNN이란 무엇인가?** + +KNN은 지도 학습 알고리즘 중 하나로, 주어진 데이터 포인트의 가장 가까운 이웃을 찾아 예측을 수행하는 방법입니다. +이름에서 알 수 있듯이, 'K'는 고려할 이웃의 수를 나타냅니다. + + +# **2. 어떻게 작동하는가?** + +KNN의 작동 원리는 매우 간단합니다. + + - 1. 새로운 데이터 포인트가 주어지면, 전체 데이터 세트에서 해당 포인트와 가장 가까운 'K'개의 이웃을 찾습니다. + - 2. 분류 문제의 경우, K 이웃 중 가장 많은 클래스를 새로운 데이터 포인트의 클래스로 예측합니다. + - 3. 회귀 문제의 경우, K 이웃의 평균 값을 새로운 데이터 포인트의 값으로 예측합니다. + + +# **3. 거리 측정** + +KNN에서 가장 중요한 부분은 '거리'를 어떻게 측정하는지입니다. +일반적으로 유클리디안 거리가 사용되지만, 맨하탄 거리나 코사인 유사도 등 다른 방법도 사용될 수 있습니다. + + +# **4. KNN의 장점** + +- **간단하고 직관적**: KNN은 알고리즘의 원리가 간단하며, 파라미터 튜닝이 최소화됩니다. +- **비모수적 방법**: 데이터의 분포에 대한 가정이 필요 없습니다. +- **다목적 사용**: 분류와 회귀 모두에 사용될 수 있습니다. + + +# **5. 사용 사례** + +KNN은 기계 학습의 기본적인 알고리즘 중 하나로 추천 시스템, 이미지 인식, 텍스트 분류 등 다양한 분야에서 사용됩니다. +그 간결함과 유용함으로 인해 많은 연구자와 개발자에게 사랑받고 있습니다. +다음 번에는 KNN을 실제로 구현하고 실행하는 방법에 대해 알아보겠습니다! + + +--- + +### 예제 코드[¶]() + +

+KNN - Plane + +
+Main Func +
+ +```c++ + +void kNN() +{ + img = Mat::zeros(Size(500, 500), CV_8UC3); + knn = KNearest::create(); + + namedWindow("knn"); + //createTrackbar("k", "knn", &k_value, 5, on_k_changed); + + const int NUM = 30; + Mat rn(NUM, 2, CV_32SC1); + + randn(rn, 0, 50); + for (int i = 0; i < NUM; i++) + addPoint(Point(rn.at(i, 0) + 150, rn.at(i, 1) + 150), 0); + + randn(rn, 0, 50); + for (int i = 0; i < NUM; i++) + addPoint(Point(rn.at(i, 0) + 350, rn.at(i, 1) + 150), 1); + + randn(rn, 0, 70); + for (int i = 0; i < NUM; i++) + addPoint(Point(rn.at(i, 0) + 250, rn.at(i, 1) + 400), 2); + + createTrackbar("k", "knn", &k_value, 5, on_k_changed); + trainAndDisplay(); + waitKey(); + + return; +} + +``` + +
+
+ +
+Key Event +
+ +```c++ + +void on_k_changed(int, void*) +{ + if (k_value < 1) k_value = 1; + trainAndDisplay(); +} + +``` + +
+
+ +
+Add Point Func +
+ +```c++ + +void addPoint(const Point& pt, int cls) +{ + Mat new_sample = (Mat_(1, 2) << pt.x, pt.y); + train.push_back(new_sample); + + Mat new_label = (Mat_(1, 1) << cls); + label.push_back(new_label); +} + +``` + +
+
+ +
+Display Func +
+ +```c++ + +void trainAndDisplay() +{ + knn->train(train, ROW_SAMPLE, label); + for (int i = 0; i < img.rows; ++i) { + for (int j = 0; j < img.cols; ++j) { + Mat sample = (Mat_(1, 2) << j, i); + Mat res; + knn->findNearest(sample, k_value, res); + int response = cvRound(res.at(0, 0)); + if (response == 0) + img.at(i, j) = Vec3b(128, 128, 255); // R + else if (response == 1) + img.at(i, j) = Vec3b(128, 255, 128); // G + else if (response == 2) + img.at(i, j) = Vec3b(255, 128, 128); // B + } + } + + for (int i = 0; i < train.rows; i++) + { + int x = cvRound(train.at(i, 0)); + int y = cvRound(train.at(i, 1)); + int l = label.at(i, 0); + + if (l == 0) + circle(img, Point(x, y), 5, Scalar(0, 0, 128), -1, LINE_AA); + else if (1 == 1) + circle(img, Point(x, y), 5, Scalar(0, 128, 0), -1, LINE_AA); + else if (1 == 2) + circle(img, Point(x, y), 5, Scalar(128, 0, 0), -1, LINE_AA); + } + + imshow("knn", img); + imwrite("knn-result1.png", img); +} + +``` + +![Result](/09_KNN//knn-result1.png) + +
+
+ +
+ + +
+KNN - Digits + +
+Train +
+ +```c++ + +Ptr train_knn() +{ + Mat digits = imread("digits.png", IMREAD_GRAYSCALE); + if (digits.empty()) + { + cerr << "Image load failed!" << endl; + return 0; + } + + Mat train_images, train_labels; + + for (int j = 0; j < 50; j++) + { + for (int i = 0; i < 100; i++) + { + Mat roi, roi_float, roi_flatten; + roi = digits(Rect(i * 20, j * 20, 20, 20)); + roi.convertTo(roi_float, CV_32F); + roi_flatten = roi_float.reshape(1, 1); + + train_images.push_back(roi_flatten); + train_labels.push_back(j / 5); + } + } + + Ptr knn = KNearest::create(); + knn->train(train_images, ROW_SAMPLE, train_labels); + + return knn; +} + +``` + +
+
+ +
+Mouse Event +
+ +```c++ + +Point ptPrev(-1, -1); +void on_mouse(int event, int x, int y, int flags, void* userdata) +{ + Mat img = *(Mat*)userdata; + + if (event == EVENT_LBUTTONDOWN) + { + ptPrev = Point(x, y); + } + else if (event == EVENT_LBUTTONUP) + { + ptPrev = Point(-1, -1); + } + else if (event == EVENT_MOUSEMOVE && (flags & EVENT_FLAG_LBUTTON)) + { + line(img, ptPrev, Point(x, y), Scalar::all(255), 40, LINE_AA, 0); + ptPrev = Point(x, y); + imshow("img", img); + } +} + +``` + +
+
+ +
+Main Func +
+ +```c++ + +int knn_digits() +{ + Ptr knn = train_knn(); + + if (knn.empty()) + { + cerr << "Training failed!" << endl; + return -1; + } + + Mat img = Mat::zeros(400, 400, CV_8U); + imshow("img", img); + setMouseCallback("img", on_mouse, (void*)&img); + + while (true) + { + int c = waitKey(0); + if (c == 27) + break; + else if (c == ' ') + { + Mat img_resize, img_float, img_flatten, res; + + resize(img, img_resize, Size(20, 20), 0, 0, INTER_AREA); + img_resize.convertTo(img_float, CV_32F); + img_flatten = img_float.reshape(1, 1); + + knn->findNearest(img_flatten, 3, res); + cout << cvRound(res.at(0, 0)) << endl; + + img.setTo(0); + imshow("img", img); + imwrite("knn-result2.png", img); + } + } + + return 0; +} + +``` + +![Origin](/09_KNN/digits.png) +![Result](/09_KNN/knn_result2.png) +![Result](/09_KNN/knn_result3.png) + +
+
+ +
+ + +# **6. 결론** + +이렇게 KNN에 대한 기본적인 개념과 특징을 간단하게 소개하는 블로그 포스트를 작성해 보았습니다. +다음 포스트에서는 실제 코드 예제와 함께 KNN의 실제 응용 사례를 살펴보는 것도 좋을 것 같습니다! + + +--- + +### 참고[¶]() + +- 지능자동화실제 과목, 박태형 교수 +- ChatGPT diff --git a/x64/Debug/09_KNN.exe b/x64/Debug/09_KNN.exe index b5b6cfbd5ff1756bb9b61615e23fccca55a32a11..a8974e88789753b2a56f9be985cac8866a62a868 100644 GIT binary patch delta 404 zcmZp8z}fJCbHWd%z@Hm`EkCaB(HrXE(c8O&i-F;Voc;g*6FhoF-QO}W0L5N_#2g`F zy%ivivFl{LqvDfmPjc0RG{Dptx`OpV)Nn&NVBIrpATnU%uR8tz&mVr^6Te_<1UE?c zR0!3p0pz{tw*@MF;pzDQzfbo8pd3ihqu1Br#UvMq8DLctfo6c5Yy`Bs0;Db24lFC` z^9Jmm6(F%Ph}cw+0-!pun2*EeMJGe2v4dUmclGpt!HimLAU`!PoqjH!QIBco+UfIR zfMOs6a#v4}O8|=5uAY7_3@Ubb$#lO&Mvd)aiHy&Z7}>Y~JigIRF3e(HrUjA`dh>>6;jyb`Ntl$P}?|>S)5n|*Dkl1R7Sg!?$GuLJEg%gU>AjLrA z!Sb_RAO?cvOI}msmTsDLv!tPzeGlj?P7_H&ypBfxBorN_{Ui6go=@vm70czhMJU^m6nE% zlb)H5l-6|qAB;yO=Q0W8Ffo`p0102_0uXZnkkGr3GrjOVqwsWtZpN1FEk7A+$^dh- Bp)3FZ diff --git a/x64/Debug/09_KNN.pdb b/x64/Debug/09_KNN.pdb index 2d9c59c8b0e30f10aa207f3dbabcfc2804f1a3d0..f0ef6a74e33528a19ae0ff486956d39181b96028 100644 GIT binary patch delta 32130 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