Rubyで機械学習する必要が生じてai4rの導入を検討した.
http://ai4r.rubyforge.org/
だいたいこんな感じで書ける.データはUCI Machine Learning Repository: Wine Data Set.
# -*- coding: utf-8 -*- require "ai4r" # 学習 train_data = Ai4r::Data::DataSet.new.load_csv_with_labels("./train_wine.csv") tree_id3 = Ai4r::Classifiers::ID3.new.build(train_data) # get_rules でstringで木の内容を返してくれる # puts tree_id3.get_rules # 予測 p tree_id3.eval(["14.3","1.92","2.72","20","120","2.8","3.14","0.33","1.97","6.2","1.07","2.65","1280"])
作ったモデルもMarshal.dump/loadできるので楽で良いと思っていたが,
/Users/y_benjo/.rvm/gems/ruby-1.9.2-p290/gems/ai4r-1.9/lib/ai4r/classifiers/id3.rb:283:in `value': undefined local variable or method `rule_not_found' for #<Ai4r::Classifiers::EvaluationNode:0x007f8aea895068> (NameError)
こんな感じでrule_not_foundなる変数を返そうとして落ちる事がある.
id3.rbを開いてみると
def value(data) value = data[@index] return rule_not_found if !@values.include?(value) return nodes[@values.index(value)].value(data) end
宣言されてないrule_not_foundを返そうとしてる.
あとexampleとか見たら数値データもカテゴリ化しなきゃならないっぽいようなので諦めてRとか叩く.