irysy.txt

(4 KB) Pobierz
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();



    }
}


Zgłoś jeśli naruszono regulamin