从0开始的机器学习——knn算法篇(1)

在慕课网学习的基本内容做学习总结。

knn算法——即k最近邻算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路非常直观:如果一个样本特征空间中最相似(即特种空间中最邻近)的样本的大多数属于某一类别,则该样本也属于这个类别。该方法在定类决策只依据最近邻的一个或者几个样本的类别来决定待分样本的所属类别。——百度百科

knn的算法过程:

设定X_train是一个数据集,里面有一组数据。x_train是其中的一个数据点。

import numpy  as np

from math import sqrt  //调用了math库中的开平方

distances = [ ]  //存放两点之间的距离

for x_train in  X_train:

     d = sqrt(np.num((x_train - x)**2))  //计算两点之间的欧拉距离

     distances.appden(d)  //存入计算出来的距离

简洁版算法过程:

distances = [sqrt(np.num((x_train - x)**2)) ]

for x_train in X_train

获得了距离之后调用numpy里面的argsort方法,argsort可以给数组中的数值排序,返回数组中数据的索引值。

nearest = np.argsort(distances)

设 :k = 6

topK_y = [y_train[i] for i in nearest[:k]] //计算前k个数据  y_train是另一组代表结果属性的数据,比如[1,1,1,0,1,0,1,1]具体语义结合语境,比如1代表零件质量好,0代表零件不合格等

from collection import Counter

Counter(topK_y)  //返回计数值 比如Counter({0:1,1:5}),即数组中每个数值的数据和该数据对应的个数

votes = Counter(topK_y)

votes.most_common(1) //取数值排的最靠前的 如果是2就是前两个多的 (适用于多维,大概)

predict_y = votes.most_common(1)[0][0] //获得x可能的预测值,比如1或者0

 

把这些在Anaconda上面写的代码在Pycharm里面写的话,算法过程写为一个函数:

import numpy as np

from math import sqrt

from collections import Counter

def KNN_classify(k,X_train,y_train):

//增加几个 断言 保证用户输入数据的正确性

  assert 1 <= k <= X_train.shape[0],

  assert X_train.shape[0] == y_train.shape[0],\

  assert X_train.shape[1] == x.shape[0],\

 

  distances = [sqrt(np.num((x_train - x)**2))

                      for x_train in X_train]

  nearest = np.argsort(distances)

  topK_y = [y_train[i] for i in nearest[:k]]

  votes = Counter(topK_y)

 

return votes.most_common(1)[0][0]

posted @ 2020-07-14 16:53  菜鸟成长手札  阅读(271)  评论(0)    收藏  举报