stMind

about Arsenal, Arsene Wenger, Tech, Computer vision and Machine learning

perl de 集合知プログラミング(5)

2.5 似ている製品

2章も半分まで来ました。今回は、ユーザではなくアイテムを軸にして、あるアイテムと類似しているアイテムを推薦するサンプルです。類似性スコアを算出するサブルーチンはそのまま使えて、入力として与えるハッシュのキーであるユーザとアイテムを入れ替える部分だけ新規に実装しました。

出来たもの
# データのitemとpersonを入れ替える
sub transformPrefs {
    my ($prefs) = @_;

    my %result = ();
    foreach my $person (keys %{$prefs}) {
	foreach my $item (keys %{ $prefs->{$person} }) {
	    $result{$item}{$person} = $prefs->{$person}->{$item};
	}
    }
    return %result;
}

まあ、これくらいです。あとは、これを使ってユーザとアイテムを入れ替えたハッシュを作って、コマンドラインからアイテム名と個数を与えることで、推薦するアイテムが得られます。

入れ替え。

my %movies = transformPrefs(\%critics);

結果。

List of Movies:
	Snakes on a Plane
	Just My Luck
	Lady in the Water
	Superman Returns
	You, Me and Dupree
	The Night Listener
Enter Movie ==> Superman Returns
Enter num of match movies ==> 5
Match Movies:
	You, Me and Dupree	 : 0.657951694959769
	Lady in the Water	 : 0.487950036474267
	Snakes on a Plane	 : 0.111803398874989
	The Night Listener	 : -0.179847194799054
	Just My Luck	 : -0.422890031611031

コード置き場

最新版はこちらに置いてあります。
http://gist.github.com/489178