實現DecisionTree專題一:對6000多個屬性的迷惑與解鈴
起步做決策樹分類器的作業,第一步當然是讀取文件,取得所有行的數據;但是自己就在這停住了,總想
著應該設計一個Sample類,這個類有6000多個屬性,那么豈不是要定義6000多個變量?百思不得其解呀。
后來問楊惠,楊惠說,定義一個數組就可以了,每次只需要找出熵最大的那個屬性就可以。恍然大悟的感
覺!
自己可能之前一直在看UML的書,UML書上說一般先分析系統將會有哪些類,然后分析這些類的屬性和方法
等,同時要遵守單一職責原則(SRP)、開放-封閉原則(OCP)等;所以,自己現在很自然的想到要去分
析實現這個決策樹將會有什么類,然后Sample類就這樣冒出來了。
其實,UML只適合用于分析工程項目,并不適合用于分析算法類的程序,這個Bob大叔的《uml for java
pro》書上也提到了。
首先分析要解決什么事情,需要每一步做什么,再去考慮怎么寫代碼才是正確的。例如,構建
decisiontree的第一步是求各個屬性的熵(第二步是取熵的最大值),那么就想如何去求各個屬性的熵就
ok!而不是看著數據空想構造什么Sample類。因為decisiontree是以屬性為基礎的,無需構造樣本類。
原以為到此,自己已經弄明白了;學習和總結了數組與ArrayList的內容之后,才突然發現,原來自己的
迷惑源于數組與ArrayList的迷惑!自己的語言功底太差了!就算是要定義一個樣本類Sample類,這個類
有6000多個屬性,也只需要定義一個屬性數組Attributes[]或者一個ArrayList attributes就ok了!這正
是數組的作用!!看了良葛格的《java jdk5 學習筆記》的“數組”那章才忽然明白過來了!
補充內容:
1.為什么需要數組?
(《java jdk5.0 學習筆記》良葛格 http://book.csdn.net/bookfiles/135/1001354617.shtml)
例如,現在要整理全班的Java小考成績,您希望寫個小程序,全班共有40名學生,所以必須有40個變量來
存儲學生的成績。現在問題來了,根據第3章學過的變量定義方式,難道要定義40個名稱不同的變量來存
儲學生的成績數據嗎?
當然不必這么麻煩,Java提供“數組”(Array)讓您可以定義一個以“索引”(Index)作為識別的數據結構
。在Java中,可以這么定義一個數組并初始數組內容:
int[] score = {90, 85, 55, 94, 77};
2.ArrayList可以置入任意數據類型,包括數組;例如,可以置入String[]類型的對象。因為ArrayList本
身就是數組,在ArrayList中置入數組,也就相當于一個二維數組。
在java中,數組也是對象,二維數組的實際是連續存放一維數組對象的各個reference。
受啟發的資料:
ArrayList<String[]>如何導出為String[][]?
http://www.mysdn.cn/Java/J2SEjichulei/20060914/9172.html
《java jdk5.0 學習筆記》良葛格 第五章 數組
?http://book.csdn.net/bookfiles/135/1001354617.shtml