macでn-gram作成する(手っ取り早く)

仕事で手っ取り早くn-gramが欲しくて、
pythonもまだ設定してないmacだったので、困っていたら、
このサイトを見つけて助かりました。

http://jarp.does.notwork.org/diary/201504a.html

このままだとmacで上手く行かなかったので、
下の通り、インストールしたら動きました。
http://www.absolute-keitarou.net/blog/?p=586

n-gramで分割して、数えた結果だけ眺めても楽しいので、
機械学習の初心者向けだと思ったので、
簡単に出来る方法をまとめてみました。

シェル芸も言語処理100本ノックも、
前から気になってる単語なので、そろそろ挑戦したいです。

macでn-gram作成する(手っ取り早く)

仕事で手っ取り早くn-gramが欲しくて、
pythonもまだ設定してないmacだったので、困っていたら、
このサイトを見つけて助かりました。

http://jarp.does.notwork.org/diary/201504a.html

このままだとmacで上手く行かなかったので、
下の通り、インストールしたら動きました。
http://www.absolute-keitarou.net/blog/?p=586

n-gramで分割して、数えた結果だけ眺めても楽しいので、
機械学習の初心者向けだと思ったので、
簡単に出来る方法をまとめてみました。

シェル芸も言語処理100本ノックも、
前から気になってる単語なので、そろそろ挑戦したいです。

【QlikView】クリア選択条件機能

クリアボタンを押すと、選択した条件が全て消えますが、
全部消えちゃうと、面倒な時があります。
そんな時に、選択条件を保存する方法があります。
 

f:id:sumie_n_y:20151016185823j:plain

 
 
リストボックスで保存したい条件を選択します。
 
クリア選択状態の設定 を押します。
 
そうすると、クリアボタンを押したときに、今の状態に戻ります。
設定を解除する時は、クリア選択状態の解除 です。
解除してクリアボタンを押すと、全部の選択が解除されます。
 
例えば、商品カテゴリとか販売開始時期とか変えて眺めるとき、便利です。

Microsoft Azure Machine Learnig (ML) のサンプルの、Recommender Systemの中身

Microsoft Azure Machine Learnig (ML) のサンプルの、

Recommender Systemの中身

 

仕事で読んだので、まとめました。

一応 Microsoft Azure MLの初心者向けです。

 

f:id:sumie_n_y:20150224104614j:plain

■サンプルを開くところまで■

ぐぐれ。

 

■データセット3つ■

Restaurant ratings

Restaurant customer data

Restaurant feature data

データセットの中身は、データセットのアイコンの下の丸を右クリック→Visualize を選択すると見られます。

 

左上にカラム数と、列数が表示されています。

Restaurant customer dataには、19項目、138人分のデータが入っているようです。

 

■前処理■

Restaurant customer dataと、Restaurant feature dataには、

レコメンドと関係のないデータも入っていますので、

Project columnsを使って、必要なカラムだけを抜き出しています。

 

Project columnsを選択した状態で、右のProperties(畳まれている場合は、上の<マークをクリック)を開きます。

Selected columnsに、選択したカラムが表示されます。

変更したい時は、Launch column selectorボタンで、変更画面が表示されます。

 

Restaurant ratingsは、Splitに繋がっています。

データを、学習用、計算用、評価用と分けてくれています。

 

■学習■

Train Matchbox Recommenderです。

Helpのページを見ますと、

(Propertiesの一番下の(more..)をクリックすると、Helpのページが開きます。)

Ratingのデータと、ユーザのデータと、アイテムのデータを入力すると、

学習後のデータを出力するそうです。

 

パラメータは2つです。

Matchbox論文を見ると、

Number of traitsは、特性ベクトルの数、

Number of recommendation algorithm iterationsは、この特性ベクトルの計算を何回繰り返すか、です。

特性ベクトルの数が、Restaurant customer dataと、Restaurant feature dataのカラム数より少なくないと動かないです。

特性ベクトルの計算回数も、答えが収束する計算なので、より多く繰り返せばいい結果が出るような気がしますが、

答えが変わらなくなってきたら、いい感じのところで止めてください。

 

■計算■

Score Matchbox Recommenderです。

Module parametersで、計算したいことを選択してください。

