【JKI】008_Wordle_Scores_on_Average_02_加重平均
【JKI_008】課題残件を再確認
Just KNIME It! (JKI)
の課題8に挑んでいます。
最後の4つ目の問題解答の説明を続けます。
今回もTidyData型へUnpivotしたデータテーブルを使います。
【Weightとは何か】
実は” Assign a weight W to the words”の正しい意味が理解できていないかもしれません。
一応調べては見たのですが、おそらく加重平均のことかと解釈しました。
意外にKNIMEだと加重平均を簡単に計算できるNodeはないようで、そこが今回の課題なのかなと思います。
【difficultwords.txt】
加重平均を算出するには、単語ごとに重みがいくつかを知る必要があります。
今回の判断基準は最も難しい英単語306語にWordleでの出題語が含まれているかどうかで判定するとのこと。
このリスト(ファイル「difficultwords.txt」)をどうやって決めたのかも興味はあるものの、道草は止めておきます。
「difficultwords.txt」をKNIMEで読み込むだけでも少々手間取りました。
セルを区切るデリミタをFile Readerでうまく設定できません。
そこでとりあえず改行を区切りとして全てのデータを取り込みました。
その後で、Cell Splitterをつかって各行の最初の「, (カンマ)」で二つに分けました。
結果:
このように2つのノードで処理せざるを得なかったのは、単語の説明文にもカンマが入っている行があったからです。上ではabscondという単語が例に挙げてあります。
【重みづけ処理】
続いてWordleの出題語リストと上記の難しい英単語リストとを照合して、難問かどうかの判定をします。
照合相手に合わせて単語を大文字表記に変えてからJoinerでLeft outer joinして下記の通りとします。
その後は、Difficult_Wordカラムにデータがあるなしで場合分けして、一般単語はWeightすなわちW=1、難問はW=2もしくはW=0でそれぞれの重みづけをしました。以上のworkflowが下図の通り。
【加重平均】
W=2とW=0はこの後並行して同じ処理をしました。
① 各行ごとにスコアと重みを掛けた重みづけスコアを算出
(Math Formula1つ目)。
② 重みづけスコアの和をPlayer毎に求める。重みの和も同時に求めておく(GroupBy)。
③ 重みづけスコアの和を重みの和で割る、すなわち加重平均算出
(Math Formula2つ目)。
④ 算出された加重平均が最高値の行へ絞り込み(Top k Selector)。
我ながら愚直に処理したなと思います。公式解答はもっとスマートにやってくれるのでしょうか。
蛇足ながら設定画面のスクショも掲示してはおきます。
【player間の比較】
加重平均しても、結局player2がベストプレーヤのまま不動でした。これでよかったのだろうかと不安になっています。そもそも問題を読み間違えていないか、スコアの初期設定が我流でよかったのか?
難問の重みがW=0, 1, 2で算出される平均スコアがどう変わったかを以下に列記して今回の説明を終えます。
W=0:
W=1(重みづけなし):
W=2:
【JKI_008 解答を終えて】
今回のWFは既に提出済です。
今回はWFを作っていてもっと効率よく処理できるのではないかという予感がしています。公式解答を見るのが楽しみでもあり怖くもあります。
一方で最近Just KNIME It!のおかげでKNIME HubへのWF公開にためらいが減りました。
一般的にアウトプットを意識した学習と言うのは効果が高いと言われています。既に何回かつたないWF設計で恥をかいたのですが、おかげで同じ失敗は減ったと思います。
この機会を作り出し、毎週取り組みたくなる興味深い出題を提供しつづけて下さっているKNIMEエバンジェリストチームの皆さまにあらためて感謝です!
記事を読んでいただきありがとうございます。 先人の智慧をお借りしつつ、みなさんに役立つ情報が届けられたらと願っています。 もしサポートいただけるなら、そのお金はKNIMEの無料勉強会の開催資金に充てようと思います。