u++の備忘録

python

非負値行列因子分解を用いたKaggleコンペ推薦

非負値行列因子分解を用いて、Kaggleコンペを推薦する仕組みを考えました。 手法 実験 データセット 実装 デモアプリ 今後の展望 コールドスタート デプロイ おわりに 手法 いくらでも高度なやり方はあり得ますが、手っ取り早い方法として行列分解を試しまし…

「Basketball Behavior Challenge BBC2020」で4チーム中1位に

9月1日まで開催されていた「Basketball Behavior Challenge BBC2020」*1というコンペで1位になりました*2。選手とボールの座標推移からスクリーンプレイの有無を判定するタスクで、分析していて楽しいコンペでした。 解法の概要とスコアの推移は下図の通りで…

自分のTwitter投稿内のURLを分析してみた

これは何? 次の記事に着想を得て、自分のデータでやってみました。具体的には、2015年6月から現在までの自分のTwitter投稿から、全部のURLを抽出し、ドメイン単位で集計しました。 www.buzzfeed.com データの取得 twilog*1に自分の投稿データが保存されてい…

Pandasのパイプラインを作る「pdpipe」を使ってみた

Pandasのパイプラインを作る「pdpipe」というライブラリを知ったので、少し触ってみました。本記事では、簡単な使い方および良かった点・悪かった点をまとめます。 Pandas処理の「パイプライン」を作るライブラリがあるらしいBuild pipelines with Pandas us…

streamlitでwebアプリ作成

少し前に話題になっていた「streamlit」を用いて、簡単なwebアプリを作ってみました。デザイン部分をほとんど意識せず、お手軽にwebアプリを作成できます。公式ドキュメントも充実しており、分かりやすかったです。細かいデザインに手を入れる必要がない場合…

言語処理100本ノック 2020「59. ハイパーパラメータの探索」

問題文 nlp100.github.io 問題の概要 学習アルゴリズムとして「RandomForestClassifier()」も利用し「max_depth」の値を調整します。 import pandas as pd from sklearn.linear_model import LogisticRegression from sklearn.ensemble import RandomForestC…

言語処理100本ノック 2020「58. 正則化パラメータの変更」

問題文 nlp100.github.io 問題の概要 学習時の「C」の値を調整することで、学習・予測結果が変わります。 import matplotlib.pyplot as plt import pandas as pd from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy…

言語処理100本ノック 2020「57. 特徴量の重みの確認」

