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;
回答2件
あなたの回答
tips
プレビュー