値の閾値を決めるために、正解率の変遷をグラフに表示するスクリプトを作ったりしていたが、毎度専用のものをいちいち作るのが面倒なので、汎用のスクリプトを作った。
入力は、値と(教師)ラベルが空白(タブも含む)で結合された形式。
例:
出力結果(タブ区切り):
#!/usr/bin/ruby -Ku # format: # value label *other data = [] label_sum = Hash.new(0) while line = gets value,label,*others = line.chomp.split(/s/) data << [value.to_f,label,*others]
label_sum[label] += 1 end puts (label_sum.keys+['value','label']).join("t") data = data.sort_by{|value,*_|value} count = Hash.new(0) count_sum = 0 data.each do |value,label,*others| next if value.nil? accs = label_sum.keys.map do |lab| (count[lab]*2 + data.size - label_sum[lab] - count_sum).to_f/data.size end puts (accs+[value,label,*others]).join("t") count[label] += 1 count_sum +=1 end
入力は、値と(教師)ラベルが空白(タブも含む)で結合された形式。
例:
-0.0960945576671676 b 0.000668926019671334 a -0.0453034616651888 b -0.013224697525716 a -0.00989926808532632 a -0.0578652275798741 a -0.00793814158245038 b -0.00361290493367006 a -0.0266724059683863 b -0.0422791509316265 b
出力結果(タブ区切り):
a b value label 0.5 0.5 -0.0960945576671676 b 0.4 0.6 -0.0578652275798741 a 0.5 0.5 -0.0453034616651888 b 0.4 0.6 -0.0422791509316265 b 0.3 0.7 -0.0266724059683863 b 0.2 0.8 -0.013224697525716 a 0.3 0.7 -0.00989926808532632 a 0.4 0.6 -0.00793814158245038 b 0.3 0.7 -0.00361290493367006 a 0.4 0.6 0.000668926019671334 a