首页 > 代码库 > 关于今天学习的第一个算法——k-近邻算法
关于今天学习的第一个算法——k-近邻算法
Def classify0(inX,data_set,labels,k):
Data_set_size=data_set.shape[0]
//.shape[0]表示获取data_set有多少行,.shape[1]即获取列数
//另外注意shape后用中括号
Diff_mat=tile(inX,(data_size,1))-data_size
//tile可以把一个数组进行扩展,上面的代码即把inX里的数组复制data_size个,反正不好表述,可以自行百度。使用这个就省得去用for循环了。
Sq_diff_mat=dif_mat**2
Sq_distances=sq_diff_mat.sum(axis=1)
//axis=1即表示把每一行里的元素相加
//axis=0即表示把每一列里的元素相加(默认)
Distance=sq_distance**0.5
Sorted_dist_indicies=distance.argsort()
//对距离排序从小到大排序,但把序号存放在Sorted_dist_indicies中
Class_count={}
//建立一个字典,存放k个预测标签的数量
For i in range(k):
Vote_label=labels[sorted_dist_indicies[i]]
Class_count[vote_label]=class_count.get(vote_label,0)+1
//.get方法即返回vote_label 这个key的value,0是指如果字典里没有这个key,就添加这个key并赋值为0.
Sorted_class_count=sorted(class_count.items(),key=operator.itemgetter(1),reverse=True)
//本人使用的是python3,因此这里用的items,如果是python2,则要用.iteritems(),key=operator.itemgetter(1),表示对value进行排序,reverse=True表示降序排列,另外上面这段代码返回的是一个元素为元组(tuple)的列表(list)
Return Sorted_class_count[0][0]
//返回预测的标签
关于今天学习的第一个算法——k-近邻算法