package dm; import dm.TEST_DM; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import weka.core.matrix.*; /* * To change this template, choose Tools | Templates * and open the template in the editor. */ /** * * @author student */ public class Irysy { public static void main(String[] args) throws Exception { TEST_DM irysy = new TEST_DM("C:/Program Files/Weka-3-6/data/iris.arff"); System.out.println(irysy); irysy.wypisz(); analiza4(irysy); analiza5(irysy); } private static void normalizuj(double[][] Z) { double[] sr = new double[4]; double[] var = new double[4]; for (int i = 0; i < 150; i++) { for (int j = 0; j < 4; j++) { sr[j] = sr[j] + Z[i][j]; } } for (int i = 0; i < 4; i++) { sr[i] = sr[i] / 150; } for (int i = 0; i < 150; i++) { for (int j = 0; j < 4; j++) { Z[i][j] = Z[i][j] - sr[j]; var[j] = var[j] + (Z[i][j]) * (Z[i][j]); } } for (int i = 0; i < 4; i++) { var[i] = Math.sqrt(var[i] / 150); } for (int i = 0; i < 150; i++) { for (int j = 0; j < 4; j++) { Z[i][j] = Z[i][j] / var[j]; } } } public static void analiza4(TEST_DM irysy) throws IOException { double[][] Z = new double[150][4]; double[] sr = new double[4]; double[] var = new double[4]; for (int i = 0; i < 150; i++) { for (int j = 0; j < 4; j++) { Z[i][j] = irysy.element(i, j); } } normalizuj(Z); Matrix zM = new Matrix(Z); Matrix cov = zM.transpose().times(zM).times(1 / 150.); System.out.println(cov); EigenvalueDecomposition w?asne = cov.eig(); double[] w = w?asne.getRealEigenvalues(); double suma = 0; System.out.println("wartosci w?asne:"); for (int i = 0; i < w.length; i++) { //System.out.println(w[i]); //suma=suma+w[i]; System.out.printf("%d:_%5.3f=%4.1f proc\n", i, w[i], w[i] / 4 * 100); } System.out.println("suma warto?ci w?asnych wynosi: "); System.out.println(suma); Matrix v = w?asne.getV(); System.out.println(v); System.out.println(v.transpose().times(v)); Matrix zMv = zM.times(v); System.out.println(zM.times(v)); PrintWriter pw = new PrintWriter(new FileWriter("irysy.csv")); for (int i = 0; i < 150; i++) { pw.printf("%d;%5.3f;%5.3f\n", i, zMv.get(i, 2), zMv.get(i, 3)); } pw.close(); } public static void analiza5(TEST_DM irysy) throws IOException { double[][] Z = new double[150][5]; double[] sr = new double[5]; double[] var = new double[5]; for (int i = 0; i < 150; i++) { for (int j = 0; j < 5; j++) { Z[i][j] = irysy.element(i, j); } } normalizuj(Z); int dl=Z[0].length; Matrix zM = new Matrix(Z); Matrix cov = zM.transpose().times(zM).times(1 / 150.); System.out.println(cov); EigenvalueDecomposition w?asne = cov.eig(); double[] w = w?asne.getRealEigenvalues(); double suma = 0; System.out.println("wartosci w?asne:"); for (int i = 0; i < dl; i++) { //System.out.println(w[i]); //suma=suma+w[i]; System.out.printf("%d:_%5.3f=%4.1f proc\n", i, w[i], w[i] / dl * 100); } System.out.println("suma warto?ci w?asnych wynosi: "); System.out.println(suma); Matrix v = w?asne.getV(); System.out.println(v); System.out.println(v.transpose().times(v)); Matrix zMv = zM.times(v); System.out.println(zM.times(v)); PrintWriter pw = new PrintWriter(new FileWriter("irysy2.csv")); for (int i = 0; i < 150; i++) { pw.printf("%d;%5.3f;%5.3f\n", i, zMv.get(i, 3), zMv.get(i, 4)); } pw.close(); } }
aivliska