きょうも亀だけど

機械学習やデータサイエンスの勉強記録など

一部の行を削除後のdataframeに対してscikit-learnのmean_squared_errorを実行すると「Input contains NaN, infinity or a value too large for dtype('float64').」が発生した時の対処法

dataframeに対し、以下のように指定のデータを削除した。 その後、そのデータに対してLightGBMで学習させ、その過程でmean_squared_errorをかけるとタイトルのエラーが発生した。

df_train = df_train[df_train['target'] > 500]

以下のサイトを参考に、データ削除後にindexをリセットしたらエラーが出なくなった。 www.it-swarm.dev

df_train = df_train.reset_index(drop=True)

AtCoder Beginner Contest 174, 175, 176参戦

ABC3つに参加した。

AtCoder Beginner Contest 174

A, B, Dの3完で終了。Cは数学的な知識を使うんだろうなというのは読めたけど見いだせず。解法見てなるほどなと納得した。

github.com

AtCoder Beginner Contest 175

A, B, Cの3完で終了。解けたけど時間かかりすぎた感じ。パフォーマンスを上げるには、解ける問題をいかに早く解くかが重要と認識した。

github.com

AtCoder Beginner Contest 176

A, B, Cの3完で終了。Dは探索系というのは分かったけど、どこでワープさせるかの判定方法が全く思いつかず。アルゴリズムを勉強しないとこの辺りは戦えない。

github.com

アルゴリズムの勉強の優先度を高められる状況ではないので、継続的に参加することに注力する。

AtCoder M-SOLUTIONS プロコンオープン 2020参戦

A, B, C, Dの4完で終了。PCが起動しなくて初動10分遅れで焦った。Dまでは簡単だったけど少し時間がかかりすぎた。C以上をいかに速く解けるようになるかが次の課題。 また、リストへのアクセスが多いと計算量的にイケると思ってもTLEになってしまう。ループ内でappendする処理になったら少し考えた方がいいかもしれない。

github.com

AtCoder Beginner Contest 171, 172, 173参戦

ABC3つに参加した。

AtCoder Beginner Contest 171

A, B, C, Dの初の4完で終了。Cはアルゴリズムをググって見つけてしまった。DはTLEで苦しんだけど、怪しいところ見つけてギリギリでAC。

TLEからACに到達する際に以下の気付きがあった。 numbersという名前のリストに含まれる各数字の出現回数を算出する処理で、countを使うよりもループで1つずつ見ていく方が早かった。

# intで初期化するため0が返る
cnt = collections.defaultdict(int)
# numbersに含まれる各数字の出現回数を保持
# for i in set(numbers):
#     cnt[i] = numbers.count(i)

# numbers.count(i)だとTLE,以下のループだと時間内に収まる
for i in numbers:
    cnt[i] += 1

できるだけ関数で処理しようとしていたけど、状況によっては愚直に見ていった方がよいことが分かった。

github.com

AtCoder Beginner Contest 172

A, B,の2完で終了。C, DがTLE。Cはやりたいことがわかったけど実装できなかった。Dは確実にTLEだろうなあと思ったらやっぱりTLE。難易度的には緑レベルらしいけど、Cはいけたなあ。

github.com

AtCoder Beginner Contest 173

A, Bの2完で終了。bit全探索なのは分かったけど実装できなかった。難易度的には茶レベルらしい。実装力と実装速度の課題が見えてきた。そしてAでケアレスミスによる1ペナ食らってしまったのがかなりもったいなかった。

github.com

次のコンテストで9回目になり、レート補正がなくなる模様。ちょっと茶色も危ない感じになってきたから、A,Bは丁寧に解く。C以降は過去問で引き出しを増やす。

AtCoder Beginner Contest 169, 170, NOMURA, 東京海上日動 プログラミングコンテスト2020参戦

4つのコンテストに参加した。

NOMURA プログラミングコンテスト2020

A, Bの2完で終了。得点配分を見た上での作戦として、「Bまでを早解きし、Cに手を出せればラッキー」で挑んだ。
前回の反省を踏まえ、コメントや命名よりも早さを意識できたのがよかった。

github.com

AtCoder Beginner Contest 169

A, B, Cの3完で終了。B, CがTLEとWA祭りでテンパる。ギリギリで計算中断と精度誤差に気付きなんとかクリア。いい経験になった。

github.com

東京海上日動 プログラミングコンテスト2020

A, Bの2完で終了。NOMURAと同じ作戦で挑んだ。
Cが意外といけそうだったけどTLEで終了。このあたりの問題は計算量とそれに伴う実装を考えないとダメだ。

github.com

AtCoder Beginner Contest 170

A, B, Cの3完で終了。Dのやりたいことは分かったけど、単純なやり方だと計算量が多すぎることはすぐわかったので、いかにシンプルに進めるかを考えた。結果的にWAでうまくいかず。
コンテスト終了後にACできている人の提出を見て、後追いでACにできた。indexを数列の値とし、値に出現回数を入れるやり方は頻繁に出てきそうなので覚える。

github.com

今回のコンテストで茶色に昇格した。あと4回出ればレート補正がなくなるようなので、7月中にはレートを確定できるといいな。

AtCoderに挑戦開始&AtCoder Beginner Contest 168参戦

AtCoderに挑戦開始した。言語はPythonでやっていく。

先日、最初のコンテストとして「AtCoder Beginner Contest 168」に参戦し、A、B、Cの3完で終了。 過去問を含めた体感としては、「A~Cまでは何とかなる、D以降はアルゴリズムを学ばないと無理」といったところ。

コメントや可読性を重視してしまう傾向にあるので、競プロは割り切ってスピードに特化した方がいいかもしれない。その過程でスピードと可読性を両立できるようになればいいと思う。

まずは茶色を目指そう。

github.com

Jupyter Notebookの起動ドライブを切り替える

Jupyter Notebookを初期ディレクトリ以外のドライブで起動したいことがある。
その場合は、コマンドプロンプトで起動したいドライブに移動してからJupyter Notebookを起動すればいい。

C:\> cd E:\hoge
E:\hoge> jupyter notebook

【参考】
github.com