【算法定义】
K最近邻(K-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似的样本中的大多数属于某一个类别,则该样本也属于这个类别。
【算法图示】
有两个水果,一个是橙子,一个是柚子,让机器判断哪个是橙子,哪个是柚子?一般而言,柚子更大,更红。抽样了一些数据,描述如下:
现在加入一个未知的水果,如何判断这个水果是橙子还是柚子。找到它的三个邻居,橙子比柚子多,因此这个水果很有可能是橙子。
从上图可以知道,水果A和B比较相似。下面来度量它们有多像。要计算两点间的距离,可以使用毕达哥拉斯公式
例如,A和B的距离如下
【程序设计】
/*********************************************************************************
*Function: knn_algorithm
*Parameter1: 参数1:计算的数组
*Parameter2: 参数2:数组的长度
*Description: k最近邻算法,传入参数1数组,然后传入参数2数组长度进行必达哥拉斯公式
的计算,数组数据的平方和然后再开根号。
*Output: temp 公式计算的结果
**********************************************************************************/
int16_t knn_algorithm(int16_t *num,int16_t length)
{
uint8_t i;
int16_t temp;
temp = 0;
for(i = 0; i < length; i++)
{
temp+=(num[i]*num[i]);
}
temp = sqrt(temp);
return temp;
}