永发信息网

如何用python实现k近邻算法

答案:2  悬赏:60  手机版
解决时间 2021-12-30 08:08
  • 提问者网友:两耳就是菩提
  • 2021-12-29 11:06
如何用python实现k近邻算法
最佳答案
  • 五星知识达人网友:荒野風
  • 2021-12-29 12:09
import numpy as np

def read_data(filename):
'''读取文本数据,格式:特征1 特征2 …… 类别'''
f=open(filename,'rt')
row_list=f.readlines() #以每行作为列表
f.close()
data_array=[]
labels_vector=[]
while True:
if not row_list:
break
row=row_list.pop(0).strip().split('\t') #去除换行号,分割制表符
temp_data_row=[float(a) for a in row[:-1]] #将字符型转换为浮点型
data_array.append(temp_data_row) #取特征值
labels_vector.append(row[-1]) #取最后一个作为类别标签
return np.array(data_array),np.array(labels_vector)

def classify(test_data,dataset,labels,k):
'''分类'''
diff_dis_array=test_data-dataset #使用numpy的broadcasting
dis_array=(np.add.reduce(diff_dis_array**2,axis=-1))**0.5 #求距离
dis_array_index=np.argsort(dis_array) #升序距离的索引
class_count={}
for i in range(k):
temp_label=labels[dis_array_index[i]]
class_count[temp_label]=class_count.get(temp_label,0)+1 #获取类别及其次数的字典
sorted_class_count=sorted(class_count.items(), key=lambda item:item[1],reverse=True) #字典的值按降序排列
return sorted_class_count[0][0] #返回元组列表的[0][0]

def normalize(dataset):
'''数据归一化'''
return (dataset-dataset.min(0))/(dataset.max(0)-dataset.min(0))

k=3 #近邻数
test_data=[0,0] #待分类数据
data,labels=read_data('testdata.txt')
print('数据集:\n',data)
print('标签集:\n',labels)
result=classify(test_data,normalize(data),labels,k)
print('分类结果:',result)
全部回答
  • 1楼网友:怀裏藏嬌
  • 2021-12-29 13:44
这东西太简单了埃不过你要有些算法基矗如果实在是没有,就拿现成的手写识别算法。 界面这东西,基本上刚刚入门的gui设计都会有画图这样的例子,拿过来略略改一下就要可以用。 没有调查过。如果我去设计会考虑1.笔画,2.拐点, 3.曲度 4.分段长度...
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