* 1. 首先计算出所有的临近距离值
* 2. 对临近值进行排序
* 3. 选出临近值最小的K个数
* 4. 投票选出结果
import java.util.Arrays;
/**
* KNN又名临近算法
* 实现步骤:
* 1. 首先计算出所有的临近距离值
* 2. 对临近值进行排序
* 3. 选出临近值最小的K个数
* 4. 投票选出结果
*/
public class KNN {
private static double[][] DATA={
{ 5.1, 3.5, 1.4, 0.2, 0 },
{ 4.9, 3.0, 1.4, 0.2, 0 }, { 4.7, 3.2, 1.3, 0.2, 0 },
{ 4.6, 3.1, 1.5, 0.2, 0 }, { 5.0, 3.6, 1.4, 0.2, 0 },
{ 7.0, 3.2, 4.7, 1.4, 1 }, { 6.4, 3.2, 4.5, 1.5, 1 },
//{ 6.9, 3.1, 4.9, 1.5, 1 }, //测试数据
{ 5.5, 2.3, 4.0, 1.3, 1 },
{ 6.5, 2.8, 4.6, 1.5, 1 }, { 5.7, 2.8, 4.5, 1.3, 1 },
{ 6.5, 3.0, 5.8, 2.2, 2 }, { 7.6, 3.0, 6.6, 2.1, 2 },
{ 4.9, 2.5, 4.5, 1.7, 2 }, { 7.3, 2.9, 6.3, 1.8, 2 },
{ 6.7, 2.5, 5.8, 1.8, 2 }, { 6.9, 3.1, 5.1, 2.3, 2 }
};
private static int K = 6;
private static int CLASSFIY=3;
public static void main(String[] args) {
// 待求解数组
double distince[] = {6.9, 3.1, 4.9, 1.5, 1};
KNN knn = new KNN();
//求出求解的分类与二维数组间元素的临近距离
double[] questionDistinces = new double[DATA.length];
for(int i=0;i0){
for(int i=0;iparaDistinceArray[j]){
double temp = paraDistinceArray[i];
paraDistinceArray[i] = paraDistinceArray[j];
paraDistinceArray[j] = temp;
}
}
}
}
return paraDistinceArray;
}
//获取临近值数组中,从近到远获取k个值为新数组
public double[] paraseKDistince(double[] sortedDistinceArray,String sortTypeStr,int k){
double[] kDistince = new double[k];
if(SortType.ASC.equals(sortTypeStr)){
for(int i=0;i=0;j--){
if(distinceArray[i] tempMaximalVotes) {
tempMaximalVotes = votes[i];
tempMajority = i;
}
}
System.out.println("投票数最高:"+tempMaximalVotes+",分类是:"+tempMajority);
return tempMajority;
}
}
package com.kNN;
public class SortType {
public static final String DES = "des";
public static final String ASC = "asc";
}
运算结果截图: