그만큼 KNN(K-Nearest Neighbors) 알고리즘 분류 및 회귀 문제를 해결하는 데 사용되는 지도형 기계 학습 방법입니다. Evelyn Fix와 Joseph Hodges는 1951년에 이 알고리즘을 개발했으며 이후 Thomas Cover에 의해 확장되었습니다. 이 기사에서는 KNN 알고리즘의 기본, 작동 및 구현을 살펴봅니다.
K-최근접 이웃 알고리즘이란 무엇입니까?
KNN은 머신러닝에서 가장 기본적이면서 필수적인 분류 알고리즘 중 하나입니다. 그것은에 속한다 지도 학습 도메인을 찾아 패턴 인식에 집중적으로 적용하고, 이는 비모수적이므로 실제 시나리오에서 광범위하게 일회용입니다. 즉, 데이터 분포에 대한 기본 가정을 하지 않습니다(GMM과 같은 다른 알고리즘과 달리 가우스 분포 주어진 데이터의). 좌표를 속성으로 식별되는 그룹으로 분류하는 일부 사전 데이터(훈련 데이터라고도 함)가 제공됩니다.
내 모니터 화면 크기는 얼마야
예를 들어, 두 가지 특성이 포함된 다음 데이터 포인트 표를 살펴보세요.