ふつう、みなさんの目的のデータは、これのoutputだと思います。

API化するときは、アイコンの下の丸を右クリックし、

Set as Publish Outputを選択します。変なマークがつきます。

 

■評価■

Evaluate Recommender です。

最後に、計算したデータが正しいか、

Restaurant ratingsSplitで分けて、

計算したデータを、実際のRestaurant ratingsのデータで答え合わせしています。

 

Visualizeを開くと、MAERMSEが見られます。

どちらの値も、小さいほうがより正確だったということです。

ただ、統計のデータなので、あまりあてになりません。

レコメンドに限らず、

用途によっては許されない間違い(健康診断で病人を見落とすとか)があると思いますので、

結果の指標だけ見ずに、Score Matchbox Recommenderの結果とか、細かいところを見たほうがよいです。

 

メモ)気が向いたら、図を入れる

azure ml でローカルのファイルのアップロードの方法

画面が見つけにくいので。

azure ml でローカルの、csvファイル等のアップロードの方法です。

 

モデルを作成する画面の、

下の黒い帯の、左にある”+NEW”をクリックします。

f:id:sumie_n_y:20150121085538j:plain


 

新しいメニューが開きますので、

“DATASET””FROM LOCAL FILE”を選択します。

 

 

アップロードするファイルの選択画面が、現れます。

ファイルのタイプとかいい感じに選んで、OKを押せばアップロード完了です。

f:id:sumie_n_y:20150121085559j:plain

【QlikView】複数のテーブルやファイルからデータを取り込む時の便利技

QlikViewは、複数のテーブルやファイルからデータを取り込んでも、

カラム名を同じにすれば、自動で関連付けてくれます。

さらに、LEFT JOINを使うと、一方の表を優先してデータを取り込むことができます。

「一方の表を優先してデータを取り込む」とは、

たとえば、売上表に会員番号をもとに顧客表の氏名を結合する場合などです。

売上表に会員番号が無い顧客の名前は取り込みません。

 

売上表:

商品名

会員no

リンゴ

001

バナナ

002

みかん

003

 

顧客表:

会員番号

氏名

001

山田

002

鈴木

003

佐藤

004

山下

 

上のようなテーブルがあったとして、LEFT JOINを使わない場合、ロードスクリプトは以下のように書きます。

CSVファイルを使う人は、SQL SELECT~;のところをLOAD ~に置き換えて考えてください。

 

売上表:

SQL

SELECT

商品名,

会員no AS 会員番号

FROM売上表;

 

顧客表:

SQL

SELECT

会員番号,

氏名

FROM顧客表;

 

データは以下のようになっています。

商品名

会員番号

氏名

リンゴ

001

山田

バナナ

002

鈴木

みかん

003

佐藤

-

004

山下

 

何にも購入していない004山下さんが、データに入っています。

購入した人の詳しいデータが知りたかっただけなら、

004山下さんは、この場合邪魔なデータになってしまいます。

 

ちなみに、システムテーブルで見ると、こうなっています。

$Field

売上表

顧客表

会員番号

会員番号

会員番号

商品名

商品名

-

氏名

-

氏名

 

 

そこで、LEFT JOIN を使います。

前のテーブルとデータを結合し、

結合できないデータ(この場合、購入履歴に番号が無い004山下さん)は、

取り込まずに、捨ててしまいます。

 

売上表:

SQL

SELECT

商品名,

会員no AS 会員番号

FROM売上表;

 

LEFT JOIN (売上表)

SQL

SELECT

会員番号,

氏名

FROM顧客表;

 

商品名

会員番号

氏名

リンゴ

001

山田

バナナ

002

鈴木

みかん

003

佐藤

 

システムテーブルで見ると、こうなっています。

$Field

売上表

会員番号

会員番号

商品番号

商品番号

氏名

氏名

 

ちなみに、売上表のほうのデータは消えません。

売上表の会員番号が、未記入だったり、ありえない番号でも、売上表のほうのデータは減らずに、

氏名のところは空欄でデータが保存されます。

商品名

会員番号

氏名

リンゴ

001

山田

バナナ

002

鈴木

みかん

003

佐藤

もも

005

<![if !supportLists]>-       <![endif]> ()

 

これでデータが減るので、QlikViewが軽くなるかも!