實現(xiàn)DecisionTree專題一:對6000多個屬性的迷惑與解鈴

起步做決策樹分類器的作業(yè),第一步當(dāng)然是讀取文件,取得所有行的數(shù)據(jù);但是自己就在這停住了,總想

著應(yīng)該設(shè)計一個Sample類,這個類有6000多個屬性,那么豈不是要定義6000多個變量?百思不得其解呀。

后來問楊惠,楊惠說,定義一個數(shù)組就可以了,每次只需要找出熵最大的那個屬性就可以。恍然大悟的感

覺!

自己可能之前一直在看UML的書,UML書上說一般先分析系統(tǒng)將會有哪些類,然后分析這些類的屬性和方法

等,同時要遵守單一職責(zé)原則(SRP)、開放-封閉原則(OCP)等;所以,自己現(xiàn)在很自然的想到要去分

析實現(xiàn)這個決策樹將會有什么類,然后Sample類就這樣冒出來了。

其實,UML只適合用于分析工程項目,并不適合用于分析算法類的程序,這個Bob大叔的《uml for java

pro》書上也提到了。

首先分析要解決什么事情,需要每一步做什么,再去考慮怎么寫代碼才是正確的。例如,構(gòu)建

decisiontree的第一步是求各個屬性的熵(第二步是取熵的最大值),那么就想如何去求各個屬性的熵就

ok!而不是看著數(shù)據(jù)空想構(gòu)造什么Sample類。因為decisiontree是以屬性為基礎(chǔ)的,無需構(gòu)造樣本類。

原以為到此,自己已經(jīng)弄明白了;學(xué)習(xí)和總結(jié)了數(shù)組與ArrayList的內(nèi)容之后,才突然發(fā)現(xiàn),原來自己的

迷惑源于數(shù)組與ArrayList的迷惑!自己的語言功底太差了!就算是要定義一個樣本類Sample類,這個類

有6000多個屬性,也只需要定義一個屬性數(shù)組Attributes[]或者一個ArrayList attributes就ok了!這正

是數(shù)組的作用!!看了良葛格的《java jdk5 學(xué)習(xí)筆記》的“數(shù)組”那章才忽然明白過來了!


補充內(nèi)容:
1.為什么需要數(shù)組?
(《java jdk5.0 學(xué)習(xí)筆記》良葛格 http://book.csdn.net/bookfiles/135/1001354617.shtml)
例如,現(xiàn)在要整理全班的Java小考成績,您希望寫個小程序,全班共有40名學(xué)生,所以必須有40個變量來

存儲學(xué)生的成績。現(xiàn)在問題來了,根據(jù)第3章學(xué)過的變量定義方式,難道要定義40個名稱不同的變量來存

儲學(xué)生的成績數(shù)據(jù)嗎?

當(dāng)然不必這么麻煩,Java提供“數(shù)組”(Array)讓您可以定義一個以“索引”(Index)作為識別的數(shù)據(jù)結(jié)構(gòu)

。在Java中,可以這么定義一個數(shù)組并初始數(shù)組內(nèi)容:

int[] score = {90, 85, 55, 94, 77};


2.ArrayList可以置入任意數(shù)據(jù)類型,包括數(shù)組;例如,可以置入String[]類型的對象。因為ArrayList本

身就是數(shù)組,在ArrayList中置入數(shù)組,也就相當(dāng)于一個二維數(shù)組。

在java中,數(shù)組也是對象,二維數(shù)組的實際是連續(xù)存放一維數(shù)組對象的各個reference。



受啟發(fā)的資料:
ArrayList<String[]>如何導(dǎo)出為String[][]?
http://www.mysdn.cn/Java/J2SEjichulei/20060914/9172.html

《java jdk5.0 學(xué)習(xí)筆記》良葛格 第五章 數(shù)組
?http://book.csdn.net/bookfiles/135/1001354617.shtml