knn算法的图形解释 (knn算法视频)

球树搜素法是能够解决KD树缺点的另一种搜寻方法。球树搜素法是构造一个超球体的过程。其关键是合理的选择选择样本点计算距离的。下面我就用最通俗的语言给大家描述一下构造算法步骤:(构造的球树搜索算法是)

  1. 构建一个超球体,这个球体必须包含所有的样本点。那么这个球体的半径就必须是最远两个点之间的距离的一半作为半径,连线的中点记为圆心Q。那么这个球体就可以包含所有的样本点。
  2. 找出与圆心Q的最远样本点P1,接着再找出与P1距离最远的样本点P2。分别以p1和p2为族心,分别把其他样本点放入距离这两个最近的一个族里。那么就构成两个数据块。
  3. 重复以上步骤,直到无法构成球体为止。
  4. 把每次构成超球体的样本数作为二叉树绘制出来即可。

搜索算法步骤:

  1. 同样第一步找到能给包含未知样本点的叶子节点,计算未知节点与其他节点的距离,并保存最近距离为d。
  2. 返回父节点下的另一个叶子节点,计算未知节点与该叶子节点的圆心距离即为D。记下该叶子节点的半径为r。
  3. 如果D>d+r,那么无法从该叶子节点下找到更近的样本点。如果D<d+r,则需要返回上一层父节点所对应的球体,从球体中寻找更近的点。
  4. 重复2,3步骤,直到回流至根节点,最终搜索到与未知样本点最近的样本点。

以上便是球树搜索算法的步骤,构建好二叉树后就可以找出与未知样本最邻近的K个已知点了。

接下来就是python代码的实现了,python的sklearn库中提供了KNN算法的预测与分类功能。

from sklearn import neighbors
KNN_回归=neighbors.KNeighborsClassifier()
KNN_预测=neighbors.KNeighborsRegressor()
KNN.fit(X,y)#训练
KNN.predict(X_test)#预测

接下来是参数设定:

n_neighbors:邻近样本数,默认为5.

weighs:投票权重,默认无论近远权重相同;如果设置为‘distance’则距离未知样本越近权重越大,越远权重越小。

algorithm:选择搜索算法,‘ball_tree’表示球树搜索算法;‘kd_tree’表示为KD树搜索算法;‘brute’统计搜索法。默认是“auto”智能选择。

metric:计算距离的指标,默认是闵可夫斯基距离。

p:当mertic为默认时,p=1为曼哈顿距离。p=2时为欧式距离,默认为欧式距离。

这两篇便是KNN的原理以及代码实现,例子就不展示了。只要有点变成基础都可以自己使用。

每日日语语法:

「ね」语气助词放在句末,表示向对方进行确认或者希望对方赞同。

比如:いもうと は かわいい てすね?

意思:难道妹妹不可爱吗?