文本分类器(基于KNN算法),语言最好是Matlab的,有测试数据集。。。。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文本分类器(基于KNN算法),语言最好是Matlab的,有测试数据集。。。。相关的知识,希望对你有一定的参考价值。
参考技术A function [ccr,pgroupt]=knnt(x,group,K,dist,xt,groupt)%#
%# AIM: to classify test set objects or unknown objects with the
%# K Nearest Neighbour method
%#
%# PRINCIPLE: KNN is a supervised, deterministic, non-parametric
%# classification method. It uses the majority rule to
%# assign new objects to a class.
%# It is assumed that the number of objects in each class
%# is similar.
%# There are no assumptions about the data distribution and
%# the variance-covariance matrices of each class.
%# There is no limitation of the number of variables when
%# the Euclidean distance is used.
%# However, when the correlation coefficient is used, the
%# number of variables must be larger than 1.
%# Ref: Massart D. L., Vandeginste B. G. M., Deming S. N.,
%# Michotte Y. and Kaufman L., Chemometrics: a textbook,
%# Chapter 23, 395-397, Elsevier Science Publishers B. V.,
%# Amsterdam 1988.
%#
%# INPUT: x: (mxn) data matrix with m objects and n variables,
%# containing samples of several classes (training set)
%# group: (mx1) column vector labelling the m objects from the
%# training set
%# K: integer, number of nearest neighbours
%# dist: integer,
%# = 1, Euclidean distance
%# = 2, Correlation coefficient, (No. of variables >1)
%# xt: (mtxn) data matrix with mt objects and n variables
%# (test set or unknowns)
%# groupt: (mtx1) column vector labelling the mt objects from
%# the test set
%# --> if the new objects are unknown, input [].
%#
%# OUTPUT: ccr: scalar, correct classification rate
%# pgroupt:row vector, predicted class label for the test set
%# 0 means that the object is not classified to any
%# class
%#
%# SUBROUTINES: sortlab.m: sorts the group label vector into classes
%#
%# AUTHOR: Wen Wu
%# Copyright(c) 1997 for ChemoAc
%# FABI, Vrije Universiteit Brussel
%# Laarbeeklaan 103 1090 Jette
%#
%# VERSION: 1.1 (28/02/1998)
%#
%# TEST: Andrea Candolfi
%#
function [ccr,pgroupt]=knnt(x,group,K,dist,xt,groupt);
if nargin==5, groupt=[]; end % for unknown objects
distance=dist; clear dist % change variable
if size(group,1)>1,
group=group'; % change column vector into row vector
groupt=groupt'; % change column vector into row vector
end;
[m,n]=size(x); % size of the training set
if distance==2 & n<2, error('Number of variables must > 1'),end % to check the number of variables when using correlation coefficient
[mt,n]=size(xt); % size of the test set
dis=zeros(mt,m); % initial values for the distance (matrix of zeros)
% Calculation of the distance for each test set object
for i=1:mt
for j=1:m % between each training set object and each test set object
if distance==1
dis(i,j)=(xt(i,:)-x(j,:))*(xt(i,:)-x(j,:))'; % Euclidian distance
else
r=corrcoef(xt(i,:)',x(j,:)'); % Correlation coefficient matrix
r=r(1,2); % Correlation coefficient
dis(i,j)=1-r*r; % 1 - the power of correlation coefficient
end
end
end
% Finding of the nearest neighbours
lab=zeros(1,mt); % initial values of lab
for i=1:mt % for each test object
[a,b]=sort(dis(i,:)); % sort distances
b=b(find(a<=a(K))); % to find the nearest neighbours indices
b=group(b); % the nearest neighbours objects
[ng,lgroup]=sortlab(b); % calculate the number of objects from each class in the nearest neighbours
a=find(ng==max(ng)); % find the class with the maximum number of objects
if length(a)==1 % only one class
lab(i)=lgroup(a); % class label
else
lab(i)=0; % more than one class
end
end
% Calculation of the success rate
if ~isempty(groupt)
dif=groupt-lab; % difference between predicted class label and known class label
ccr=sum(dif==0)/mt; % success rate
end
pgroupt=lab; % the output vector本回答被提问者和网友采纳 参考技术B
好像这些算法在数据缺失的情况下是没法进行的吧,只能说改进之后在数据缺失情况下做了相应处理,你说的这些算法都可以在网上找到代码 参考技术C ME5
基于 KNN 算法的贝叶斯分类器
本文来自:http://zipperary.com/2013/10/29/knn-as-bayes-classifier/
设计分类器进行分类决策的理论基础——贝叶斯决策理论:
比较P(ωi|x)。其中ωi为第 i 类,x 为观测到并要分类的一个数据,P(ωi|x)表示在已知这个数据的特征向量的情况下,判断它属于第 i 类的概率是多少,这项也成为后验概率。根据贝叶斯公式,可以将其表示为:
其中,P(x|ωi)称为似然概率或者类条件概率;P(ωi)称为先验概率,因为是与试验无关的,先于试验之前就可以知道的。
在分类时,给定 x,选择使得后验概率P(ωi|x)最大的那个类别即可。在比较每个类别下P(ωi|x)大小时,ωi是变元,而 x 是固定的;所以可以把 P(x)剔除掉,不加以考虑。
所以最终归结为计算P(x|ωi)*P(ωi)
的问题。
先验概率 P(ωi)好求,只要统计训练集中每个分类下出现的数据的比例就可以了。
似然概率P(x|ωi)的计算就要破费周折了,因为这个 x是测试集中的数据,根据训练集没法直接得出。那么我们就需要找出训练集数据的分布规律,然后就可以得到P(x|ωi)。
下面介绍 k 近邻算法,英文是 KNN。
我们要根据训练集中的数据 x1,x2…xn (其中每个数据是 m 维),在类别ωi下,拟合这些数据的分布。设 x 为 m 维空间中的任意一点,怎样计算P(x|ωi)?
我们知道,当数据量足够大时,可以用比例近似概率。利用这个原理,在点 x 的周围,找出距离 点x 最近的 k 个样本点,其中属于类别 i 的有 ki 个。计算出这 k 个样本点包围的最小超球的体积V;另求出所有样本数据中属于ωi类的个数 Ni。则:
可以看到,我们计算出来的实际上是 点 x 处的类条件概率密度。
P(ωi)怎么算呢?
根据上面的方法,P(ωi)=Ni/N 。其中 N 是样本总数。
另外,P(x)=k/(N*V),其中 k为这个超球体包围的所有样本点的个数;N 为样本总数。
那么P(ωi|x)
就可以计算了:带入公式,很容易得出:
P(ωi|x)=ki/k
再解释一下上式,在一个 V 大小的超球体内,包围了 k个样本,其中属于 i 类的有 ki 个。这样,包围的哪类样本最多,我们就判定这里的 x 应该属于哪一类。 这就是用 k 近邻算法设计的分类器。
以上是关于文本分类器(基于KNN算法),语言最好是Matlab的,有测试数据集。。。。的主要内容,如果未能解决你的问题,请参考以下文章
KNN分类器最近邻分类KD树KNN分类的最佳K值基于半径的最近邻分类器KNN多分类KNN多标签分类KNN多输出分类KNN分类的优缺点