天色グラフィティ

機械学習やプログラミングでいろいろ作って遊ぶブログ

GCJ Round1C 通過しました (1165位)

f:id:ejinote:20180506173658j:plain

Round1Aで敢えなく撃沈し、Round1Bは深夜1時からの開催に耐えきれず不参加。今回迎えたRound1Cで無事突破することができました。

内訳としては1問目をvisible、hiddenともに解き、2問目を通し、3問目はDPだなーと思いながら撃沈しました。DP力が低すぎる。

amalog.hateblo.jp

この日は朝早起きしてかるたの練習に行き、帰ってきて昼寝して自転車のメンテナンスをするという充実の土曜日でした。 これはもう通過間違い無しと思いながらGCJに臨みました。 ちなみに自転車はチェーンが錆びついてしまったので今度ちゃんと整備に出します。

続きを読む

AGC023に参加した (412位)

f:id:ejinote:20180428233923p:plain

アイコンが変わりました。クラウドソーシングサイトでお願いして写真を送ったところ、ものごっつい美化されて返ってきました。 かわいいのでありとあらゆるSNSのアイコンを変更して回っています。

さて、AGC023に参加しました。AとBを解いて、Cで撃沈した結果、412位でした。 レートは11211240になりました。 ついに水色に突入! 名実ともにABCを卒業ですね。

パフォーマンスは1800(青相当)だったので、ARCにちゃんと毎回出てればここまではあがるぞ、ということでしょうか。

500点〜800点の問題(ARCのD/E、AGCのA/B/Cあたり)を順に埋めていく季節が来たようです。

前回の記事

amalog.hateblo.jp

続きを読む

pandas + matplotlibで描くヒストグラムいろいろ

データ解析コンペの初期段階では、データを可視化して眺め、特徴を探すという探索的データ分析(EDA)が行われます。

Pythonでデータ分析している場合、可視化にはpandasのプロット機能、もしくはmatplotlibを使うことが多いでしょう。 今回はヒストグラムに絞って、僕が良く使っている書き方を紹介したいと思います。

題材とするデータにはKaggleのTitanicコンペのデータを使うことにしましょう。一部を抜き出してくるとこんな感じのデータになっています。今回はこのAgeの列を可視化してみたいと思います。

data = pd.read_csv('input/train.csv')
data[['Name', 'Age']].head()
Name Age
0 Braund, Mr. Owen Harris 22.0
1 Cumings, Mrs. John Bradley (Florence Briggs Th... 38.0
2 Heikkinen, Miss. Laina 26.0
3 Futrelle, Mrs. Jacques Heath (Lily May Peel) 35.0
4 Allen, Mr. William Henry 35.0
続きを読む

ARC096に参加した (411位)

f:id:ejinote:20180422104032p:plain

ARC096に参加しました。10分遅刻したものの、30分くらいでCとDをやっつけ、残り時間ずっとEに取り組みましたが解けませんでした。 レートは10101121になりました。水色が見えてきましたよ!!

前回の記事:

amalog.hateblo.jp

続きを読む

Mac + matplotlibで日本語を表示する

タイトルにMacと入れたのはそれでしか確認していないから。WindowsLinuxでもパスだけ変えれば当てはまるかもしれない。

TL;DR

  1. matplotlibで日本語表示できる.ttfフォントをインストールしましょう
  2. ~/.matplotlib/matplotlibrcに書きましょう
  3. 【重要】~/.matplotlib/fontList*.cache だけでなく ~/.matplotlib/fontList.jsonも削除しましょう
続きを読む

機械学習コンペで使うスニペットたち

メモです。自分がコピペでぺたぺたする用なので随時更新です。

HyperoptでLightGBMモデルをチューニングする

from hyperopt import fmin, hp, tpe

def objective(params):
    params['num_leaves'] = int(params['num_leaves'])
    params['max_depth'] = int(params['max_depth'])
    params['min_data_in_leaf'] = int(params['min_data_in_leaf'])
    
    model = LGBMRegressor(**params, random_state=0, n_jobs=-1)
    
    # calc score
    return score

space = {
    'num_leaves': hp.quniform('num_leaves', 50, 200, 10),
    'max_depth': hp.quniform('max_depth', 3, 10, 1),
    'min_data_in_leaf': hp.quniform('min_data_in_leaf',  5, 25, 2),
    'colsample_bytree': hp.uniform('colsample_bytree', 0.5, 1.0),
    'learning_rate': hp.uniform('learning_rate', 0.03, 0.2),
    'subsample': hp.uniform('subsample', 0.5, 1.0)
}

best = fmin(
    objective,
    space=space,
    algo=tpe.suggest,
    max_evals=200)

SUUMOデータ分析ワークショップで優勝した。

f:id:ejinote:20180416082927p:plain

sankak.jp

SUUMOのデータ分析ワークショップに参加した。結論から書くと優勝した。文字通りの意味である。

コンペ形式でランキングがつくということなので、腕試しのためにラボの同期と一緒に応募した。(ちなみに同期は落ちたので品川の日本酒フェアみたいなやつに行った)

先日参加予定だったscouty主催のSAICONは運営がテストデータの正解を間違って配るというハプニングによって中止になってしまっていたので、大変失礼ながらリクルート住まいのレベル感はどんな感じなんだろう(にやにや)みたいなノリで登録した。

データについてとかはあまり詳しいことは書けないので、ざっくり説明するとkaggleのZillowコンペみたいな不動産価格予測。特徴量は予めかなり用意してくれているのでそれをそのまま使っても十分モデルは作れそうな感じだった。

続きを読む