🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Kaggle

Kaggleは、機械学習モデルを構築するコンペティションのプラットフォームおよびその運営企業を指します。企業や政府といった組織とデータサイエンティスト・機械学習エンジニアを繋げるプラットフォームであり、単純なマッチングではなくコンペティションが特徴です。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

784閲覧

機械学習での予測結果のファイル作成について

fu_3823

総合スコア81

Kaggle

Kaggleは、機械学習モデルを構築するコンペティションのプラットフォームおよびその運営企業を指します。企業や政府といった組織とデータサイエンティスト・機械学習エンジニアを繋げるプラットフォームであり、単純なマッチングではなくコンペティションが特徴です。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/12/02 02:42

編集2019/12/02 03:08

機械学習のモデル作成後のコードです。

python

1i=0 2res=[] 3step_size = 50000 4for j in tqdm(range(int(np.ceil(test_df.shape[0]/50000)))): 5 res.append(np.expm1(sum([model.predict(test_df.iloc[i:i+step_size]) for model in models])/folds)) 6 i+=step_size

このコード以下の流れで、提出用ファイルの目的変数を計算しているということはわかりました。
しかし、このコードのfor文の中でどのような計算が行われているのかよくわかりません。
評価指標はRMSLEです。

python

1テスト用のテーブル数を50000で割るのはなぜでしょうか。 2range(int(np.ceil(test_df.shape[0]/50000)))

python

1また、それに続き、以下のコードは、どのような計算をしているのでしょうか。 2np.expm1(sum([model.predict(test_df.iloc[i:i+step_size]) for model in models])/folds)

コード中の関数の意味はわかります。
test_df.iloc[i:i+step_size]
↑ここでどういうデータの取り方をしているのか、また、その意味がわからないので先に進めません。

test_df:テスト用目的変数のデータフレーム
models:モデルの配列
folds:folrd数=5

部分を抜き出したコードで、分かりにくいようでしたら、追記致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

テスト用のテーブル数を50000で割るのはなぜでしょうか。

これだけ見て断言はできませんが,50000はstep_sizeだと思います.書き換えたほうが可読性が上がります.

コード中の関数の意味はわかります。
test_df.iloc[i:i+step_size]
↑ここでどういうデータの取り方をしているのか、また、その意味がわからないので先に進めません。

これはスライスです.test_dfi行目からi+step_size-1行目までの(ここで,i+step_sizeは含まれない)データをモデルに入力しています.
要は,テストデータを一つずつ予測すると時間がかかるので,ある程度をまとめて予測しています.(多分)

投稿2019/12/02 03:11

dark-eater-kei

総合スコア1248

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fu_3823

2019/12/02 06:26

ありがとうございます。 ご指摘の点ですが、確かにテーブルのデータ数は20000000行以上あります。ただ、ある程度をまとめて予測せずに model.predict(test_df) としてしまった方が簡潔で楽だと思うのですが、これではいけない理由があるのでしょうか。 考えつくのは、クラウド環境のインスタンスや、kaggleやcolaboratoryの使用可能メモリの限界くらいですが、そのためにこの程度のデータを分割することなどありますか。
dark-eater-kei

2019/12/02 06:33

私自身kaggleに詳しいわけではありませんが,クラウド環境で実行するならメモリなどの制約が強いので分割するのは自然なことだと思います.20000000行は十分大きい. まぁ,50000という数字はマジックナンバーでしょうけど...
fu_3823

2019/12/02 06:38

ありがとうございます。 一度、コードを書き換えるなりして実験してみます。 参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問