讓 R 來預測 iris 的花種
鳶尾花是一種漂亮且多彩的花,其種類也非常豐富;iris 則是 R 裡面眾多預設資料集的其中一組,iris 的資料內容分別包含了三種鳶尾花,共一百五十朵的花萼及花瓣的長度與寬度,其中這 150 筆鳶尾花長與寬的數據資料包含 setosa、versicolor 和 virginica 各有 50 筆;接下來會把資料分成兩堆(各占總數的 75% 及 25%),再利用 KNN 演算法來計算預測其中 25% 的花,分別是屬於哪一種。
主要是根據花萼及花瓣的長寬數據來算出所有 25% 中要預測的那一朵花與 75% 每朵花之間的距離,並取最近的 K 個來多數決那一朵的花種;是分類技術中最簡單的一種,不須建立模型。
首先來看 iris 的資料內容,先使用 data 載入後再利用各種函式來觀察整個資料的型態,由此來了解 iris 的資料內容結構,然後再使用 sample 函式來亂數取樣本號碼。(取 3/4 作為訓練資料集)
下圖可看出 iris 資料集的詳細資訊。
sample 所取出的 3/4 資料數為 112 筆。(這裡取出的是編號號碼)
接著來設定 knn 所需要的訓練資料集和測試資料集,還有載入 class 套件才能使用 knn 函式,並設定變數將資料集的長寬數據和花種答案分開。(Y.test 是最後拿來和 knn 輸出的結果做準確率的計算)
開始 knn 計算,設定 k=3;可以另外做 k=1 到 10 的計算,並比較後面所計算的準確率。
單獨執行 KNN_prediction 的結果,knn 已經根據訓練資料集和 X.test 計算出預測的花種。(因為已經有 Y.test 這個答案,所以就可以來計算到底準確率有多高)
為了方便觀察,利用 table 把資料做成一個表格,並使用 print 輸出。
最後則是把所有整理好的資訊,用 print 及 cat 執行輸出。
一開始我們是假裝不知道剩下 25% 的花的種類,而把花萼和花瓣的長寬數據,丟給 knn 來計算分類出花的種類;最後就準確率來看只要 112 筆 iris 的數據資料,就能夠把剩下 25% 共 38 筆未知花種的數據做一個準確率超過 94% 的分類預測!(KNN,k=3)