首页 > 代码库 > 关于今天学习的第一个算法——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 这个keyvalue0是指如果字典里没有这个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-近邻算法