Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package clasificator;
- import java.io.BufferedReader;
- import java.io.FileReader;
- import java.io.IOException;
- import java.util.ArrayList;
- public class Classificator {
- private ArrayList<String[]> data;//вхідний масив строк
- private String classId;//ремомендації для класу
- private int N;//
- private int M;//
- private double[][] probability;//ймовірність
- private ArrayList<String[]> classSample;//масив з елементами класу
- private double maxProbability;//максимальна ймовірність
- public Classificator(ArrayList<String[]> d, int n, int m, String kl) {
- N = n;
- M = m;
- data = d;
- classId = kl;
- probability = new double[N][M];
- classSample = new ArrayList<>();
- }
- //головна функція класифікації
- public void classificate() {
- String curr = "";
- double nk,n;
- double pMax;
- for (int i = 0; i < N; i++) {
- for (int j = 0; j < M - 1; j++) {
- //Вибір j-ої змінної та i значення
- //для прийняття рішення віднесення к k-му класу
- curr = data.get(i)[j];
- //кількість однакових елементів для даного класу в стовбчику
- nk = getClassElementsCount(data, curr, classId, j, N, M);
- //кількість однакових елементів для даного стовбчика
- n = getEqualElementsCount(data, curr, j, N);
- //Обчислення умовної ймовірності
- probability[i][j] = nk / n;
- }
- }
- //знаходимо максимальну ймовірність
- maxProbability = setMaxProbability(probability, N, M);
- //Формування масиву з елементами даного класу
- classSample = formClassSample(data, N, M, classId);
- }
- //Функція повертає масив з елементами даного класу
- public ArrayList<String[]> getClassSample() {
- return classSample;
- }
- //Функція повертає маскимальну ймовірність
- public double getMaxProbability() {
- return maxProbability;
- }
- //Функція знаходить і встановлює маскимальну ймовірність
- private double setMaxProbability(double[][] prob, int n, int m) {
- double max = 0;
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < m; j++) {
- if (prob[i][j] > max) {
- max = prob[i][j];
- }
- }
- }
- return max;
- }
- //Функція повертає кількість однакових елементів для даного стовбчика
- private double getEqualElementsCount(ArrayList<String[]> sample, String curr, int col, int n) {
- int count = 0;
- for (int i = 0; i < n; i++) {
- if (sample.get(i)[col].compareToIgnoreCase(curr) == 0) {
- count++;
- }
- }
- return count;
- }
- //Функція повертає кількість однакових елементів для даного класу в стовбчику
- private double getClassElementsCount(ArrayList<String[]> sample, String curr, String id, int col, int n, int m) {
- int count = 0;
- for (int i = 0; i < n; i++) {
- if ((sample.get(i)[col].compareToIgnoreCase(curr) == 0) && (sample.get(i)[m - 1].compareToIgnoreCase(id) == 0)) {
- count++;
- }
- }
- return count;
- }
- //Функція знаходить і повертає масив з елементами даного класу
- private ArrayList<String[]> formClassSample(ArrayList<String[]> sample, int n, int m, String id) {
- ArrayList<String[]> classRes = new ArrayList<>();
- int i = 0;
- while (i < n) {
- if (sample.get(i)[m - 1].compareToIgnoreCase(id) == 0) {
- classRes.add(sample.get(i));
- }
- i++;
- }
- return classRes;
- }
- private static ArrayList loadData(String pth, int n, int m) {
- ArrayList data = new ArrayList();
- String thisLine = null;
- try {
- BufferedReader fin = new BufferedReader(new FileReader(pth));
- int i = 0;
- while ((thisLine = fin.readLine()) != null) {
- data.add(thisLine);
- i++;
- }
- } catch (IOException ex) {}
- return data;
- }
- public static void main(String[] args) {
- String[][] strData = {
- {"Юний", "Короткозорість", "Ні", "Знижений", "Немає"},
- { "Юний", "Короткозорість", "Ні","Нормальний", "М'які"},
- { "Юний", "Короткозорість","Так","Знижений", "Немає" },
- {"Юний", "Короткозорість","Так","Нормальний", "Тверді"},
- {"Юний", "Далекозорість", "Ні", "Знижений", "Немає"},
- { "Юний", "Далекозорість", "Ні","Нормальний", "М'які"},
- { "Юний", "Далекозорість","Так", "Знижений", "Немає"},
- {"Юний", "Далекозорість","Так","Нормальний", "Тверді"},
- {"Середній", "Короткозорість", "Ні", "Знижений", "Немає"},
- {"Середній", "Короткозорість", "Ні","Нормальний", "М'які"},
- {"Середній", "Короткозорість","Так","Знижений", "Немає"},
- {"Середній", "Короткозорість","Так","Нормальний", "Тверді"},
- {"Середній", "Далекозорість", "Ні", "Знижений", "Немає"},
- {"Середній", "Далекозорість", "Ні","Нормальний", "М'які"},
- {"Середній", "Далекозорість","Так", "Знижений", "Немає"},
- {"Юний", "Далекозорість","Так","Нормальний", "Тверді"},
- {"Старий", "Короткозорість", "Ні", "Знижений", "Немає"},
- {"Старий", "Короткозорість", "Ні", "Нормальний", "Немає"},
- {"Старий", "Короткозорість", "Так", "Знижений", "Немає"},
- {"Старий", "Короткозорість", "Так", "Нормальний", "Тверді"},
- {"Старий", "Далекозорість", "Ні", "Знижений", "Немає"},
- {"Старий", "Далекозорість", "Ні","Нормальний", "М'які"},
- {"Старий", "Далекозорість", "Так", "Знижений", "Немає"},
- {"Старий", "Далекозорість", "Так", "Нормальний", "Немає"},
- };
- int N = 24, M = 5;
- String classId = "М'які";
- String[] fieldNames = {"Юний", "Далекозорість", "Ні", "Нормальний"};
- ArrayList<String[]> data = new ArrayList();
- for (int i = 0; i < N; i++) {
- String[] temp = new String[5];
- System.arraycopy(strData[i], 0, temp, 0, M);
- data.add(temp);
- }
- Classificator classificator = new Classificator(data, N, M, classId);
- classificator.classificate();
- ArrayList<String[]> classSample = classificator.getClassSample();
- for (int i = 0; i < classSample.size(); i++) {
- for (int j = 0; j < M; j++) {
- System.out.print(classSample.get(i)[j] + " ");
- }
- System.out.println();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement