Este artigo descreve o algoritmo KNN implementado em Java. Compartilhe -o para sua referência, como segue:
Todos devem estar familiarizados com os algoritmos KNN e são um dos dez principais algoritmos clássicos para mineração de dados.
A idéia do algoritmo é agrupar e classificar dados desconhecidos para o agrupamento que foi classificado no conjunto de dados de treinamento. Entre eles, a distância é calculada com base no ponto desconhecido e no ponto em seus dados de treinamento, o ponto com a menor distância é calculado e a categoria em que é classificada nesse ponto.
Vamos dar uma olhada na engenharia do algoritmo:
1. Prepare dados e pré -processando os dados
2. Selecione a estrutura de dados apropriada para armazenar dados de treinamento e testar tuplas
3. Defina parâmetros, como k
4. Mantenha uma fila prioritária do tamanho K, de grande a pequena, com base na distância, para armazenar tuplas mais próximas que treinam vizinhos. Selecione aleatoriamente as tuplas da tupla do treinamento como a tupla vizinha mais próxima, calcule a distância entre a tupla do teste e essas tuplas K e guarde o rótulo de tupla de treinamento e distância na fila de prioridade.
5. Itreate através do conjunto de tuplas de treinamento, calcule a distância entre a tupla do treinamento atual e a tupla do teste e divida a distância resultante l à distância máxima Lmax na fila de prioridade.
6. Faça uma comparação. Se l> = lmax, a tupla será descartada e a próxima tupla será atravessada. Se Lmax, exclua a tupla com a maior distância na fila prioritária e armazene a tupla atual de treinamento na fila de prioridade.
7. Após a conclusão da travessia, calcule a maioria das tuplas K na fila de prioridade e use -as como a categoria da tupla do teste.
8. Após o teste do conjunto de tupla do teste, calcule a taxa de erro, continue definindo diferentes valores de K e treina e, finalmente, obtenha o valor K com a menor taxa de erro.
De acordo com o processo de algoritmo, implementamos o idioma Java:
pacote knn;/** * coordenadas dos pontos x e y * @author administrador * */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 segy (int y): super (); this.x = x; this.y = y;} public PointBean () {Super ();}@SubstridePublic String tostring () {return "PointBean [x =" + x + ", y =" + y + "]";}}Algoritmo KNN
pacote knn; importar java.util.ArrayList;/** * Métodos da implementação de KNN * @Author Administrator * */public class Knnmain {public duplo getpointLength (ArrayList <PointBean> List, PointBean bb) {int b_x = bb.getx (); int b_y = bb.gety (); dupla temp = (b_x -list.get (0) .getx ())*(b_x -list.get (0) .getx ())+ (b_y -list.gety (0) .gety ())*(b_y -list.get (0) .gety ()); // Encontre a distância mínima para (int i = 1; i <list.size (); i ++) {if (temp <((b_x -list.get.get (i) .getX ()*(b_x -list.gety (i) .getx ())+(b_y -list.get (i) .gety ()). temp = (b_x -list.get (i) .getx ())*(b_x -list.get (i) .gety ()); }} retornar math.sqrt (temp); } / ** * Obtenha o comprimento e encontre o menor para classificação * @param list1 * @param list2 * @param list3 * @param bb * / public void getContent (ArrayList <PointBean> list1, ArrayList <PointBean> list2, ARRAYLIST <PointBean> List1, PointBean Bb) {PointBean> List2, ARRAYLIST <PointBean> (PointBean Bb) {PointBean>, ATRAYList <PointBean>, PointBean, BB): duplo b = getPointLength (list2, bb); duplo c = getPointLength (list3, bb); // faça uma comparação se (a> b) {if (b> c) {System.out.println ("Este ponto:"+bb.getx ()+","+bb.gety ()+"" "" "pertence a c"); } else {System.out.println ("Este ponto:"+bb.getx ()+","+bb.gety ()+"" "+" pertence a b "); }} else {if (a> c) {System.out.println ("Este ponto:"+bb.getx ()+","+bb.gety ()+""+"pertence a c"); } else {if (a> c) {System.out.println ("Este ponto:"+bb.getx ()+","+bb.gety ()+""+"pertence a c"); } else {System.out.println ("Este ponto:"+bb.getx ()+","+bb.gety ()+"" "+" pertence a um "); }}}}Função principal
pacote knn; importar java.util.ArrayList;/ * * função principal knn */public class TestJava {static ArrayList <PointBean> LISTA; Arraylist estático <PointBean> listb; estático ArrayList <PointBean> listc; estático 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> (); // gravar dados setDate (); getTestResult (); } /*** Obtenha o resultado* /private estático void getTestresult () {// Crie um objeto knnmain km = new KnnMain (); for (int i = 0; i <listd.size (); i ++) {km.getContent (lateA, listb, listc, listd.get (i)); }} /*** Escreva dados* /private static void SetDate () {// A do ponto de coordenada int a_x [] = {1,1,2,2,1}; int a_y [] = {0,1,1,0,2}; // BIMO DE COORDENAS B_X de // B B_X [] = {2,3,3,3,4}; int b_y [] = {4,4,3,2,3}; // COORDINA DE C PONTO INT C_X [] = {4,5,5,6,6}; int c_y [] = {1,2,0,2,1}; // Dados de teste // Ponto de coordenadas de B int d_x [] = {3,3,3,0,5}; int d_y [] = {0,1,5,0,1}; // Pointbean BA; para (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); }}}Resultados do teste:
Este ponto: 3, 1 pertence a um
Este ponto: 3, 5 pertence a B
Este ponto: 0, 0 pertence a um
Este ponto: 5, 1 pertence a C
Nesse ponto, o algoritmo simples do KNN implementou a divisão de pontos desconhecidos, o que ajudará todos a entender o algoritmo KNN. Alguns algoritmos que melhoram o KNN serão publicados posteriormente. Aprenda e faça progresso juntos!
Para obter mais informações sobre os algoritmos Java, os leitores interessados neste site podem visualizar os tópicos: "Estrutura de dados Java e tutorial de algoritmo", "Resumo das dicas de nó da operação Java Dom", "Resumo de dicas de operação de Java e Operação de Java" e "Resumo de Java cache" Tips "TIPS"
Espero que este artigo seja útil para a programação Java de todos.