繼續說說昨天的 1R
如果說某一條資料裡的某個屬性值不見時,會造成 1R 無法使用,因為我們會不知道要它是啥,也就沒辦法拿它來分類。
其實就跟很多人的直覺一樣,直接定義一個新的把它補起來就好了 w
假設某條資料的 temp 是缺失的,我們可以直接把 temp 的值定義成 hot, mid, cool 及 missing。
簡單方便有效,如此一來還是可以做 1R XD
使用 1R 時的另一個問題是數值屬性(就是有數字的東西)的處理,顯然我們不可能把不同的數值(numeric)都當成一個屬性值(nominal),這樣會造成分類太瑣碎而且會讓 1R 的結果失準。
(想像所有的屬性值分支都只有一個資料,那不是會讓 error rate = 0 嗎,完全沒有錯誤肯定不合理啊 O_O )
Btw,numeric 和 nominal 這兩個英文我不知道怎麼用中文表達,你可以想成 numeric 就是會變、不固定的數字,而 nominal 是一個不會變的東西,好像一個標籤一樣。
我們可以透過一個簡單的方式將 numeric 轉換成 nominal 的,以下說明如何轉換:
上面的 weather data 其實有另一個版本,是把 temp 從 nominal 換成 numerical 的(就是直接換成幾度啦),完整的我就不放了,我們把數值由小排到大,並附上他的分類,大概長這樣:
接著我們可以在 class 轉換的地方做一個分界,注意如果有相同數字卻有不同分類時,我們取上界:
yes | no | yes yes yes | no no yes | yes yes | no | yes yes | no
然後給每個分界點上左右平均值,會得到:
64.5, 66.5, 70.5, 73.5, 77.5, 80.5, 84
接著我們其實就可以拿這些數值作為斷點,以區間判斷要落入什麼種類(yes or no)。
然而有些人可能會覺得,這樣斷點也未免太多了吧,看起來有點煩,此時我們可以用種類出現的數量來做更大略的斷點,在這邊我們設定只要一個種類出現了三次就設定斷點,如果設斷點的下一個種類和先前出現三次的種類相同就順便包進去,於是會得到:
yes no yes yes yes | no no yes yes yes | no yes yes no
由於前面兩個區間的多數都是 yes,我們可以再懶一點:
yes no yes yes yes no no yes yes yes | no yes yes no
這樣就只剩下一個斷點,數值為 77.5,於是我們在判斷時可以用:
temp. <= 77.5 -> yes
temp. > 77.5 -> no
這樣的規則來分類。
這個斷點的設置呢,在實際使用的時候可以多多嘗試,使用各種不同的斷點規則並測試看看他的精准度,然後挑選一個最好的結果。
最後,如果數字有所缺失,一樣另外給他一個像 missing 這樣的值就好了,斷點的判斷只用在有數字的時候,沒數字就通通丟 missing 吧XD