В этой статье описывается алгоритм KNN, реализованный в Java. Поделитесь этим для вашей ссылки, следующим образом:
Каждый должен быть знаком с алгоритмами KNN, и они являются одним из десяти лучших классических алгоритмов для интеллектуального анализа данных.
Идея алгоритма состоит в том, чтобы группировать и классифицировать неизвестные данные для группировки, которая была классифицирована в учебном наборе данных. Среди них расстояние рассчитывается на основе неизвестной точки, и точки в его обучающих данных рассчитывается точка с кратчайшим расстоянием, и категория, где она классифицирована в этой точке.
Давайте посмотрим на разработку алгоритма:
1. Подготовьте данные и предварительно обрабатывает данные
2. Выберите соответствующую структуру данных для хранения учебных данных и тестирования кортежей
3. Установите параметры, такие как k
4. Сохраняйте приоритетную очередь размера K, от больших до малого, в зависимости от расстояния, чтобы хранить ближайшие тренировочные кортежи для соседей. Случайно выберите K Cools из тренировочного кортежа в качестве начального ближайшего соседа, рассчитайте расстояние между тестовым кортежом и этими k -кортежами, и храните этикетку для тренировок и расстояние в очередь приоритета.
5. Переверните через учебный набор кортежей, рассчитайте расстояние между текущим обучающим корпусом и тестовым кортежом и разделите полученное расстояние L на максимальное расстояние LMAX в очередь приоритета.
6. Сделайте сравнение. Если l> = lmax, кортеж отбрасывается, а следующий кортеж проходит. Если l <lmax, удалите кортеж с наибольшим расстоянием в очереди приоритета и сохраните текущий учебный корзин в очереди приоритета.
7. После завершения обхода рассчитайте большинство кортежников в очередь приоритета и используйте их в качестве категории тестового рукава.
8. После того, как набор тестового корзина протестирован, вычислите частоту ошибок, продолжайте устанавливать различные значения K и переобучить и, наконец, получить значение k с наименьшей частотой ошибок.
Согласно процессу алгоритма, мы реализуем Java Language:
Пакет knn;/** * Координаты точек x и y * @@author Administrator * */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 = y; супер(); this.x = x; this.y = y;} public pointbean () {super ();}@overridepublic string toString () {return "pointbean [x =" + x + ", y =" + y + "]";}}Алгоритм KNN
пакет knn; импортировать java.util.arraylist;/** * Методы реализации KNN * @author Administrator * */public Class knnmain {public doublepointLength (arraylist <pointbean> list, 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) .gety ()); // Найти минимальное расстояние для (int i = 1; i <list.size (); i ++) {if (temp <((b_x -list.get (i) .getx ())*(b_x -list.get (i) .getx ())+(b_y -list.get (i) .gety ()*(b_y -list.get (i)). -list.get (i) .getx ())*(b_x -list.get (i) .gety ()); }} return math.sqrt (temp); } / ** * Получите длину и найдите наименьший для классификации * @param list1 * @param list2 * @param list3 * @param bb * / public void getContent (ArrayList <pointbean> list1, arraylist <pointbean> list2, arraylist <pointbean> list3, pointbean bb) {Double a = getpointlength (list1); double b = getPointLength (list2, bb); double c = getPointLength (list3, bb); // Сделайте сравнение if (a> b) {if (b> c) {System.out.println ("Эта точка:"+bb.getx ()+","+bb.gety ()+""+"принадлежит c"); } else {System.out.println ("This Point:"+bb.getx ()+","+bb.gety ()+""+"принадлежит B"); }} else {if (a> c) {System.out.println ("Это точка:"+bb.getx ()+","+bb.gety ()+""+"принадлежит c"); } else {if (a> c) {System.out.println ("Это точка:"+bb.getx ()+","+bb.gety ()+""+"принадлежит C"); } else {System.out.println ("Это точка:"+bb.getx ()+","+bb.gety ()+""+"принадлежит"); }}}}Основная функция
пакет knn; импортировать java.util.arraylist;/ * * Основная функция Knn */public class testjava {static arraylist <pointbean> lista; Static Arraylist <pointbean> listb; Static Arraylist <pointbean> listc; Static 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> (); // Написать Data SetDate (); getTestResult (); } /*** Получить результат* /private static void getTestResult () {// Создать объект knnmain km = new knnmain (); for (int i = 0; i <listd.size (); i ++) {km.getContent (lista, listb, listc, listd.get (i)); }} /*** Записать данные* /private static void setDate () {// a's координата 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 координата CINT 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 принадлежит
Этот момент: 3, 5 принадлежит к B
Эта точка: 0, 0 принадлежит
Этот момент: 5, 1 принадлежит C
На этом этапе простой алгоритм KNN внедрил разделение неизвестных точек, что поможет всем понять алгоритм KNN. Некоторые алгоритмы, которые улучшают KNN, будут опубликованы позже. Учитесь и продвигайся вместе!
Для получения дополнительной информации об алгоритмах Java, читатели, которые заинтересованы в этом сайте, могут просмотреть темы: «Учебное пособие по структуре данных Java и алгоритм», «Сводка операции Java Dom Node», «Сводка Java File и каталог
Я надеюсь, что эта статья будет полезна для всех Java Programming.