質問編集履歴

1 エラー場所について示しました。ご指摘ありがとございました。

mi-ko41

mi-ko41 score 11

2015/11/17 10:03  投稿

[perl] Odd number of elements in anonymous hash のエラー
SVMLight 機械学習パッケージへの Perl インタフェースであるAlgorithm::SVMLightを使用し、SVMを構築しています。
http://www.mahoroba.ne.jp/~felix/Toolbox/Lang/Perl/Package/Algorithm-SVMLight.html
上記のサイトを参考にさせていただいております。
CSVファイルから属性とラベルを読み込み、学習インスタンスを追加していきたいのですが、
Odd number of elements in anonymous hashというエラーが出てしまいます。
<追記>------------  
エラーは$s->add_instanceの部分で起きています。  
$vectorfileから一行読み込むごとに一つずつOdd numberエラーが発生しています。  
----------------  
 
調べてエラーの意味はわかったのですがどうすれば解決するのかがわかりません。
何か良い解決法はあるでしょうか。
ご教授いただけると嬉しいです。よろしくお願い致します。
vector.csvには全行同じ数の数値がカンマ区切りで格納されています。
label.csvにはvector.csvの行数と同じ数の数値がカンマ区切りで格納されています。
----------------------------------------------------------
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use open IO => ":utf8";
use Encode qw/decode_utf8 encode_utf8/;
use Algorithm::SVMLight;
my $vectorfile = "vector.csv";
my $labelfile = "label.csv";
my $s = new Algorithm::SVMLight;
open(INLABEL,"<$labelfile"); #ファイル一括読み込み
local $\ = undef;
my $label = <INLABEL>;
close(INLABEL);
my @label = split(/,/,$label); #ラベルをカンマで区切る
my $j = 0;
open(INVECTOR,$vectorfile);
while(<INVECTOR>){
   chomp;
   my @vector = split(/,/, $_); #ベクトルをカンマで区切る
   my $attribute = "";
   for(my $i=0;$i<=$#vector;$i++){
       $attribute = $attribute . $i . "=>" . $vector[$i] . ",";
   }
   chop($attribute); #最後のカンマを消す
  $s->add_instance
       (attributes => {$attribute},label => $label[$j]);
   $j++;
}
   $s->train;
  • Perl

    551 questions

    Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る