Matlab中的KNN文本分类

Posted

技术标签:

【中文标题】Matlab中的KNN文本分类【英文标题】:KNN Text Categorization in Matlab 【发布时间】:2015-07-13 10:30:52 【问题描述】:

我正在使用聚类和 KNN 算法进行我的项目文本分类。但我的分类工作不正常。我只是使用每个字母的 ASCII 值进行分类。在我的分类中,我只是根据数据的大小进行分类。我对这个项目一无所知。我想了解一些关于 KNN 分类的信息。

我获得了路透社 21578 的子集,路透社转录子集。我不知道该怎么办。

这是我的示例代码

function [out2, out3, tme] = knnk_latests( data, foll )
   data      = data;
   s         = cd;
   tic;

   if isempty( foll )
      foll   = 'tempdat';
   end

   ss        = [s '\' foll];
   dir1      = dir(ss);
   c         = [];
   hlp_count = zeros( length( dir1 ) - 2, 1 );

   for j = 3:length( dir1 )
      sss    = [ss '\' dir1( j ).name];

      cd( sss );
      dir2   = dir;

      for i = 3:length( dir2 )
         fid = fopen( [sss '\' dir2( i ).name] );
         ct  = fread( fid, 10000000, 'uint8=>char' );    %% an erroneous "'" after the closing parenthesis was removed 
         fclose( fid );

         if i == 3 && j == 3 
            c=[ct '@@@@'];
         else
            if i == length( dir2 ) && j == length( dir1 )
               c = [c ct];
            else
               c = [c ct '@@@@'];
            end
         end

         hlp_count( j - 2 ) = hlp_count( j - 2 ) + 1;  
      end
   end

   cd( s );
   trainset = strsplit( c, '@@@@' );
   trainset = trainset';
   trainset = char( trainset );
   lng_hlp  = size( trainset );
   lngt     = lng_hlp(1);

   for i = 1:lngt
      if strcmp( trainset( i, 1 ), ' ' )
         trainset( i, 1:end - 1 ) = trainset( i, 2:end );
         trainset( i, end )       = ' ';
      else
         trainset(i,:)=trainset(i,:);
      end
   end

   trainset1 = double( trainset );

   sample11  = data;
   samples   = char( sample11 );
   ln_hlp    = size( samples );
   lnt       = ln_hlp( 1 );

   for i = 1:lnt
      if strcmp( samples( i, 1 ),' ')
         samples( i, 1:end - 1 ) = samples( i, 2:end );
         samples( i, end )       = ' ';
      else
         samples(i,:)=samples(i,:);
      end
   end

   samples1 = double( samples );
   a        = size( samples1 );
   b        = size( trainset1 );
   if a( 2 ) > b( 2 ) == 1
      trainset1 = [ trainset1 32 * ones( b( 1 ), a( 2 ) - b( 2 ) ) ];
   else
      samples1  = [ samples1  32 * ones( a( 1 ), b( 2 ) - a( 2 ) ) ];
   end

   grp   = [1:lngt]';
   class = knnclassify( samples1, trainset1, grp );
   fle   = class;

   tme   = num2str( toc / fle * 1000 );

   i     = 0;

   while class > 0
      i     = i + 1;
      hllp  = class;
      class = class - hlp_count( i );
   end

   fprintf('\n');
   fprintf('\n');
   out2      = dir1( i + 2 ).name;
   hlp_nmedr = dir( [ss '\' out2] );
   hlp_nme   = hlp_nmedr( hllp + 2 ).name( 1:end - 4 );
   fprintf( 'Output:- ' );
   fprintf( '\n' );
   fprintf( 2, 'The input is matched to the class : ' )
   disp( out2 );
   fprintf( 2, 'Sub class : ' )
   out3      = [out2 hlp_nme];
   outt3     = [out2 ',' num2str( hllp )];
   disp( outt3 );
   fprintf( '\n' );
   cd( s );

【问题讨论】:

【参考方案1】:

单个字母上的 K-最近邻不会真正起作用,您至少需要使用字数统计。请参阅本教程:

http://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_data.html

【讨论】:

以上是关于Matlab中的KNN文本分类的主要内容,如果未能解决你的问题,请参考以下文章

python使用KNN文本分类

使用 TF-IDF 分数进行文本分类的 KNN

分类预测 | MATLAB实现KNN分类预测(SA-KNNGOA-KNN对比)

数学建模MATLAB应用实战系列(109)-KNN分类(附MATLAB代码)

Matlab中使用KNN进行数据分类

KNN分类基于matlab模拟退火优化KNN蝗虫算法优化KNN数据分类含Matlab源码 2275期