Advertisement
Konark

Untitled

Apr 7th, 2016
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.24 KB | None | 0 0
  1.  
  2. package clasificator;
  3.  
  4. import java.io.BufferedReader;
  5. import java.io.FileReader;
  6. import java.io.IOException;
  7. import java.util.ArrayList;
  8.  
  9. public class Classificator {
  10. private ArrayList<String[]> data;//вхідний масив строк
  11.     private String classId;//ремомендації для класу
  12.     private int N;//
  13.     private int M;//
  14.     private double[][] probability;//ймовірність
  15.     private ArrayList<String[]> classSample;//масив з елементами класу
  16.     private double maxProbability;//максимальна ймовірність
  17.  
  18.     public Classificator(ArrayList<String[]> d, int n, int m, String kl) {
  19.         N = n;
  20.         M = m;
  21.         data = d;
  22.         classId = kl;
  23.         probability = new double[N][M];
  24.         classSample = new ArrayList<>();
  25.     }
  26.  
  27.     //головна функція класифікації
  28.     public void classificate() {
  29.         String curr = "";
  30.         double nk,n;
  31.         double pMax;
  32.         for (int i = 0; i < N; i++) {
  33.             for (int j = 0; j < M - 1; j++) {
  34.                 //Вибір j-ої змінної та i значення
  35.                 //для прийняття рішення віднесення к k-му класу
  36.                 curr = data.get(i)[j];
  37.                 //кількість однакових елементів для даного класу в стовбчику
  38.                 nk = getClassElementsCount(data, curr, classId, j, N, M);
  39.                 //кількість однакових елементів для даного стовбчика
  40.                 n = getEqualElementsCount(data, curr, j, N);
  41.                 //Обчислення умовної ймовірності
  42.                 probability[i][j] = nk / n;
  43.             }
  44.         }
  45.         //знаходимо максимальну ймовірність
  46.         maxProbability = setMaxProbability(probability, N, M);
  47.         //Формування масиву з елементами даного класу
  48.         classSample = formClassSample(data, N, M, classId);
  49.     }
  50.  
  51.     //Функція повертає масив з елементами даного класу
  52.     public ArrayList<String[]> getClassSample() {
  53.         return classSample;
  54.     }
  55.  
  56.     //Функція повертає маскимальну ймовірність
  57.     public double getMaxProbability() {
  58.         return maxProbability;
  59.     }
  60.  
  61.     //Функція знаходить і встановлює маскимальну ймовірність
  62.     private double setMaxProbability(double[][] prob, int n, int m) {
  63.         double max = 0;
  64.         for (int i = 0; i < n; i++) {
  65.             for (int j = 0; j < m; j++) {
  66.                 if (prob[i][j] > max) {
  67.                     max = prob[i][j];
  68.                 }
  69.             }
  70.         }
  71.         return max;
  72.     }
  73.  
  74.     //Функція повертає кількість однакових елементів для даного стовбчика
  75.     private double getEqualElementsCount(ArrayList<String[]> sample, String curr, int col, int n) {
  76.         int count = 0;
  77.         for (int i = 0; i < n; i++) {
  78.             if (sample.get(i)[col].compareToIgnoreCase(curr) == 0) {
  79.                 count++;
  80.             }
  81.         }
  82.         return count;
  83.     }
  84.  
  85.     //Функція повертає кількість однакових елементів для даного класу в стовбчику
  86.     private double getClassElementsCount(ArrayList<String[]> sample, String curr, String id, int col, int n, int m) {
  87.         int count = 0;
  88.         for (int i = 0; i < n; i++) {
  89.             if ((sample.get(i)[col].compareToIgnoreCase(curr) == 0) && (sample.get(i)[m - 1].compareToIgnoreCase(id) == 0)) {
  90.                 count++;
  91.             }
  92.         }
  93.         return count;
  94.     }
  95.  
  96.     //Функція знаходить і повертає масив з елементами даного класу
  97.     private ArrayList<String[]> formClassSample(ArrayList<String[]> sample, int n, int m, String id) {
  98.         ArrayList<String[]> classRes = new ArrayList<>();
  99.         int i = 0;
  100.         while (i < n) {
  101.             if (sample.get(i)[m - 1].compareToIgnoreCase(id) == 0) {
  102.                 classRes.add(sample.get(i));
  103.             }
  104.             i++;
  105.         }
  106.         return classRes;
  107.     }
  108.  
  109.     private static ArrayList loadData(String pth, int n, int m) {
  110.         ArrayList data = new ArrayList();
  111.         String thisLine = null;
  112.         try {
  113.             BufferedReader fin = new BufferedReader(new FileReader(pth));
  114.             int i = 0;
  115.             while ((thisLine = fin.readLine()) != null) {
  116.                 data.add(thisLine);
  117.                 i++;
  118.             }
  119.         } catch (IOException ex) {}
  120.         return data;
  121.     }
  122.  
  123.     public static void main(String[] args) {
  124.         String[][] strData = {
  125.             {"Юний", "Короткозорість", "Ні", "Знижений", "Немає"},
  126.             { "Юний", "Короткозорість", "Ні","Нормальний", "М'які"},
  127.             { "Юний", "Короткозорість","Так","Знижений", "Немає" },
  128.             {"Юний", "Короткозорість","Так","Нормальний", "Тверді"},
  129.             {"Юний", "Далекозорість", "Ні", "Знижений", "Немає"},
  130.             { "Юний", "Далекозорість", "Ні","Нормальний", "М'які"},
  131.             { "Юний", "Далекозорість","Так", "Знижений", "Немає"},
  132.             {"Юний", "Далекозорість","Так","Нормальний", "Тверді"},
  133.             {"Середній", "Короткозорість", "Ні", "Знижений", "Немає"},
  134.             {"Середній", "Короткозорість", "Ні","Нормальний", "М'які"},
  135.             {"Середній", "Короткозорість","Так","Знижений", "Немає"},
  136.             {"Середній", "Короткозорість","Так","Нормальний", "Тверді"},
  137.             {"Середній", "Далекозорість", "Ні", "Знижений", "Немає"},
  138.             {"Середній", "Далекозорість", "Ні","Нормальний", "М'які"},
  139.             {"Середній", "Далекозорість","Так", "Знижений", "Немає"},
  140.             {"Юний", "Далекозорість","Так","Нормальний", "Тверді"},
  141.             {"Старий", "Короткозорість", "Ні", "Знижений", "Немає"},
  142.             {"Старий", "Короткозорість", "Ні", "Нормальний", "Немає"},
  143.             {"Старий", "Короткозорість", "Так", "Знижений", "Немає"},
  144.             {"Старий", "Короткозорість", "Так", "Нормальний", "Тверді"},
  145.             {"Старий", "Далекозорість", "Ні", "Знижений", "Немає"},
  146.             {"Старий", "Далекозорість", "Ні","Нормальний", "М'які"},
  147.             {"Старий", "Далекозорість", "Так", "Знижений", "Немає"},
  148.             {"Старий", "Далекозорість", "Так", "Нормальний", "Немає"},        
  149.         };
  150.  
  151.  
  152.         int N = 24, M = 5;
  153.         String classId = "М'які";
  154.        String[] fieldNames = {"Юний", "Далекозорість", "Ні", "Нормальний"};
  155.  
  156.         ArrayList<String[]> data = new ArrayList();
  157.         for (int i = 0; i < N; i++) {
  158.             String[] temp = new String[5];
  159.             System.arraycopy(strData[i], 0, temp, 0, M);
  160.             data.add(temp);
  161.         }
  162.         Classificator classificator = new Classificator(data, N, M, classId);
  163.         classificator.classificate();
  164.  
  165.    
  166.         ArrayList<String[]> classSample = classificator.getClassSample();
  167.  
  168.      
  169.  
  170.         for (int i = 0; i < classSample.size(); i++) {
  171.             for (int j = 0; j < M; j++) {
  172.                 System.out.print(classSample.get(i)[j] + " ");
  173.             }
  174.             System.out.println();
  175.         }
  176.  
  177.  
  178.     }
  179. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement