이 기사에서는 Java로 구현 된 KNN 알고리즘에 대해 설명합니다. 다음과 같이 참조에 대해 공유하십시오.
모든 사람은 KNN 알고리즘에 익숙해야하며 데이터 마이닝을위한 10 가지 클래식 알고리즘 중 하나입니다.
알고리즘의 아이디어는 교육 데이터 세트에서 분류 된 그룹화에 대한 알 수없는 데이터를 그룹화하고 분류하는 것입니다. 그중에서도 거리는 미지의 지점과 훈련 데이터의 지점에 따라 계산되며, 가장 짧은 거리가있는 지점이 계산되고 해당 지점으로 분류되는 범주가 계산됩니다.
알고리즘의 엔지니어링을 살펴 보겠습니다.
1. 데이터를 준비하고 데이터를 전처리하십시오
2. 교육 데이터를 저장하고 튜플을 테스트 할 적절한 데이터 구조를 선택하십시오.
3. k와 같은 매개 변수를 설정하십시오
4. 가장 가까운 이웃 훈련 튜플을 보관하기 위해 거리를 기준으로 크기 K의 우선 순위 큐를 유지하십시오. 초기 가장 가까운 이웃 튜플로 훈련 튜플에서 K 튜플을 무작위로 선택하고 테스트 튜플과 이러한 K 튜플 사이의 거리를 계산하고 훈련 튜플 레이블과 거리를 우선 순위 대기열에 저장하십시오.
5. 훈련 튜플 세트를 통해 반복하고, 현재 훈련 튜플과 시험 튜플 사이의 거리를 계산하고, 결과 거리 L을 우선 순위 큐의 최대 거리 LMAX로 나눕니다.
6. 비교하십시오. l> = lmax 인 경우 튜플이 폐기되고 다음 튜플이 횡단됩니다. l <lmax 인 경우 우선 순위 큐에서 가장 큰 거리로 튜플을 삭제하고 현재 교육 튜플을 우선 순위 큐에 저장하십시오.
7. 트래버스가 완료된 후 우선 순위 큐에서 K 튜플의 대부분을 계산하고 테스트 튜플의 범주로 사용하십시오.
테스트 튜플 세트를 테스트 한 후 오류율을 계산하고 다른 k 값을 계속 설정하고 재교육하고 마지막으로 가장 작은 오류율로 k 값을 얻습니다.
알고리즘 프로세스에 따르면 Java 언어를 구현합니다.
패키지 knn;/** * 포인트 x 및 y * @author 관리자의 좌표 * */public class pointbean {int x; int y; public int getx () {return x;} public void setx (int x) {this.x = x;} public int gety () {return y;} public void sety (int y) {this.y =} super (); this.x = x; this.y = y;} public pointbean () {super ();}@atriadepublic string tostring () {return "pointbean [x =" + x + ", y =" + y + "];}}KNN 알고리즘
패키지 knn; import java.util.arraylist;/** * knn 구현 방법 * @author 관리자 * */public class knnmain {public double getpointlength (arraylist <pointbean> 목록, PointBean BB) {int b_x = bb.getx (); int b_y = bb.gety (); double temp = (b_x -list.get (0) .getx ())*(b_x -list.get (0) .getx ())+ (b_y -list.get (0) .gety ())*(b_y -list.get (0)); // (int i = 1; i <list.size (); i ++) {if (temp <((b_x -list.get (i) .get (i)))*(b_x -list.get (i) .getx ()))에 대한 최소 거리를 찾습니다. temp = (b_x -list.get (i) .getx ())*(b_x -list.get (i) .gety ()); }} return math.sqrt (temp); } / ** * 길이를 가져 와서 분류에 가장 작은 것을 찾으십시오 * @param list1 * @param list2 * @param bb * / public void getContent (arraylist <pointbean> list1, arraylist <pointbean> list2, arraylist <pointbean> list3, pointbean bb) {double a = getpointl (list1, b); Double B = GetPointLength (List2, BB); Double C = GetPointLength (List3, BB); // if (a> b) {if (b> c) {system.out.println ( "이 점 :"+bb.getx ()+","+bb.gety ()+""+")를 비교합니다. } else {system.out.println ( "이 점 :"+bb.getx ()+","+bb.gety ()+""+"); }} else {if (a> c) {system.out.println ( "이 점 :"+bb.getx ()+","+bb.gety ()+""+"); } else {if (a> c) {system.out.println ( "이 점 :"+bb.getx ()+","+bb.gety ()+""+"); } else {system.out.println ( "이 점 :"+bb.getx ()+","+bb.gety ()+""+"); }}}}주요 기능
패키지 knn; import java.util.arraylist;/ * * 메인 함수 knn */public class testjava {static arraylist <pointbean> lista; 정적 ArrayList <PointBean> listb; 정적 ArrayList <PointBean> listc; 정적 ArrayList <PointBean> listd; public static void main (String [] args) {// chuangjia arraylist lista = new Arraylist <pointbean> (); listb = new ArrayList <PointBean> (); listc = new ArrayList <PointBean> (); listd = new ArrayList <PointBean> (); // 데이터 setDate () 쓰기; getTestresult (); } /*** 결과 가져옵니다* /private static void getTestresult () {// 객체 생성 knmain km = new Knnmain (); for (int i = 0; i <listd.size (); i ++) {km.getContent (lista, listb, listc, listd.get (i)); }} /*** 쓰기 데이터* /private static void setDate () {// 조정 지점 int a_x [] = {1,1,2,2,1}; int a_y [] = {0,1,1,0,2}; // b의 좌표 지점 int b_x [] = {2,3,3,3,4}; int b_y [] = {4,4,3,2,3}; // c의 좌표 지점 int c_x [] = {4,5,5,6,6}; int c_y [] = {1,2,0,2,1}; // 테스트 데이터 // b의 좌표 지점 int d_x [] = {3,3,3,0,5}; int d_y [] = {0,1,5,0,1}; // PointBean BA; for (int i = 0; i <5; i ++) {ba = new pointbean (a_x [i], a_y [i]); lista.add (ba); } // PointBean BB; for (int i = 0; i <5; i ++) {bb = new PointBean (b_x [i], b_y [i]); listb.add (bb); } // PointBean BC; for (int i = 0; i <5; i ++) {bc = new PointBean (c_x [i], c_y [i]); listc.add (bc); } // PointBean BD; for (int i = 0; i <5; i ++) {bd = new pointbean (d_x [i], d_y [i]); listd.add (bd); }}}테스트 결과 :
이 점 : 3, 1은 a에 속합니다
이 점 : 3, 5는 b에 속합니다
이 점 : 0, 0은 a에 속합니다
이 점 : 5, 1은 c에 속합니다
이 시점에서 간단한 KNN 알고리즘은 알 수없는 포인트의 구분을 구현하여 모든 사람이 KNN 알고리즘을 이해하는 데 도움이됩니다. KNN을 개선하는 일부 알고리즘은 나중에 게시됩니다. 함께 배우고 함께 진행하십시오!
Java 알고리즘에 대한 자세한 내용은이 사이트에 관심이있는 독자들이 주제를 볼 수 있습니다. "Java 데이터 구조 및 알고리즘 자습서", "Java Operation Dom Node Tips 요약", "Java 파일 및 디렉토리 작동 팁 요약"및 "Java Cache Operation Tips의 요약"을 볼 수 있습니다.
이 기사가 모든 사람의 Java 프로그래밍에 도움이되기를 바랍니다.