問題文 nlp100.github.io 問題の概要 ロジスティック回帰を用いた場合は「.coef_」で特徴量の重みを確認できます。今回は値の絶対値に興味があるので、事前にソートした上で上位・下位10個の特徴量を出力します。 import joblib clf = joblib.load('ch06/mod…

言語処理100本ノック 2020「56. 適合率,再現率,F1スコアの計測」

問題文 nlp100.github.io 問題の概要 適合率,再現率,F1スコアはそれぞれ「precision_score()」「recall_score()」「f1_score()」で計算できます。「average」には「'micro'」「'macro'」などが指定可能*1です。 import pandas as pd import joblib from sk…

言語処理100本ノック 2020「55. 混同行列の作成」

問題文 nlp100.github.io 問題の概要 混同行列は「confusion_matrix()」で作成できます。 import pandas as pd import joblib from sklearn.metrics import confusion_matrix X_train = pd.read_table('ch06/train.feature.txt', header=None) X_test = pd.r…

言語処理100本ノック 2020「54. 正解率の計測」

問題文 nlp100.github.io 問題の概要 正答率は「accuracy_score()」で計算できます。 import pandas as pd import joblib from sklearn.metrics import accuracy_score X_train = pd.read_table('ch06/train.feature.txt', header=None) X_test = pd.read_ta…

言語処理100本ノック 2020「53. 予測」

問題文 nlp100.github.io 問題の概要 学習を終えたモデルは、予測値が未知の特徴量(X_test)を与えて予測させることができます。 import pandas as pd from sklearn.linear_model import LogisticRegression X_train = pd.read_table('ch06/train.feature.t…

言語処理100本ノック 2020「52. 学習」

問題文 nlp100.github.io 問題の概要 用意した特徴量と予測の対象のペアから、機械学習アルゴリズムを用いて予測器を学習させましょう。 import pandas as pd import joblib from sklearn.linear_model import LogisticRegression X_train = pd.read_table('…

言語処理100本ノック 2020「51. 特徴量抽出」

問題文 nlp100.github.io 問題の概要 カテゴリ分類に有用そうな特徴量を抽出します。ここでは、問題文の指示通りの最低限の特徴量を作ります。sklearnに用意されている「CountVectorizer()」が利用可能です。 記事の見出しを単語列に変換したものが最低限の…

言語処理100本ノック 2020「50. データの入手・整形」

問題文 nlp100.github.io 問題の概要 本章では、ニュース記事の見出しからカテゴリを分類する機械学習モデルを構築します。最初に指示に従ってデータセットを整形します。次の4段階で処理しました。 ファイルのデータ形式の確認 情報源(publisher)が”Reute…

東西分割開催のJリーグ各チーム移動距離を可視化

新型コロナウイルス感染症の拡大防止のため第1節を終えた段階で中断していたJ1リーグは、7月4日に一斉再開しました。7月中は移動による感染リスクを避けるため近隣クラブが対戦する方式を採用しており、具体的には全18チームを東西に2分して各グループ内で対…

ProbSpace「YouTube動画視聴回数予測」コンペ参加録

ProbSpaceで開催されていた「YouTube動画視聴回数予測」コンペに参加しました。Lain.さんとチームを組み、public 4位・private 6位でした。 prob.space コンペ概要 YouTube APIで取得できるメタデータを入力として、動画の視聴回数を予測するタスクでした。…

Stay Homeで『相棒』全部観た(おまけ:nagisa & nlplotで可視化)

今年4月にKDDIとテレビ朝日が設立したTELASA株式会社が運営する動画配信サービス「TELASA」にて、2000年のpre seasonから2019年の最新作まで『相棒』全シーズンの動画が配信されています。 www.videopass.jp 『相棒』はたびたび夕方に再放送され、「AbemaTV…

「atmaCup#5 振り返り会」で「MLflow Tracking を用いた実験管理」について発表しました

昨日開催された「atmaCup#5 振り返り会」*1で「MLflow Tracking を用いた実験管理」について発表しました。本記事にリンク集を掲載します。 発表資料 コンペで使用していたGitHubリポジトリ https://github.com/upura/atma-comp05 自作ライブラリ「Ayniy」の…

「atmaCup オンサイトデータコンペ#5」参加録 #atmaCup

「atmaCup オンサイトデータコンペ#5」*1に参加し、public 16位・private 27位*2でした。観測データを基にした2値分類タスクで、指標はPR-AUC*3でした。 途中から K_mat さん*4 とチームマージし、テーブルデータに対するニューラルネットワーク周りなど、大…

Nishika「財務・非財務情報を活用した株主価値予測」コンペ2位でした

Nishikaで開催されていた「財務・非財務情報を活用した株主価値予測」コンペ*1で、2位になりました。 オープンデータのコンペなので、pipelineを整備しながら、のんびりと取り組みました。最終的にはLightGBMとCatBoostで3種類の予測値(public 19位, 19位, …

企業名認識のデータセット「JCLdic」で学習したEncoder-Decoderモデル

TISが公開している企業名認識のためのデータセット「JCLdic」*1を用いて、Encoder-Decoderモデルを学習させてみました。 結果と考察 学習・検証に利用していないデータに対して適応した結果を下図に示します。統計的な出現頻度に基づくので当然な気がします…

言語処理100本ノック 2020「49. 名詞間の係り受けパスの抽出」

問題文 nlp100.github.io 問題の概要 問題文に提示された仕様に従って出力します。第5章は2015年版と同様なので、先駆者のコード*1を流用しつつ実装しました。 class Morph: def __init__(self, dc): self.surface = dc['surface'] self.base = dc['base'] s…

言語処理100本ノック 2020「48. 名詞から根へのパスの抽出」

問題文 nlp100.github.io 問題の概要 問題文に提示された仕様に従って出力します。 class Morph: def __init__(self, dc): self.surface = dc['surface'] self.base = dc['base'] self.pos = dc['pos'] self.pos1 = dc['pos1'] class Chunk: def __init__(se…

言語処理100本ノック 2020「47. 機能動詞構文のマイニング」

問題文 nlp100.github.io 問題の概要 問題文に提示された仕様に従って出力します。 class Morph: def __init__(self, dc): self.surface = dc['surface'] self.base = dc['base'] self.pos = dc['pos'] self.pos1 = dc['pos1'] class Chunk: def __init__(se…

言語処理100本ノック 2020「46. 動詞の格フレーム情報の抽出」

問題文 nlp100.github.io 問題の概要 問題文に提示された仕様に従って出力します。 class Morph: def __init__(self, dc): self.surface = dc['surface'] self.base = dc['base'] self.pos = dc['pos'] self.pos1 = dc['pos1'] class Chunk: def __init__(se…

言語処理100本ノック 2020「45. 動詞の格パターンの抽出」

問題文 nlp100.github.io 問題の概要 問題文に提示された仕様に従って出力します。 class Morph: def __init__(self, dc): self.surface = dc['surface'] self.base = dc['base'] self.pos = dc['pos'] self.pos1 = dc['pos1'] class Chunk: def __init__(se…

言語処理100本ノック 2020「44. 係り受け木の可視化」

問題文 nlp100.github.io 問題の概要 問題文にある通り、pydotを用いて有向グラフを可視化します。 pairs というリスト内に、隣接するノードのペアを格納し pydot.graph_from_edges(pairs) を呼び出します。 import pydot class Morph: def __init__(self, d…

言語処理100本ノック 2020「43. 名詞を含む文節が動詞を含む文節に係るものを抽出」

問題文 nlp100.github.io 問題の概要 「42. 係り元と係り先の文節の表示」に「名詞を含む文節が,動詞を含む文節に係るとき」の条件を付与します。 class Morph: def __init__(self, dc): self.surface = dc['surface'] self.base = dc['base'] self.pos = d…

言語処理100本ノック 2020「42. 係り元と係り先の文節の表示」

問題文 nlp100.github.io 問題の概要 「41. 係り受け解析結果の読み込み(文節・係り受け)」を活用し、全ての係り受け関係を洗い出します。結合時は、品詞が記号の際には空文字列に置換しています。 class Morph: def __init__(self, dc): self.surface = d…