KDD Cup 2013のタスクは2つ。その1つはMicrosoft Academic Search (MAS)の文献検索での著者の名前の曖昧性がテーマ。
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