import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import edu.udo.cs.wvtool.main.WVTWordVector;
public class KNN {
private int k = 15;
private int cLimit = 1;
private double[] ClassSim = null;
private static Map<Integer, String> indexmap = null;
static {
if (indexmap == null)
{
indexmap = new HashMap<Integer, String>();
indexmap.put(0, "计算机");
indexmap.put(1, "房地产");
/*
indexmap.put(0, "汽车");
indexmap.put(1, "教育");
indexmap.put(2, "娱乐");
indexmap.put(3, "财经");
indexmap.put(4, "房产");
indexmap.put(5, "军事");
indexmap.put(6, "奥运");
indexmap.put(7, "时政");
indexmap.put(8, "体育");
indexmap.put(9, "科技");
*/
}
}
public KNN()
{
}
public List LazyLearning(WVTWordVector v, WVTWordVector[] vectors, int numClasses)
{
if (v == null || vectors == null)
return null;
System.out.println("number of documents : " + vectors.length);
System.out.println("number of classes: " + numClasses);
ClassSim = new double[numClasses];
for (int i = 0; i < numClasses; i++)
{
ClassSim[i] = 0;
}
k = (k < vectors.length)? k : vectors.length;
double[] Sim = new double[vectors.length];
for (int i = 0; i < Sim.length; i++)
{
Sim[i] = 0;
Map map1 = v.getWordMap();
Map map2 = vectors[i].getWordMap();
for (Iterator it = map1.keySet().iterator(); it.hasNext();)
{
String word1 = (String)it.next();
if (map2.containsKey(word1))
{
double value1 = Double.valueOf(map1.get(word1).toString());
double value2 = Double.valueOf(map2.get(word1).toString());
Sim[i] += (value1 * value2);
}
}
}
for (int i = 0; i < k; i++)
{
for (int j = i + 1; j < Sim.length; j++)
{
if (Sim[j] > Sim[i])
{
double dtemp = Sim[i];
Sim[i] = Sim[j];
Sim[j] = dtemp;
WVTWordVector wv = vectors[i];
vectors[i] = vectors[j];
vectors[j] = wv;
}
}
}
double TotalSim = 0;
for (int i = 0; i < k; i++)
{
WVTWordVector wv = vectors[i];
int numClass = wv.getDocumentInfo().getClassValue();
ClassSim[numClass] += Sim[i];
TotalSim += Sim[i];
}
// output the first 3 class
int[] index = new int[ClassSim.length];
for (int i = 0; i < ClassSim.length; i++)
index[i] = i;
for (int i = 0; i < cLimit; i++)
{
for (int j = i + 1; j < ClassSim.length; j++)
{
if (ClassSim[j] > ClassSim[i])
{
double dtemp = ClassSim[i];
ClassSim[i] = ClassSim[j];
ClassSim[j] = dtemp;
int itemp = index[i];
index[i] = index[j];
index[j] = itemp;
}
}
}
List<CategoryResult> result = new ArrayList<CategoryResult>();
for (int i = 0; i < cLimit; i++) {
if (ClassSim[i] > 0) {
CategoryResult cr = new CategoryResult(indexmap.get(index[i]).toString(), ClassSim[i] / TotalSim);
result.add(cr);
}
}
///*
for (int i = 0; i < index.length; i++){
System.out.println("cat:"+index[i] + ": " + ClassSim[i]);
}
for (int i = 0; i < k; i++){
WVTWordVector wv = vectors[i];
String id;
//int cutIndex = wv.getDocumentInfo().getSourceName().lastIndexOf(File.separator);
//if (cutIndex > 0)
// id = wv.getDocumentInfo().getSourceName().substring(cutIndex + 1);
//else
id = wv.getDocumentInfo().getSourceName();
System.out.println("c:"+id + ": " + Sim[i]);
}
//*/
return result;
}
}
class CategoryResult
{
private String CategoryName;
private double similarity;
public CategoryResult(String categoryname, double similarity)
{
this.CategoryName = categoryname;
this.similarity = similarity;
}
public String getCategoryName() {
return CategoryName;
}
public void setCategoryName(String categoryName) {
CategoryName = categoryName;
}
public double getSimilarity() {
return similarity;
}
public void setSimilarity(double similarity) {
this.similarity = similarity;
}
}
分享到:
相关推荐
KNN实现手写数字的识别,包含图片数据,已经实现图片数据与文本数据的转换
转自:http://www.cnblogs.com/rubbninja/p/6220284.html 卡尔曼滤波 KNN定位matlab代码合集。具体请参考转载作者博客
1、把一个所要处理的物体转换成向量的方式、2、对每个物体进行标记(因KNN是监督学习)3、计算两个物体之间的欧式距离4、选择合适的k值
对SSC第一步产生的相似矩阵进行图分割,其中采用谱聚类中KNN算法进行邻接矩阵转换。
利用一个手写数字“先验数据”集,使用knn算法来实现对手写数字的自动识别; 先验数据(训练数据)集: ♦数据维度比较大,样本数比较多。 ♦ 数据集包括数字0-9的手写体。 ♦每个数字大约有200个样本。 ♦每个...
对高维图像进行PCA和KNN分类器处理转换为低维图像
参考机器学习第二章KNN(K比邻算法),对于实例代码提供相对应的数据集 # 1:约会网站 # 2:将图像转换为测试向量,创建1x1024的Numpy数组,然后打开给定的文件,循环读出文件的前32行, # 并将每行的头32个字符值存储...
基于距离学习的集成KNN分类器,于飞,顾宏,近年来,数据挖掘引起了信息产业界的极大关注,其主要原因是存在大量数据,可以广泛适用,并且迫切需要将这些数据转换成有用的信
基于PCA(主成分分析)的人脸识别数据降维及KNN(K近邻)模型检验是一种有效的人脸识别方法。PCA是一种常用的数据降维技术,它能够将高维数据转换为低维数据,同时保留数据中的主要特征信息,从而提高数据处理效率和...
转到源目录( cd repo_path/Source ) 编译程序: 阻塞: mpicc -O3 -fopenmp functions.c MPI_B_KNN.c -o BL 非阻塞: mpicc -O3 -fopenmp functions.c MPI_NB_KNN.c -o NBL 序列号:`gcc -O3 Serial_KNN.c -o SE -...
本项目是此领域的demo,可以直接部署使用测试。
通过度量转换发现KNN图的潜在相似性
采用土壤学界广泛使用的三种对数比转换方法,对KNN方法的机器学习模型进行了模拟和验证,验证指标采用RMSE,MAE和针对土壤粒径的综合指标AD,STRESS,完成了在科研论文中对插值精度的验证和评估。
教你如何自己实现KNN算法 KNN算法,也称为K邻近算法,可以解决回归和分类问题,但解决分类问题才是它的优势。 KNN算法的本质就是寻找与我们提供的数据相似的k个样本,然后判断这k个样本的标签,最后统计每个标签出现...
csv格式irs数据 自己编程学习使用 其他排布格式需自己转换
基于机器学习GRU_CNN_KNN_SVM_RF5种实现的web攻击检测系统项目源码+数据集+模型+...检测过程:数据加载-》数据预处理(urldecode和转小写)->向量化(预训练word2Vec模型,padding补齐)->模型训练->模型预测->模型评估
使用kNN算法的手写识别系统 1.收集数据:提供文本文件 2.准备数据:编写函数img2vector(),将图像格式转换为分类器使用的向量格式。 3.分析数据:在Python命令提示符中检查数据,确保它符合要求。 4.测试算法:编写...
检测过程:数据加载-》数据预处理(urldecode和转小写)->向量化(预训练word2Vec模型,padding补齐)->模型训练->模型预测->模型评估 Python基于机器学习GRU,CNN,KNN,SVM,RF的web攻击检测系统源码+项目说明.zip ...
数据集采用KKD CUP,机器学习框架采用weka,二分类模型采用决策树+KNN 基于jpcap的网络嗅探器。 对于Java开发者来说,java.net包里面提供的类和接口提供是TCP UDP两种网络协议的支持,也就是说基于JDK的网络编程都...
基于机器学习weka框架+决策树和KNN算法实现网络入侵检测源码+详细项目说明.zip基于机器学习weka框架+决策树和KNN算法实现网络入侵检测源码+详细项目说明.zip基于机器学习weka框架+决策树和KNN算法实现网络入侵检测...