實現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