Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
pl:miw:miw08_rbs_ml:program [2008/06/16 11:48]
miw
pl:miw:miw08_rbs_ml:program [2008/06/16 13:39]
miw
Linia 1: Linia 1:
-<code = "​java">​ 
-package MachineLearning;​ 
  
-import java.util.*;​ 
- 
-/** 
- * Klasa z której program rozpoczyna swoje wykonywanie 
- * @author Angello 
- * 
- */ 
-public class Program { 
- 
- /** 
- * Początek programu ​ 
- * @param args 
- */ 
- public static void main(String[] args) { 
- test(); 
- } 
- 
- /** 
- * Tworzy tablicę zawierająca wszyskie możliwe przypadki 
- * @return 
- */ 
- public static Object[][] create() 
- { 
-  
- Object[][] learning = new Object[2016][];​ 
- Integer index = -1; 
- Integer day; 
- Integer oper; 
- Integer month; 
- for (Integer i = 0; i < 7; i++) // Dni 
- { 
- day = i; 
- for (Integer j = 0; j < 24; j++) // Godziny 
- { 
- oper = j; 
- for (Integer k = 0; k < 12; k++) // Miesiące 
- { 
- month = k; 
- learning[++index] = new Object[] { day, oper, month, 0 }; 
- learning[index][3] = CountTemperature(learning[index]);​ 
- } 
- } 
- } 
- return learning; 
- } 
-  
- /** 
- * Zbudowanie drzewa i sprawdzenie działanie drzewa dla pozostałych przykładów 
- * @param learningLength 
- * @return 
- */ 
- public static int makeOneTest(Integer learningLength,​ boolean c45) 
- { 
- Integer randValue; 
- Object[][] everything; 
- Object[][] testing; 
- Object[][] learning; 
- DecisionTree decisionTree;​ 
- Integer goodClassified = 0; 
-  
- everything = create();//​= Common.BinaryDeSerialize("​Thermostat_2016.bin"​);​ 
- String[] attributeNames = new String[] { "​Day",​ "​Hour",​ "​Month"​ }; 
- 
- Random rand = new Random(); 
- ArrayList<​Integer>​ learningIndexes = new ArrayList<​Integer>​();​ 
- ArrayList<​Integer>​ testingIndexes = new ArrayList<​Integer>​();​ 
- for (Integer i = 0; i < learningLength;​ i++) 
- { 
- randValue = rand.nextInt(2015);​ 
- if (!learningIndexes.contains(randValue)) 
- learningIndexes.add(randValue);​ 
- else 
- --i; 
- } 
- Collections.sort(learningIndexes);​ 
- 
- for (Integer i = 0; i < 2016; i++) 
- { 
- if (!learningIndexes.contains(i)) 
- testingIndexes.add(i);​ 
- } 
- 
- testing = indexesToArray(everything,​ testingIndexes);​ 
- 
- learning = indexesToArray(everything,​ learningIndexes);​ 
- 
- decisionTree = new DecisionTree();​ 
- decisionTree.initialize(learning,​ attributeNames,​ c45); 
- 
- for (Object[] row : testing) 
- { 
- if (decisionTree.findCategory(row) == (Integer)row[3]) 
- goodClassified++;​ 
- } 
- System.out.println(goodClassified);​ 
- return goodClassified;​ 
- } 
- 
- /** 
- * Tworzy tablicę Przykładów z podanej listy indeksów oraz tablicy wszystkich przykładów ​ 
- * @param everything 
- * @param indexesList 
- * @return 
- */ 
- private static Object[][] indexesToArray(Object[][] everything, ArrayList<​Integer>​ indexesList) 
- { 
- ArrayList<​Object[]>​ testingList = new ArrayList<​Object[]>​();​ 
- for (Integer index : indexesList) 
- { 
- testingList.add(everything[index]);​ 
- } 
- Object[][] returnTable = new Object[indexesList.size()][everything[0].length];​ 
- testingList.toArray(returnTable);​ 
- return returnTable;​ 
- } 
-  
- /** 
- * Oblicza jaka powinna być nastawa termostatu przy przedstawionych atrybutach (example) 
- * @param example Zbiór atrybutów 
- * @return 
- */ 
- public static int CountTemperature(Object[] example) 
- { 
- boolean workday = true; 
- if (Days.saturday.ordinal() == (Integer)example[0] || Days.sunday.ordinal() == (Integer)example[0]) 
- workday = false; 
- 
- boolean oper = false; 
- if ((Integer)example[1] >= 9 && (Integer)example[1] < 17) 
- oper = true; 
- boolean business = false; 
- if (workday && oper) 
- business = true; 
- 
- Thermostat temperature = Thermostat.t14;​ 
- switch ((Integer)example[2]) 
- { 
- case 11: 
- case 0: 
- case 1: 
- if (business) 
- temperature = Thermostat.t18;​ 
- else 
- temperature = Thermostat.t14;​ 
- break; 
- case 2: 
- case 3: 
- case 4: 
- if (business) 
- temperature = Thermostat.t20;​ 
- else 
- temperature = Thermostat.t15;​ 
- 
- break; 
- case 5: 
- case 6: 
- case 7: 
- if (business) 
- temperature = Thermostat.t24;​ 
- else 
- temperature = Thermostat.t27;​ 
- break; 
- case 8: 
- case 9: 
- case 10: 
- if (business) 
- temperature = Thermostat.t20;​ 
- else 
- temperature = Thermostat.t16;​ 
- break; 
- } 
- 
- return temperature.ordinal();​ 
- } 
- 
- /** 
- * Wykonuje 20 testów i wypisuje statystyki 
- */ 
- private static void test() 
- { 
- int learningLength = 150; 
- ArrayList<​Integer>​ list = new ArrayList<​Integer>​();​ 
- Integer sum = 0; 
- for (int i = 0; i < 20; i++) { 
- list.add(makeOneTest(learningLength,​ true)); 
- } 
- for (Integer var : list) 
- { 
- sum += var; 
- } 
- double percent = (double) sum / (double)(2016 - 150) / (double)list.size();​ 
- Collections.sort(list);​ 
-  
- ArrayList<​Integer>​ listc45 = new ArrayList<​Integer>​();​ 
- Integer sumc45 = 0; 
- for (int i = 0; i < 20; i++) { 
- listc45.add(makeOneTest(learningLength,​ false)); 
- } 
- for (Integer var : listc45) 
- { 
- sumc45 += var; 
- } 
- double percentc45 = (double) sumc45 / (double)(2016 - 150) / (double)listc45.size();​ 
- Collections.sort(listc45);​ 
-  
- System.out.println("​Średnia skuteczność dla ID3: "​+percent);​ 
- System.out.println("​Najgorsza:​ "​+list.get(0));​ 
- System.out.println("​Najlepsza:​ "​+list.get(listc45.size()-1));​ 
-  
- System.out.println("​Średnia skuteczność dla C4.5: "​+percentc45);​ 
- System.out.println("​Najgorsza:​ "​+listc45.get(0));​ 
- System.out.println("​Najlepsza:​ "​+listc45.get(listc45.size()-1));​ 
-  
- } 
-} 
- 
-</​code>​ 
pl/miw/miw08_rbs_ml/program.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0