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与机器学习菜鸡一枚,望各位大神多多指正,口下留情。

你可能感兴趣的:(R)