package com.haolidong.kNN;
import java.util.Comparator;
/**
*
* @author haolidong
* @Description: [该类主要用于对距离信息的index进行自定义的排序(从大到小)]
*/
public class ComparatorImpl implements Comparator<Distances>{
@Override
public int compare(Distances arg0, Distances arg1) {
// TODO Auto-generated method stub
double d0=arg0.getDistances();
double d1=arg1.getDistances();
if(d0>d1){
return 1;
}
else if(d0<d1){
return -1;
}
else{
return 0;
}
}
}
package com.haolidong.kNN;
/**
*
* @author haolidong
* @Description: [该类主要用于保存KNN的距离信息以及index]
*/
public class Distances {
double distances;
public Distances()
{
distances=0.0;
sortedDistIndicies=0;
}
public Distances(double distances, int sortedDistIndicies) {
super();
this.distances = distances;
this.sortedDistIndicies = sortedDistIndicies;
}
int sortedDistIndicies;
public double getDistances() {
return distances;
}
public void setDistances(double distances) {
this.distances = distances;
}
public int getSortedDistIndicies() {
return sortedDistIndicies;
}
public void setSortedDistIndicies(int sortedDistIndicies) {
this.sortedDistIndicies = sortedDistIndicies;
}
}
package com.haolidong.kNN;
import java.util.ArrayList;
/**
* @author haolidong
* @Description: [该类主要用于保存信息矩阵以及矩阵标签]
*/
public class ReturnML {
public ArrayList<ArrayList<Double>> AR;
public ArrayList<String> AS;
public ReturnML() {
// TODO Auto-generated constructor stub
AR = new ArrayList<ArrayList<Double>>();
AS = new ArrayList<String>();
}
}
package com.haolidong.kNN;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map.Entry;
import java.util.Set;
public class KNN {
public static ReturnML rml = new ReturnML();
/**
* @param args
* @throws IOException
* @author haolidong
* @Description: [主函数主要对于三个案例进行测试,分别为简单分类,约会测试以及手写识别]
*/
public static void main(String[] args) throws IOException {
testClassify();
datingClassTest();
handwritingClassTest();
}
/**
* @author haolidong
* @Description: [简单的通过文本文件创建二维矩阵并输出]
*/
public static void test(){
file2matrix("I:\\10yue1\\machinelearninginaction\\Ch02\\datingTestSet2.txt");
autoNorm();
for (int i = 0; i < rml.AR.size(); i++) {
System.