KNN 알고리즘 작업 시각화
이제 또 다른 데이터 포인트 세트(테스트 데이터라고도 함)가 주어지면 훈련 세트를 분석하여 이러한 포인트를 그룹에 할당합니다. 분류되지 않은 지점은 '흰색'으로 표시됩니다.
KNN 알고리즘의 직관
이러한 점을 그래프에 표시하면 일부 클러스터나 그룹을 찾을 수 있습니다. 이제 분류되지 않은 포인트가 주어지면 가장 가까운 이웃이 어떤 그룹에 속하는지 관찰하여 이를 그룹에 할당할 수 있습니다. 이는 '빨간색'으로 분류된 포인트 클러스터에 가까운 포인트가 '빨간색'으로 분류될 확률이 더 높다는 것을 의미합니다.
직관적으로 보면 첫 번째 포인트(2.5, 7)는 'Green'으로 분류되어야 하고, 두 번째 포인트(5.5, 4.5)는 'Red'로 분류되어야 함을 알 수 있습니다.
KNN 알고리즘이 필요한 이유는 무엇입니까?
(K-NN) 알고리즘은 단순성과 구현 용이성을 위해 주로 사용되는 다양하고 널리 사용되는 기계 학습 알고리즘입니다. 기본 데이터 분포에 대한 가정은 필요하지 않습니다. 또한 숫자 데이터와 범주형 데이터를 모두 처리할 수 있으므로 분류 및 회귀 작업에서 다양한 유형의 데이터세트에 대한 유연한 선택이 가능합니다. 주어진 데이터 세트에서 데이터 포인트의 유사성을 기반으로 예측을 수행하는 비모수적 방법입니다. K-NN은 다른 알고리즘에 비해 이상값에 덜 민감합니다.
K-NN 알고리즘은 유클리드 거리와 같은 거리 측정법을 기반으로 주어진 데이터 포인트에 K개의 가장 가까운 이웃을 찾는 방식으로 작동합니다. 그런 다음 데이터 포인트의 클래스 또는 값은 다수결 또는 K 이웃의 평균에 의해 결정됩니다. 이 접근 방식을 사용하면 알고리즘이 다양한 패턴에 적응하고 데이터의 로컬 구조를 기반으로 예측할 수 있습니다.
KNN 알고리즘에 사용되는 거리 측정법
KNN 알고리즘은 쿼리 포인트에 대한 가장 가까운 포인트나 그룹을 식별하는 데 도움이 된다는 것을 알고 있습니다. 그러나 쿼리 지점에 대해 가장 가까운 그룹이나 가장 가까운 지점을 결정하려면 몇 가지 메트릭이 필요합니다. 이를 위해 아래의 거리 측정법을 사용합니다.
유클리드 거리
이는 평면/초평면에 있는 두 점 사이의 데카르트 거리일 뿐입니다. 유클리드 거리 고려하는 두 점을 연결하는 직선의 길이로 시각화할 수도 있습니다. 이 측정법은 물체의 두 상태 사이에서 수행된 순 변위를 계산하는 데 도움이 됩니다.
맨해튼 거리
맨해튼 거리 미터법은 일반적으로 변위 대신 물체가 이동한 총 거리에 관심이 있을 때 사용됩니다. 이 측정항목은 n 차원의 점 좌표 간 절대 차이를 합산하여 계산됩니다.
민코프스키 거리
맨해튼 거리뿐만 아니라 유클리드 거리도 특수한 경우라고 말할 수 있습니다. 민코프스키 거리 .
위의 공식으로부터 p = 2일 때 유클리드 거리 공식과 동일하고 p = 1일 때 맨해튼 거리 공식을 얻을 수 있다고 말할 수 있습니다.
위에서 논의한 측정 항목은 다음을 처리하는 동안 가장 일반적입니다. 기계 학습 문제가 있지만 다음과 같은 다른 거리 측정법도 있습니다. 해밍 거리 이는 내용이 부울 값과 문자열 값일 수 있는 두 벡터 간의 중복 비교가 필요한 문제를 처리하는 데 유용합니다.
KNN 알고리즘에서 k 값을 선택하는 방법은 무엇입니까?
k 값은 KNN 알고리즘에서 알고리즘의 이웃 수를 정의하는 데 매우 중요합니다. k-Nearest Neighbors(k-NN) 알고리즘의 k 값은 입력 데이터를 기반으로 선택해야 합니다. 입력 데이터에 이상값이나 노이즈가 더 많으면 k 값이 높을수록 좋습니다. 분류 시 동점을 피하기 위해 k에 대해 홀수 값을 선택하는 것이 좋습니다. 교차 검증 방법은 주어진 데이터세트에 가장 적합한 k 값을 선택하는 데 도움이 될 수 있습니다.
KNN 알고리즘의 작동
KNN(K-Nearest Neighbors) 알고리즘은 유사성 원칙에 따라 작동합니다. 여기서 훈련 데이터세트에 있는 K개의 최근접 이웃의 레이블 또는 값을 고려하여 새로운 데이터 포인트의 레이블 또는 값을 예측합니다.
KNN 작동 방식에 대한 단계별 설명은 아래에 설명되어 있습니다.
1단계: 최적의 K 값 선택
- K는 예측을 하는 동안 고려해야 할 가장 가까운 이웃의 수를 나타냅니다.
2단계: 거리 계산
- 목표 데이터 포인트와 훈련 데이터 포인트 간의 유사성을 측정하기 위해 유클리드 거리가 사용됩니다. 거리는 데이터세트의 각 데이터 포인트와 대상 포인트 사이에서 계산됩니다.
3단계: 가장 가까운 이웃 찾기
- 대상 지점까지의 거리가 가장 짧은 k개의 데이터 지점이 가장 가까운 이웃입니다.
4단계: 분류에 대한 투표 또는 회귀에 대한 평균 계산
- 분류 문제에서는 다수결 투표를 통해 클래스 레이블이 결정됩니다. 이웃 중에서 가장 많이 발생하는 클래스가 대상 데이터 포인트에 대한 예측 클래스가 됩니다.
- 회귀 문제에서 클래스 레이블은 K개의 가장 가까운 이웃의 목표 값을 평균하여 계산됩니다. 계산된 평균값은 대상 데이터 포인트에 대한 예측 출력이 됩니다.
X를 n개의 데이터 포인트가 있는 훈련 데이터 세트로 가정합니다. 여기서 각 데이터 포인트는 d차원 특징 벡터로 표시됩니다. Y는 X의 각 데이터 포인트에 해당하는 레이블 또는 값입니다. 새 데이터 포인트 x가 주어지면 알고리즘은 x와 각 데이터 포인트 사이의 거리를 계산합니다.
유클리드 거리와 같은 거리 측정법을 사용하여 X에서:
알고리즘은 X에서 x까지의 거리가 가장 짧은 K개의 데이터 포인트를 선택합니다. 분류 작업의 경우 알고리즘은 K개의 가장 가까운 이웃 중에서 가장 빈번한 레이블 y를 x에 할당합니다. 회귀 작업의 경우 알고리즘은 K개의 가장 가까운 이웃에 대한 y 값의 평균 또는 가중 평균을 계산하고 이를 x에 대한 예측 값으로 할당합니다.
KNN 알고리즘의 장점
- 구현이 용이함 알고리즘의 복잡성은 그다지 높지 않기 때문입니다.
- 쉽게 적응 – KNN 알고리즘의 작동에 따라 모든 데이터를 메모리 저장소에 저장하므로 새로운 예제나 데이터 포인트가 추가될 때마다 알고리즘은 해당 새 예제에 따라 자체 조정되고 향후 예측에도 기여합니다.
- 소수의 하이퍼파라미터 – KNN 알고리즘 훈련에 필요한 유일한 매개변수는 k 값과 평가 지표에서 선택하려는 거리 지표의 선택입니다.
KNN 알고리즘의 단점
- 확장되지 않음 – 우리가 들었던 것처럼 KNN 알고리즘도 게으른 알고리즘으로 간주됩니다. 이 용어의 주요 의미는 데이터 저장뿐만 아니라 많은 컴퓨팅 성능이 필요하다는 것입니다. 이로 인해 이 알고리즘은 시간이 많이 걸리고 리소스가 소모됩니다.
- 차원의 저주 – 이에 따라 피킹 현상이라는 용어가 있는데, KNN 알고리즘은 다음과 같은 영향을 받습니다. 차원의 저주 이는 차원이 너무 높을 때 알고리즘이 데이터 포인트를 적절하게 분류하는 데 어려움을 겪는다는 것을 의미합니다.
- 과적합 경향 – 차원의 저주로 인해 알고리즘이 영향을 받기 때문에 과적합 문제도 발생하기 쉽습니다. 따라서 일반적으로 기능 선택 게다가 차원 축소 이 문제를 해결하기 위해 기술이 적용됩니다.
예제 프로그램:
0과 1을 두 분류자(그룹)로 가정합니다.
C++
// C++ program to find groups of unknown> // Points using K nearest neighbour algorithm.> #include> using> namespace> std;> struct> Point> {> > int> val;> // Group of point> > double> x, y;> // Co-ordinate of point> > double> distance;> // Distance from test point> };> // Used to sort an array of points by increasing> // order of distance> bool> comparison(Point a, Point b)> {> > return> (a.distance } // This function finds classification of point p using // k nearest neighbour algorithm. It assumes only two // groups and returns 0 if p belongs to group 0, else // 1 (belongs to group 1). int classifyAPoint(Point arr[], int n, int k, Point p) { // Fill distances of all points from p for (int i = 0; i arr[i].distance = sqrt((arr[i].x - p.x) * (arr[i].x - p.x) + (arr[i].y - p.y) * (arr[i].y - p.y)); // Sort the Points by distance from p sort(arr, arr+n, comparison); // Now consider the first k elements and only // two groups int freq1 = 0; // Frequency of group 0 int freq2 = 0; // Frequency of group 1 for (int i = 0; i { if (arr[i].val == 0) freq1++; else if (arr[i].val == 1) freq2++; } return (freq1>주파수2 ? 0:1); } // 드라이버 코드 int main() { int n = 17; // 데이터 포인트 수 Point arr[n]; arr[0].x = 1; arr[0].y = 12; arr[0].val = 0; arr[1].x = 2; arr[1].y = 5; arr[1].val = 0; arr[2].x = 5; arr[2].y = 3; arr[2].val = 1; arr[3].x = 3; arr[3].y = 2; arr[3].val = 1; arr[4].x = 3; arr[4].y = 6; arr[4].val = 0; arr[5].x = 1.5; arr[5].y = 9; arr[5].val = 1; arr[6].x = 7; arr[6].y = 2; arr[6].val = 1; arr[7].x = 6; arr[7].y = 1; arr[7].val = 1; arr[8].x = 3.8; arr[8].y = 3; arr[8].val = 1; arr[9].x = 3; arr[9].y = 10; arr[9].val = 0; arr[10].x = 5.6; arr[10].y = 4; arr[10].val = 1; arr[11].x = 4; arr[11].y = 2; arr[11].val = 1; arr[12].x = 3.5; arr[12].y = 8; arr[12].val = 0; arr[13].x = 2; arr[13].y = 11; arr[13].val = 0; arr[14].x = 2; arr[14].y = 5; arr[14].val = 1; arr[15].x = 2; arr[15].y = 9; arr[15].val = 0; arr[16].x = 1; arr[16].y = 7; arr[16].val = 0; /*테스트 포인트*/ 포인트 p; px = 2.5; py = 7; // 테스트 포인트의 그룹을 결정하는 매개변수 int k = 3; printf('미지점으로 분류된 값' '은 %d입니다.
', classifyAPoint(arr, n, k, p)); 0을 반환합니다. }> |
>
>
자바
// Java program to find groups of unknown> // Points using K nearest neighbour algorithm.> import> java.io.*;> import> java.util.*;> class> GFG {> > static> class> Point {> > int> val;> // Group of point> > double> x, y;> // Co-ordinate of point> > double> distance;> // Distance from test point> > }> > // Used to sort an array of points by increasing> > // order of distance> > static> class> comparison> implements> Comparator {> > public> int> compare(Point a, Point b)> > {> > if> (a.distance return -1; else if (a.distance>b.거리) 1을 반환합니다. 0을 반환합니다. } } // 이 함수는 k 최근접 이웃 알고리즘을 사용하여 // 점 p의 분류를 찾습니다. // 두 개의 그룹만 가정하고 p가 그룹 0에 속하면 0을 반환하고, 그렇지 않으면 // 1(그룹 1에 속함)을 반환합니다. static int classifyAPoint(Point arr[], int n, int k, Point p) { // p에서 모든 점의 거리를 채웁니다 for (int i = 0; i arr[i].distance = Math.sqrt( (arr[ i].x - p.x) * (arr[i].x - p.x) + (arr[i].y - p.y) * (arr[i].y - p.y)) // 포인트를 다음으로부터의 거리에 따라 정렬합니다. p Arrays.sort(arr, new 비교()); // 이제 첫 번째 k개 요소와 // 두 그룹만 고려합니다. int freq1 = 0; // 그룹 0의 빈도 int freq2 = 0; (int i = 0; i if (arr[i].val == 0) freq1++; else if (arr[i].val == 1) freq2++; } return (freq1> freq2 ? 0 : 1); } / / 드라이버 코드 public static void main(String[] args) { int n = 17; // 데이터 포인트 수 Point[] arr = new Point[n] for (int i = 0; i<17; i++) { arr[i] = new Point(); } arr[0].x = 1; arr[0].y = 12; arr[0].val = 0; arr[1].x = 2; arr[1].y = 5; arr[1].val = 0; arr[2].x = 5; arr[2].y = 3; arr[2].val = 1; arr[3].x = 3; arr[3].y = 2; arr[3].val = 1; arr[4].x = 3; arr[4].y = 6; arr[4].val = 0; arr[5].x = 1.5; arr[5].y = 9; arr[5].val = 1; arr[6].x = 7; arr[6].y = 2; arr[6].val = 1; arr[7].x = 6; arr[7].y = 1; arr[7].val = 1; arr[8].x = 3.8; arr[8].y = 3; arr[8].val = 1; arr[9].x = 3; arr[9].y = 10; arr[9].val = 0; arr[10].x = 5.6; arr[10].y = 4; arr[10].val = 1; arr[11].x = 4; arr[11].y = 2; arr[11].val = 1; arr[12].x = 3.5; arr[12].y = 8; arr[12].val = 0; arr[13].x = 2; arr[13].y = 11; arr[13].val = 0; arr[14].x = 2; arr[14].y = 5; arr[14].val = 1; arr[15].x = 2; arr[15].y = 9; arr[15].val = 0; arr[16].x = 1; arr[16].y = 7; arr[16].val = 0; /*Testing Point*/ Point p = new Point(); p.x = 2.5; p.y = 7; // Parameter to decide group of the testing point int k = 3; System.out.println( 'The value classified to unknown point is ' + classifyAPoint(arr, n, k, p)); } } // This code is contributed by Karandeep1234> |
>
>
파이썬3
import> math> def> classifyAPoint(points,p,k> => 3> ):> > '''> > This function finds the classification of p using> > k nearest neighbor algorithm. It assumes only two> > groups and returns 0 if p belongs to group 0, else> > 1 (belongs to group 1).> > Parameters -> > points: Dictionary of training points having two keys - 0 and 1> > Each key have a list of training data points belong to that> > p : A tuple, test data point of the form (x,y)> > k : number of nearest neighbour to consider, default is 3> > '''> > distance> => []> > for> group> in> points:> > for> feature> in> points[group]:> > #calculate the euclidean distance of p from training points> > euclidean_distance> => math.sqrt((feature[> 0> ]> -> p[> 0> ])> *> *> 2> +> (feature[> 1> ]> -> p[> 1> ])> *> *> 2> )> > # Add a tuple of form (distance,group) in the distance list> > distance.append((euclidean_distance,group))> > # sort the distance list in ascending order> > # and select first k distances> > distance> => sorted> (distance)[:k]> > freq1> => 0> #frequency of group 0> > freq2> => 0> #frequency og group 1> > for> d> in> distance:> > if> d[> 1> ]> => => 0> :> > freq1> +> => 1> > elif> d[> 1> ]> => => 1> :> > freq2> +> => 1> > return> 0> if> freq1>주파수2> else> 1> # driver function> def> main():> > # Dictionary of training points having two keys - 0 and 1> > # key 0 have points belong to class 0> > # key 1 have points belong to class 1> > points> => {> 0> :[(> 1> ,> 12> ),(> 2> ,> 5> ),(> 3> ,> 6> ),(> 3> ,> 10> ),(> 3.5> ,> 8> ),(> 2> ,> 11> ),(> 2> ,> 9> ),(> 1> ,> 7> )],> > 1> :[(> 5> ,> 3> ),(> 3> ,> 2> ),(> 1.5> ,> 9> ),(> 7> ,> 2> ),(> 6> ,> 1> ),(> 3.8> ,> 1> ),(> 5.6> ,> 4> ),(> 4> ,> 2> ),(> 2> ,> 5> )]}> > # testing point p(x,y)> > p> => (> 2.5> ,> 7> )> > # Number of neighbours> > k> => 3> > print> (> 'The value classified to unknown point is: {}'> .> > format> (classifyAPoint(points,p,k)))> if> __name__> => => '__main__'> :> > main()> |
>
>
씨#
using> System;> using> System.Collections;> using> System.Collections.Generic;> using> System.Linq;> // C# program to find groups of unknown> // Points using K nearest neighbour algorithm.> class> Point {> > public> int> val;> // Group of point> > public> double> x, y;> // Co-ordinate of point> > public> int> distance;> // Distance from test point> }> class> HelloWorld {> > // This function finds classification of point p using> > // k nearest neighbour algorithm. It assumes only two> > // groups and returns 0 if p belongs to group 0, else> > // 1 (belongs to group 1).> > public> static> int> classifyAPoint(List arr,> int> n,> int> k, Point p)> > {> > // Fill distances of all points from p> > for> (> int> i = 0; i arr[i].distance = (int)Math.Sqrt((arr[i].x - p.x) * (arr[i].x - p.x) + (arr[i].y - p.y) * (arr[i].y - p.y)); // Sort the Points by distance from p arr.Sort(delegate(Point x, Point y) { return x.distance.CompareTo(y.distance); }); // Now consider the first k elements and only // two groups int freq1 = 0; // Frequency of group 0 int freq2 = 0; // Frequency of group 1 for (int i = 0; i if (arr[i].val == 0) freq1++; else if (arr[i].val == 1) freq2++; } return (freq1>주파수2 ? 0:1); } 정적 무효 Main() { int n = 17; // 데이터 포인트 수 List arr = new List(); for(int i = 0; i arr.Add(new Point()); } arr[0].x = 1; arr[0].y = 12; arr[0].val = 0; arr[1] .x = 2; arr[1].val = 0; arr[2].y = 1; arr[3].x = 3; arr[3].val = 1; arr[4].y = 6; 값 = 0; arr[5].y = 9; arr[6].x = 2; [6].val = 1; arr[7].y = 1; arr[8].x = 3.8; = 3; arr[9].x = 1; arr[9].x = 5.6; 10].y = 4; arr[10].x = 4; arr[11].val = 1; 3.5; arr[12].y = 0; arr[13].y = 11; ].x = 2; arr[14].val = 1; arr[15].y = 9; ; arr[16].x = 1; arr[16].val = 0; /*테스트 포인트*/ 포인트 p.x = 2.5; // 테스트 포인트의 그룹을 결정하는 매개변수 int k = 3; Console.WriteLine('알 수 없는 지점으로 분류된 값은 ' + classifyAPoint(arr, n, k, p)); } } // 코드는 Nidhi goel이 제공했습니다.> |
>
>
자바스크립트
class Point {> > constructor(val, x, y, distance) {> > this> .val = val;> // Group of point> > this> .x = x;> // X-coordinate of point> > this> .y = y;> // Y-coordinate of point> > this> .distance = distance;> // Distance from test point> > }> }> // Used to sort an array of points by increasing order of distance> class Comparison {> > compare(a, b) {> > if> (a.distance return -1; } else if (a.distance>b.거리) { 반환 1; } 0을 반환합니다. } } // 이 함수는 k 최근접 이웃 알고리즘을 사용하여 // 점 p의 분류를 찾습니다. // 두 개의 그룹만 가정하고 p가 그룹 0에 속하면 0을 반환하고, 그렇지 않으면 // 1(그룹 1에 속함)을 반환합니다. function classifyAPoint(arr, n, k, p) { // p에서 모든 점의 거리를 채웁니다 for (let i = 0; i arr[i].distance = Math.sqrt((arr[i].x - p.x) * (arr[i].x - p.x) + (arr[i].y - p.y) * (arr[i].y - p.y)) } // p로부터의 거리에 따라 포인트를 정렬합니다.sort(new Comparison()); // 이제 처음 k개의 요소와 두 개의 그룹만 고려합니다. let freq1 = 0; // 그룹 0의 빈도 let freq2 = 0 // 그룹 1의 빈도 for (let i = 0; i if (arr [i].val === 0) { freq1++; } else if (arr[i].val === 1) { freq2++; } } return freq1> freq2 } // 드라이버 코드 const n = 17; // 데이터 포인트 수 const arr = new Array(n) for (let i = 0; i<17; i++) { arr[i] = new Point(); } arr[0].x = 1; arr[0].y = 12; arr[0].val = 0; arr[1].x = 2; arr[1].y = 5; arr[1].val = 0; arr[2].x = 5; arr[2].y = 3; arr[2].val = 1; arr[3].x = 3; arr[3].y = 2; arr[3].val = 1; arr[4].x = 3; arr[4].y = 6; arr[4].val = 0; arr[5].x = 1.5; arr[5].y = 9; arr[5].val = 1; arr[6].x = 7; arr[6].y = 2; arr[6].val = 1; arr[7].x = 6; arr[7].y = 1; arr[7].val = 1; arr[8].x = 3.8; arr[8].y = 3; arr[8].val = 1; arr[9].x = 3; arr[9].y = 10; arr[9].val = 0; arr[10].x = 5.6; arr[10].y = 4; arr[10].val = 1; arr[11].x = 4 arr[11].y = 2; arr[11].val = 1; arr[12].x = 3.5; arr[12].y = 8; arr[12].val = 0; arr[13].x = 2; arr[13].y = 11; arr[13].val = 0; arr[14].x = 2; arr[14].y = 5; arr[14].val = 1; arr[15].x = 2; arr[15].y = 9; arr[15].val = 0; arr[16].x = 1; arr[16].y = 7; arr[16].val = 0; // Testing Point let p = { x: 2.5, y: 7, val: -1, // uninitialized }; // Parameter to decide group of the testing point let k = 3; console.log( 'The value classified to unknown point is ' + classifyAPoint(arr, n, k, p) ); function classifyAPoint(arr, n, k, p) { // Fill distances of all points from p for (let i = 0; i arr[i].distance = Math.sqrt( (arr[i].x - p.x) * (arr[i].x - p.x) + (arr[i].y - p.y) * (arr[i].y - p.y) ); } // Sort the Points by distance from p arr.sort(function (a, b) { if (a.distance return -1; else if (a.distance>b.거리) 1을 반환합니다. 0을 반환합니다. }); // 이제 처음 k개 요소와 두 그룹만 고려합니다. let freq1 = 0; // 그룹 0의 주파수 let freq2 = 0; // 그룹 1의 주파수 for (let i = 0; i if (arr[i].val == 0) freq1++; else if (arr[i].val == 1) freq2++; } return freq1> freq2 ? 0 : 1 }> |
>
>
산출:
The value classified as an unknown point is 0.>
시간 복잡도: O(N * 로그N)
보조 공간: 오(1)
KNN 알고리즘의 응용
- 데이터 전처리 – 기계 학습 문제를 처리하는 동안 우리는 먼저 다음을 수행합니다. KNN 대체 이는 일반적으로 정교한 전가 방법론에 사용되는 매우 효과적인 광고입니다.
- 패턴 인식 – MNIST 데이터 세트를 사용하여 KNN 알고리즘을 훈련한 후 평가 프로세스를 수행한 경우 KNN 알고리즘이 매우 잘 작동합니다. 그러면 정확도가 너무 높다는 사실을 발견했을 것입니다.
- 추천 엔진 – KNN 알고리즘이 수행하는 주요 작업은 방대한 데이터 세트를 사용하여 생성된 기존 그룹에 새로운 쿼리 포인트를 할당하는 것입니다. 이것이 바로 에서 요구되는 것입니다. K Python을 이용한 최근접이웃 | ML
- Python을 사용하여 처음부터 K-최근접 이웃 구현
- K-최근접이웃의 수학적 설명
- 가중 K-NN
자주 묻는 질문(FAQ)
Q. KNN이 게으른 학습자인 이유는 무엇인가요?
KNN 알고리즘은 훈련 단계에서 모델을 구축하지 않습니다. 알고리즘은 전체 교육 데이터 세트를 기억하고 분류 시 데이터 세트에 대한 작업을 수행합니다.
xvideoservicethief 우분투 14.04 다운로드
Q. KNN이 비모수적인 이유는 무엇입니까?
KNN 알고리즘은 분석 중인 데이터에 대해 가정을 하지 않습니다.
Q. KNN과 K 의미의 차이점은 무엇인가요?
- KNN은 분류 문제에 사용되는 지도 학습 모델인 반면, K-평균은 클러스터링에 사용되는 비지도 학습 모델입니다.
- KNN의 K는 가장 가까운 이웃의 수인 반면 K의 K는 클러스터의 수를 의미합니다.