MASの文献は
- 同じ著者が色んな名前で登録されてる
- 違う著者が同じ名前で登録されてる
という名前の曖昧性のせいで文献に対して著者がちゃんと割り当てられない。そこでタスクは、ノイズを含んだ著者と論文の組み合わせを入力して、本物の著者と論文の組み合わせを出力するというもの。
色々準備されてるのでとっかかりやすい。
- 説明 / Description - KDD Cup 2013 - Author-Paper Identification Challenge - Kaggle
- チュートリアル / git://github.com/benhamner/Kdd2013AuthorPaperIdentification.git
- もう一方 / Data - KDD Cup 2013 - Author Disambiguation - Kaggle
データ
詳細はData - KDD Cup 2013 - Author-Paper Identification Challenge - Kaggle。
数
- paperauthor : 12775821
- trainconfirmed : 123447
- traindeleted : 112462
- validpaper : 90088
- author : 247203
- paper : 2257249
- journal : 15151
- conference : 4545
入出力
入力
著者のIDと文献のIDのリスト
# SELECT * FROM validpaper LIMIT 5; authorid | paperid ----------+--------- 55 | 2507 55 | 15471 55 | 19294 55 | 20444 55 | 24074 (5 rows)
出力
著者のIDとスペース区切りの文献のID
% head -n2 Submissions/basicCoauthorBenchmarkRev2.csv AuthorId,PaperIds 2080775,2200312 1047104 280462 1467879
チュートリアル
benhamner/Kdd2013AuthorPaperIdentification · GitHubに載っているチュートリアルで。scikit-learnのRandom forestの実装を使っている。trainconfirmedを正例、traindeletedを負例として学習し、validpaperを判別している。
PostgreSQLのバックアップを配布してくれているので、PostgreSQLのインストール。
brew install postgresqlデータベース作成。
createdb Kdd2013AuthorPaperIdentification復元。
pg_restore -Fc -U [ユーザ名] -d Kdd2013AuthorPaperIdentification dataRev2.postgres起動。
postgres -D /usr/local/var/postgres確認。
psql -l接続。
psql Kdd2013AuthorPaperIdentification
PythonBenchmark内のSETTINGS.jsonのファイル出力先とuser名を変更しておく。
実行のために必要なpsycopg2のような必要なモジュールはエラーを見て何が足りないか確認して適宜pipでインストール。
sudo pip install psycopg2
- 8.7.1. sklearn.ensemble.RandomForestClassifier — scikit-learn 0.14-git documentation
特徴量
authoridとpaperidを基に以下の値をテーブルから取ってくる。
- AuthorJournalCounts (著者のジャーナル数)
- AuthorConferenceCounts (著者の会議数)
- AuthorPaperCounts (著者の文献数)
- PaperAuthorCounts (文献の著者数)
- SumPapersWithCoAuthors (共著者との文献数の和)
ターゲット
trainconfirmedが1、traindeletedが0。
パラメータ
RandomForestClassifier(n_estimators=50, verbose=2, n_jobs=1, min_samples_split=10, random_state=1)
結果
0.85078
ちなみに何も学習せずだと
0.67551