Advertisement
Guest User

Untitled

a guest
Dec 18th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.53 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3. import java.util.stream.IntStream;
  4.  
  5. class Data implements Comparable<Data> {
  6.     public int length;
  7.     public double[] values, normValues;
  8.     public Cluster cluster;
  9.    
  10.     public Data(int _length) {
  11.         this.length = _length;
  12.        
  13.         this.values = new double[this.length];
  14.         this.normValues = new double[this.length];
  15.     }
  16.    
  17.     public Data(double ...tab) {
  18.         this(tab.length);
  19.        
  20.         Arrays.setAll(this.values, (index) -> tab[index]);
  21.     }
  22.    
  23.     @Override
  24.     public int compareTo(Data arg0) {
  25.         return 0; // On nous dit qu'il implémente Comparable, on nous donne pas la comparaison, d'où le 0
  26.     }
  27.    
  28.     @Override
  29.     public String toString() {
  30.         String s = "";
  31.         for(double v : values) s += (v + ", ");
  32.        
  33.         return s;
  34.     }
  35.    
  36.     public boolean normalize(double[] max) {
  37.         if(this.values.length != max.length)
  38.             return false;
  39.        
  40.         Arrays.setAll(this.normValues, (index) -> this.values[index] / max[index]);
  41.        
  42.         return true;
  43.     }
  44.    
  45.     public double dist(Data other) {
  46.         double sum = 0;
  47.         for(int i = 0; i < this.normValues.length && i < other.normValues.length; i++) {
  48.             sum += Math.pow((this.normValues[i] - other.normValues[i]), 2);
  49.         }
  50.        
  51.         return Math.sqrt(sum);
  52.     }
  53. }
  54.  
  55. class Cluster {
  56.     private ArrayList<Data> dataSet;
  57.     private Data centroid;
  58.     private int no;
  59.    
  60.     private static int nb;
  61.  
  62.     public Cluster() {
  63.         dataSet = new ArrayList<Data>();
  64.         centroid = new Data();
  65.         no = nb++;
  66.     }
  67.    
  68.     public Cluster(Data _centroid) {
  69.         this();
  70.         centroid = _centroid;
  71.     }
  72.    
  73.     public void add(Data data) {
  74.         dataSet.add(data);
  75.         data.cluster = this;
  76.     }
  77.    
  78.     public void remove(Data data) {
  79.         dataSet.remove(data);
  80.         data.cluster = null;
  81.     }
  82.    
  83.     public void centralize() {
  84.         int min = Integer.MAX_VALUE;
  85.         for(Data data : dataSet)
  86.             if(data.values.length < min) min = data.values.length;
  87.        
  88.         double[] means = new double[min];
  89.         double[] maxs = new double[min];
  90.        
  91.         double[] sum = new double[min];
  92.         IntStream.range(0, min)
  93.             .forEach(i -> { // Pour chaque entier de 0 à min
  94.                 // on initialise le sum[i] comme étant la sum de toutes les data.values[i]
  95.                 sum[i] = dataSet.stream().mapToDouble(data -> data.values[i]).sum();
  96.             });
  97.        
  98.         for(int i = 0; i < min; i++) {
  99.             double max = -Double.MIN_VALUE;
  100.            
  101.             for(Data data : dataSet) // On cherche le max de chaque colonnes
  102.                 if(data.values[i] > max)
  103.                     max = data.values[i];
  104.            
  105.             // On calcul la moyenne
  106.             means[i] = (sum[i] / dataSet.size());
  107.             maxs[i] = max;
  108.         }
  109.        
  110.         centroid = new Data(means);
  111.         centroid.normalize(maxs);
  112.     }
  113. }
  114.  
  115. /*
  116.  * 2.3.1 : Expliquer la ligne :
  117.  * dataSet est une liste possédant une méthode "forEach", celle ci permet de lui passer une fonction
  118.  * anonyme (ou autrement appelée lambda) qui prend en paramètre l'objet du tableau à l'index actuel (géré
  119.  * par le forEach), et execute la méthode par rapport à cet objet passé.
  120.  * Ainsi, on execute searchCluser(data).add(data) sur l'ensemble des objets contenus dans dataSet.
  121.  *
  122.  */
  123.  
  124. public class Revisions {
  125.    
  126.     private double[] dim;
  127.     private Cluster[] clusters;
  128.    
  129.     void initialize(int _nbClusters, int _dim) {
  130.         dim = new double[_dim];
  131.         /*
  132.          *
  133.          * FONCTION SANS AUCUN SENS
  134.          */
  135.     }
  136.    
  137.     public Revisions() {
  138.         Cluster cluster = new Cluster();
  139.         cluster.add(new Data(2.4, 8.4, 1.3));
  140.         cluster.add(new Data(4.6, 6.8, 2.7));
  141.         cluster.add(new Data(8.1, 7.4, 4.4));
  142.         cluster.add(new Data(1.6, 2.3, 7.3));
  143.        
  144.         cluster.centralize();
  145.     }
  146.    
  147.    
  148.    
  149.    
  150.    
  151.    
  152.     public static void main(String[] args) {
  153.         new Revisions();
  154.     }
  155.  
  156. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement