1. 程式人生 > >R語言基於KNN演算法實現蘑菇毒性識別

R語言基於KNN演算法實現蘑菇毒性識別

R語言:基於KNN演算法實現蘑菇毒性識別

平臺:Ubuntu16.04LTS   RStudio

資料集介紹:

trainData.txt  訓練資料集。包含4339個樣本(行),每個樣本共6個特徵(列),其中前5列為蘑菇樣本的特徵值,第6列為蘑菇的毒性屬性,0表示無毒,1表示有毒。(74個樣本有毒,4265個樣本無毒)

testData.txt:  測試資料集。包含500個帶測試的樣本(行),每個樣本共5個特徵值(列)。

要求:利用測試集訓練模型,識別出測試集中的蘑菇毒性。

程式碼:

library(class) #含knn()函式
mushroom_trainData<-read.table("/home/huhao/data/trainData.txt",header = FALSE,sep = ",")#匯入訓練集資料,儲存在資料集中
mushroom_testData<-read.table("/home/huhao/data/testData.txt",header = FALSE,sep = ",")#匯入測試集資料,儲存在資料集中
#自建函式,將資料標準化(歸一化),即:值域為0到1
normalize<-function(x)
{
   return((x-min(x))/(max(x)-min(x)))
}

mushroom_train_n<-as.data.frame(lapply(mushroom_trainData[1:5],normalize))#標準化訓練集資料
mushroom_test_n<-as.data.frame(lapply(mushroom_testData[1:5],normalize))#標準化測試集資料
mushroom_train<-mushroom_train_n[1:148,]#選取已標準化的訓練集資料,此步驟還有很多工作可做。此處所採用暴力方法僅為平衡資料!!
mushroom_test<-mushroom_test_n[1:500,]#選取測試資料
mushroom_train_labels<-mushroom_trainData[1:148,6]#訓練集樣本的標籤(毒性)

pre_mushroom<-knn(train = mushroom_train,test = mushroom_test,cl =mushroom_train_labels,k=3)#knn訓練模型
pre_mushroom#展示結果
table(pre_mushroom)#檢視結果的毒蘑菇數量

注:資料的平衡性對預測結果有較大影響,需重視!

另:資料選取時可對不同的特徵給予不同的權重,對提高分類正確率有幫助!

        採用暴力抽取訓練集資料方法,在此例中正確率僅80%左右,待改進

PS:    R與機器學習菜雞一枚,望各位大神多多指正,口下留情。