質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
機械学習

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

Python

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

Q&A

解決済

3回答

10416閲覧

scikit-learn の学習済みモデルで追加学習させることは可能か?

Tadokoro

総合スコア14

機械学習

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

Python

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

0グッド

0クリップ

投稿2019/04/04 01:56

知りたいこと

現在、業務でRandomforest regressorを使って推論するモデルを作成しています。
そこでお客様に「自分で新しいデータを学習していく仕組みを入れてほしい」と言われています。

学習済みのモデルに追加のデータのみを学習させる追加学習のようなことをさせることはできないでしょうか?
(調べた限り、DeepLearningではできそうでしたが、scikit-learnに関する記事が見当たらず...)

もしそういった要望をRandomforestで実現する場合は、ひたすらデータをローカルに貯めていって
再学習させるタイミングで今までの全データをもう一度学習させてモデルを作り直すのが、一般的なのでしょうか。

初歩的な質問かと思いますが、宜しくお願いします。

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

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

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

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

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

_Victorique__

2019/04/04 03:32

「業務で」とか「お客様」とか会社の情報を流さないほうが良いですよ。 回答に関係ない情報ですし。
Tadokoro

2019/04/04 06:01

そんなこと言い出したらブログとかほとんどだめじゃないですか...
_Victorique__

2019/04/04 06:10

いや、そういうことじゃなくてですね。 別に「業務で」とか「お客様」とか書かなくても質問内容に関わらないんですから書かないほうが無難ですよっていうアドバイスです。 一応「会社」の情報ですからね?
Tadokoro

2019/04/04 06:30

「業務で」と書いてなかったとしても、「仕事でこういうところで困っています」って暗に書いてるようなもんでしょほとんど...そういうサイトなんすから... あと「会社の情報」って言いますけどばれたらまずいんですか?ランダムフォレスト使ってることが?
guest

回答3

0

ベストアンサー

Randomforestのアルゴリズム上、そもそも新しいデータを入れて追加で学習させるというのには向いていません。

全くおすすめしませんが、、、全学習データをアプリケーション側で持たせておき、運用後に投入される全入力データも保存しておき、定期的に入力データも混ぜて学習しなおすことは理論上可能です(が、実用的ではないでしょう)。

追加学習に適したアルゴリズムもあるので、そういうものを使えば質問文で考えているであろう通りのことができます。sklearnのリファレンスでpartial_fitメソッドのあるモデルを探してください。

ただし、これがあるからといって、運用しながらデータを集めて追加学習させていく・・・という使い方がサポートされているという訳ではありません。性能がどうなるかとか、現実的な計算リソースで再学習できるかとか(学習には予測より2~3桁リソースを要するのが普通で、運用サーバでそのまま回せないかも)、なんか変なデータが入ってきたときにどうするとか、ぶっ飛んじゃったときどうやって巻き戻すかとか、いろいろ考えるべきことはあります。お手軽とは言えないので、熟考して使うか、最初からやらないかのどちらかです。

投稿2019/04/04 10:37

hayataka2049

総合スコア30933

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

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

Tadokoro

2019/04/05 07:53

丁寧な回答ありがとうございます。 partial_fitで検索すると、私が想像していたようなものが出てきました。本当にありがとうございます。 また、追加学習そのものについてご意見ありがとうございます。 追加学習自体は、毎日走らせるようなことは想定していないですし時間がかかることも想定済みですが確かに精度が落ちることもあり得ますね...あまり考えていませんでした... 慎重検討していきたいと思います!ありがとうざいます!
guest

0

「業務で」と書いてなかったとしても、「仕事でこういうところで困っています」って暗に書いてるようなもんでしょほとんど...そういうサイトなんすから...

どこをどう見たらそういうことになるのかよく分かりません。
仕事で〜なんて書いている方はほとんどいないと思います。
それに、これ仕事での質問何だなーって思うことも殆どないですね。
逆に「仕事」「業務」「客」「上司」なんてワードを含む質問は「おいおいこの人大丈夫かよ」って心配になりますね。

「会社の情報」って言いますけどばれたらまずいんですか?ランダムフォレスト使ってることが?

バレたらまずいなんて私の知ったことではありません。
私の真意理解していないですね。不意にそういう情報を載せてしまうリスクを考えたらそういったワードは載せないのが賢明です。特に「お客様」ってワードはかなり危ないと思いますがね。あなた主観の危ない危なくないなんて役にたちません。

本題ですが、やりたいことはDeepLearningで言う所の転移学習みたいなことですよね?
Boosted Random Forestと転移学習
こういったものを利用するのも1つあります。
もしくは、ベクトル化したデータを保存しておいて、ランダムサンプリングによる取得・学習を行うかでしょうか。
頑張ってください。

投稿2019/04/04 06:53

編集2019/04/04 06:54
_Victorique__

総合スコア1392

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

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

Tadokoro

2019/04/04 07:41

ありがとうございます! 仰る通りで、転移学習のイメージでした。 記事読ませていただきます!!
guest

0

そもそもですが、ランダムフォレストは一般的にバッチ学習で使われるアンサンブル学習手法です。もちろんバッチ以外のアプローチで実装している論文や記事も見かけますが、大抵実践した方は一からpythonやmatlabで実装しています。日本語の論文でも説明があるので、どうしてもランダムフォレストの追加学習に拘りたいのであれば、そのような論文を参考にして自力で実装するのが良いと思います。無理ならバッチも一つの手段でしょう。scikit-learnはバッチ学習のライブラリはたくさんありますが、ミニバッチやオンライン学習に対する機能はあまり入ってないです。

また、業務でアルゴリズムの手法やアプローチはあまり言わない方が良いかと思います。お客様に「自分で新しいデータを学習していく仕組みを入れてほしい」と書いてますが、そのような手法や目的の情報を入れるのは危険だと思います。

厳しいことを言いますが、できるかできないか分からないことは、ここで聞く前に細かく最初の時点で小分けして、相手に細かく確認しながら進めるべきだと思います。

投稿2019/04/04 07:17

bamboo-nova

総合スコア1408

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

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

Tadokoro

2019/04/04 07:48

アドバイス、ありがとうございます!!!!!!!!!!!!!!!!!!!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問