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(K-Nearest Neighbors)算法是一种监督学习方法,常用于分类和回归问题,尤其在图像分类中表现出色。CIFAR-10是一个广泛使用的图像识别数据集,包含10个类别的60000张32x32像素的彩色图像。本项目将KNN算法应用...
KNN(K-Nearest Neighbors)算法是一种监督学习方法,广泛应用于分类和回归问题,尤其在模式识别和机器学习的初学者中非常流行。它基于一个简单的思想:未知样本的类别可以由其最近邻的类别决定。在这个项目中,我们...
KNN(K-Nearest Neighbors)算法是一种监督学习方法,常用于分类和回归问题,尤其在文本分类领域展现出良好的性能。在这个项目中,我们将深入探讨如何使用C++实现KNN算法来对文本进行分类。 KNN算法的基本思想是:...
【KNN算法与Python实现】 K近邻(K-Nearest Neighbors,简称KNN)是一种基于实例的学习方法,属于监督学习的一种。在分类问题中,KNN算法通过找到样本集中与新样本最接近的K个邻居,根据这K个邻居的类别进行投票,...
KNN(K-Nearest Neighbors)是一种监督学习算法,常用于分类和回归问题,尤其在处理多类分类任务时表现出色。在这个场景中,我们关注的是如何使用Java实现KNN算法来解决多类分类问题,而数据集是著名的Iris(鸢尾花...
KNN(K-Nearest Neighbors)算法是一种监督学习方法,广泛应用于分类和回归问题,尤其在数据挖掘领域。这个“KNN疾病预测算法Demo”是基于Python编程环境的一个实例,它展示了如何运用KNN算法来预测疾病。下面将详细...
**KNN文本聚类简介** KNN,全称为K-Nearest Neighbors,是一种常见的机器学习算法,尤其在分类和回归任务中应用广泛。在文本聚类领域,KNN也被用来进行无监督学习,帮助我们将大量文本数据组织成不同的类别,无需...
KNN,全称为K-Nearest Neighbors,是一种基于实例的学习方法,也是监督学习中的一种非参数算法。在机器学习领域,KNN广泛应用于分类和回归问题,尤其适合处理小样本数据集。本文将深入探讨如何用Python实现KNN算法。...
KNN算法,即k近邻算法(k-Nearest Neighbors),是一种在机器学习领域广泛应用的算法,尤其在监督学习的分类问题中扮演着重要角色。这种算法的核心思想是利用算法中的“邻居”概念来进行预测,所谓“邻居”即是在...
在本项目中,我们主要探讨的是使用OpenCV库和C++实现K近邻(K-Nearest Neighbor,简称KNN)算法对手写数字进行识别。OpenCV是一个强大的计算机视觉库,广泛应用于图像处理和机器学习等领域。Visual Studio 2019作为...
《基于KNN的语音识别系统详解》 在现代信息技术领域,语音识别技术作为一种重要的自然语言处理手段,已经广泛应用于各种场景,如智能家居、智能汽车、虚拟助手等。本项目“KNN_speech_classifier.zip”正是一个基于...
在本实验中,我们将探讨如何使用Python编程语言和K-近邻(K-Nearest Neighbors, KNN)算法进行手写数字识别,特别是在车牌号码中的应用。KNN是一种监督学习算法,常用于分类问题,它通过寻找训练集中与新样本最接近...
**KNN手写识别代码**是一种基于机器学习的算法,用于识别手写的数字。KNN,全称为K-最近邻(K-Nearest Neighbors),是监督学习算法中的一种简单而直观的方法。在这个项目中,我们将深入理解KNN的工作原理,并通过...
在本文中,我们将深入探讨如何使用KNN(K-最近邻)算法进行验证码识别,这是一种常见的机器学习任务,尤其在网络安全和数据验证领域。通过这个项目,你将能够更好地理解KNN的工作原理及其在实际应用中的操作。 首先...
【标题】: "基于knn来实现语音转换" 在标题中提到的“基于knn来实现语音转换”指的是使用K近邻(K-Nearest Neighbors, KNN)算法进行语音特征的转换。KNN是一种非参数监督学习方法,常用于分类和回归问题。在语音...
这个数据集被广泛用作评估计算机视觉算法,特别是分类任务,如K-最近邻(KNN)算法,的性能。 首先,我们要理解KNN算法。K-最近邻(K-Nearest Neighbors,简称KNN)是一种基于实例的学习,也称为惰性学习。在分类时...
在本项目中,我们将深入探讨如何使用PySpark实现基于项目和用户的K近邻(K-Nearest Neighbors, KNN)推荐算法。PySpark是Apache Spark的Python接口,它允许我们在分布式环境中处理大规模数据集。KNN推荐算法是协同...
《KNN算法的Java实现详解》 KNN(K-Nearest Neighbors,K近邻)是一种简单且直观的分类和回归方法,在机器学习领域有着广泛的应用。它基于实例学习,通过查找训练集中与未知类别样本最接近的K个已知类别的样本,...
《KNN约会数据:探索与理解》 在现代科技领域,机器学习已经成为了一种不可或缺的技术手段,其中K近邻算法(K-Nearest Neighbors,简称KNN)因其简单而有效的特性,在诸多应用中占据一席之地。在这个名为“KNN约会...
**KNN分类器详解** KNN,全称为K-最近邻(K-Nearest Neighbors),是一种简单且直观的监督学习算法,常用于分类任务。KNN算法的基本思想是:对于给定的一个新实例,通过查找训练集中与其最接近的K个邻居,依据这些...