有人对文本knn分类算法的knn熟悉吗

使用KNN算法的文本分类_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
使用KNN算法的文本分类
&&使用KNN算法的文本分类
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢文本分类之KNN
解析文档,中科院分词ICTCLAS、过滤:去标点,去停用词HIT等
特征提取:
卡方、信息增益、交叉熵等,这里我们选用卡方(Chi-square
test)(Why? For this
method is easy to implement and also very effective,It test the
relevance between a term and a class,In other word ,it can test how
clearly a term discriminates the class.)
实际上,对于一个特别的类,A+C和B+D是确定的,可以简化公式,去掉这两个因子。
计算训练集中特定类中所有词的卡方值,选取卡方值最大的N(maybe 1000?)个词,作为这个类的特征向量。
比如财经类:经济 能源 政策 货币 贸易 投资 回落 市场 ...
向量表示文档:根据选取的特征,把文档用向量表示,向量中的值为词对应的权重,权重可以采用tf-idf值,tf-idf值计算有很多公式,最简单的是直接相乘,我们可以采用以下公式计算:
w为词t在文档d中所占的权重,得到各个训练集文档和测试集文档的向量表示:
采用KNN进行文本分类:
基本步骤:计算测试文档和每个训练文档的相似度,选取相似度最高的K个文档,采用多数表决的方法,得到测试文档的类别。
相似度计算可以采用欧式距离并采用[0,1]规范化,或者曼哈顿距离,这里我们采用cos方法:
如何确定K的值?只能在试验中确定,选取产生最下误差率的K值!
KNN的效果在理想情况下一般仅次于SVM:
但KNN也有些缺点:
In fact, KNN has no train process, it’s not proper for
real time application
Parameters are difficult to decide,maybe no better than simple
Naive Bayesian Model
Sometimes, some text docs belong to several classes
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。有人熟悉文本分类knn吗,帮我看下代码是什么意思 - 数据挖掘 - ITeye群组
在网上下载了一个文本分类的实例程序,对里面knn.java里的LazyLearning不是很明白,
有熟悉的能帮我看一下,主要是它里面的两个参数是做什么用的?
package text_
import java.io.BufferedW
import java.io.FileW
import java.io.PrintW
import java.util.ArrayL
import java.util.HashM
import java.util.I
import java.util.L
import java.util.M
import edu.udo.cs.wvtool.main.WVTWordV
public class KNN {
private int k = 15;
private double[] ClassSim =
private static Map indexmap =
if (indexmap == null)
indexmap = new HashMap();
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)
System.out.println("number of documents : " + vectors.length);
System.out.println("number of classes: " + numClasses);
ClassSim = new double[numClasses];
for (int i = 0; i & numC i++)
ClassSim[i] = 0;
k = (k & vectors.length)? k : vectors.
double[] Sim = new double[vectors.length];
for (int i = 0; i & Sim. 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 & i++)
for (int j = i + 1; j & Sim. j++)
if (Sim[j] & Sim[i])
double dtemp = Sim[i];
Sim[i] = Sim[j];
WVTWordVector wv = vectors[i];
vectors[i] = vectors[j];
vectors[j] =
double TotalSim = 0;
for (int i = 0; i & 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. i++)
index[i] =
for (int i = 0; i & 3; i++)
for (int j = i + 1; j & ClassSim. j++)
if (ClassSim[j] & ClassSim[i])
double dtemp = ClassSim[i];
ClassSim[i] = ClassSim[j];
ClassSim[j] =
int itemp = index[i];
index[i] = index[j];
index[j] =
List result = new ArrayList();
for (int i = 0; i & 3; 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. i++)
System.out.println(index[i] + ": " + ClassSim[i]);
for (int i = 0; i & i++)
WVTWordVector wv = vectors[i];
/*int cutIndex = wv.getDocumentInfo().getSourceName().lastIndexOf(File.separator);
if (cutIndex & 0)
id = wv.getDocumentInfo().getSourceName().substring(cutIndex + 1);
id = wv.getDocumentInfo().getSourceName();
System.out.println(id + ": " + Sim[i]);
class CategoryResult
private String CategoryN
public CategoryResult(String categoryname, double similarity)
this.CategoryName =
this.similarity =
public String getCategoryName() {
return CategoryN
public void setCategoryName(String categoryName) {
CategoryName = categoryN
public double getSimilarity() {
public void setSimilarity(double similarity) {
this.similarity =
有熟悉的朋友能帮我看一下public List LazyLearning(WVTWordVector v, WVTWordVector[] vectors, int numClasses)这个方法主要是做什么的,它里面的v和vectors是做什么用的?
相关资源推荐没有更多推荐了,
不良信息举报
举报内容:
文本分类算法之--KNN算法的简介
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!用于文本分类的快速KNN算法_论文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
用于文本分类的快速KNN算法
中国最大最早的专业内容网站|
总评分0.0|
&&KNN(k Nearest Neighbor)算法是一种简单、有效、非参数的文本分类方法.传统的KNN方法有着样本相似度计算量大的明显缺陷,使其在具有大量高维样本的文本分类中缺乏实用性.提出了一种快速查找精确的k个最近邻的TKNN(Tree―k―Nearest―Neighbor)算法,该算法建立一棵用于查找的树,加速k个最近邻的查找.首先以整个样本集合中心为基准,按照距离中心的距离将所有样本进行排
试读已结束,如果需要继续阅读或下载,敬请购买
定制HR最喜欢的简历
你可能喜欢}

我要回帖

更多关于 knn文本分类 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信