knn 分类Helen数据集
2021/4/26 10:25:52
本文主要是介绍knn 分类Helen数据集,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
- knn流程
- 数据读取
- 数据归一化
- knn实现
- 数据分析
以数据的前两项特征对数据进行划分得到以下散点图:
- 具体实现
import numpy as np def read_data(path): lines=path.readlines() data=[] label=[] for line in lines: line=line.split() data.append(list(map(float,line[0:3]))) if line[-1]=='didntLike': label.append(3) elif line[-1]=='largeDoses': label.append(2) else: label.append(1) return np.array(data),np.array(label) def normalized(data): mindata=data.min(0) def standdata(traindata): meandata0 = np.mean(traindata,axis=0) stddata0 = np.std(traindata,axis=0) length = traindata.shape[0] meandata1 = np.tile(meandata0,(length,1)) stddata1 = np.tile(stddata0,(length,1)) standdata = (traindata-meandata1)/stddata1 return standdata, meandata0, stddata0 def autoNorm(x): """ 最大值最小值归一化 :param x: 需要归一化的特征向量 :return: 新的数组、极差、最小值 """ minVals=x.min(axis=0) maxVals=x.max(axis=0) ranges=maxVals-minVals x_new=(x-minVals)/ranges # 广播 return x_new,ranges,minVals def knn(traindata,testdata,label,k): distance=np.sqrt(np.sum((traindata-testdata)**2,axis=1)) p=distance.argsort() vote = [0, 0, 0] for i in range(k): vote[label[p[i]]-1]=vote[label[p[i]]-1]+1 return vote.index(max(vote))+1 def testknn(data,label,k): # per=np.random.permutation(np.shape(data)[0]) # new_data=data[per,:] # new_label=label[per] train_data=data[0:int(np.shape(data)[0]*0.9)] train_label=label[0:int(np.shape(data)[0]*0.9)] test_data=data[int(np.shape(data)[0]*0.9):] test_label = label[int(np.shape(data)[0] * 0.9):] true_label=0 for i in range(len(test_label)): result_a=knn(train_data,test_data[i],train_label,k) if result_a==test_label[i]: true_label=true_label+1 print(result_a,test_label[i]) acc=float(true_label)/len(test_data) return acc if __name__ == '__main__': path='Knn_Helen' true_label=["smallDoses",'largeDoses','didntLike'] file=open(path,'r') print('=======') data,label=read_data(file) a,b,c=autoNorm(data) acc=testknn(a,label,25) print(acc)
准确率能达到95%以上
这篇关于knn 分类Helen数据集的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)