<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Optimization｜すらぷろ</title>
	<atom:link href="https://tomtom-stock.com/category/optimization/feed/" rel="self" type="application/rss+xml" />
	<link>https://tomtom-stock.com</link>
	<description>完全初心者からはじめるPython入門</description>
	<lastBuildDate>Tue, 10 Sep 2024 16:03:11 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>

<image>
	<url>https://tomtom-stock.com/wp-content/uploads/2022/03/cropped-スクリーンショット-99-32x32.jpg</url>
	<title>Optimization｜すらぷろ</title>
	<link>https://tomtom-stock.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>[Python] 自動最適化フレームワーク Optuna を初心者にも分かりやすく解説！</title>
		<link>https://tomtom-stock.com/2023/01/29/optuna-instruction/</link>
					<comments>https://tomtom-stock.com/2023/01/29/optuna-instruction/#respond</comments>
		
		<dc:creator><![CDATA[katakuriko214]]></dc:creator>
		<pubDate>Sun, 29 Jan 2023 13:35:35 +0000</pubDate>
				<category><![CDATA[Optimization]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://tomtom-stock.com/?p=1302</guid>

					<description><![CDATA[Pythonには最適化計算を回すためのOptunaというライブラリが存在します。 私自身も普段の業務で何度か使ったことがあります。実際に使ってみて、Optunaは非常に便利なライブラリで非常に使い勝手が良いなと感じました]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-media-text is-stacked-on-mobile" style="grid-template-columns:28% auto"><figure class="wp-block-media-text__media"><img fetchpriority="high" decoding="async" width="320" height="264" src="https://tomtom-stock.com/wp-content/uploads/2024/02/24.png" alt="" class="wp-image-2120 size-full"/></figure><div class="wp-block-media-text__content">
<p>Pythonには最適化計算を回すための<span class="marker"><strong>Optuna</strong></span>というライブラリが存在します。</p>
</div></div>



<p>私自身も普段の業務で何度か使ったことがあります。<br>実際に使ってみて、Optunaは非常に便利なライブラリで<span class="marker"><strong>非常に使い勝手が良い</strong></span>なと感じました。</p>



<p>今回は、この<strong>Optuna</strong>を分かりやすく紹介していきます！</p>



<a href="https://tomtom-stock.com/2023/12/19/python_excel_bookreview/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2023/12/book-intro-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">【2025年最新版】Python×Excel自動化おすすめ書籍5選</span><span class="blog-card-excerpt">Pythonを用いてExcelの処理を自動化し業務効率化を実践したい方におすすめな書籍を紹介しています！
2023年に出版されているものの中から評価の高いものや私自身が役に立ったと感じたものを紹介しています！
是非参考にしてみてください！...</span></div></div></a>



<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4709394586832392"
     crossorigin="anonymous"></script>
<!-- ディスプレイ　レスポンシブ -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4709394586832392"
     data-ad-slot="5973725251"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<div class="wp-block-jin-gb-block-box simple-box6">
<div class="wp-block-media-text is-stacked-on-mobile" style="grid-template-columns:27% auto"><figure class="wp-block-media-text__media"><a href="https://store.line.me/stickershop/product/25737383/ja"><img decoding="async" width="350" height="308" src="https://tomtom-stock.com/wp-content/uploads/2024/02/35.png" alt="" class="wp-image-2117 size-full"/></a></figure><div class="wp-block-media-text__content">
<p class="has-text-align-left"><a href="https://store.line.me/stickershop/product/25737383/ja">【LINEスタンプ発売中！】<br>たこちゃんと可愛い生物たち</a></p>
</div></div>
</div>



<h2 class="wp-block-heading">&#8220;Optuna&#8221; とは</h2>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="373" src="https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_mike_cat-1024x373.png" alt="" class="wp-image-1101" srcset="https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_mike_cat-1024x373.png 1024w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_mike_cat-300x109.png 300w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_mike_cat-768x280.png 768w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_mike_cat.png 1048w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_mike_cat-1024x373.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>Optuna</strong>は、<span class="marker"><strong>ハイパーパラメータの最適化を自動で行ってくれるフレームワーク</strong></span>です。</p>



<p>ハイパーパラメータの値を自動的に何度も変化させながら、探索した中で最も優れたパラメータを導き出してくれます。</p>



<p>さらに<strong>Optuna</strong>は、オープンソースの深層学習フレームワークや様々な機械学習ソフトウェアと一緒に使用することができるため非常に使い勝手の良い最適化フレームワークです。</p>



<p></p>



<div class="wp-block-jin-gb-block-chat-block balloon-box balloon-left clearfix has-ccc-ballon has-efefef-bgballon"><div class="balloon-icon maru"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/slime5-2.png"/></div><span class="icon-name">すらいむ管理人</span><div class="balloon-serif"><div class="balloon-content">
<p>実際に使ってみて、いろいろな最適化手法が備わっていますし、かなり使いやすく設計されているなと感じました！</p>
</div></div></div>



<p></p>



<div class="wp-block-jin-gb-block-box-with-headline kaisetsu-box5"><div class="kaisetsu-box5-title">ハイパーパラメータとは</div>
<p><strong>機械学習</strong>や<strong>最適化</strong>のアルゴリズムの挙動を制御するパラメータで、アルゴリズム自身で決定できないもの。</p>



<p>そのため<strong>ハイパーパラメータ</strong>は、<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>人が手動で設定する</strong></mark>ことが必要となります。</p>
</div>



<p></p>



<h3 class="wp-block-heading">Optunaのライセンス</h3>



<p>Optunaのライセンスは、　<span class="marker"><strong>MIT license</strong></span>　です。</p>



<p></p>



<h2 class="wp-block-heading">&#8220;Optuna&#8221; のインストール</h2>



<p></p>



<div class="wp-block-jin-gb-block-chat-block balloon-box balloon-left clearfix has-ccc-ballon has-efefef-bgballon"><div class="balloon-icon maru"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/slime5-2.png"/></div><span class="icon-name">すらいむ管理人</span><div class="balloon-serif"><div class="balloon-content">
<p>まずは、<strong>Optuna</strong>をインストールしましょう！</p>
</div></div></div>



<p>コマンドプロンプトを開いて<span class="marker"><strong>pip install</strong></span>するだけで準備OKです！</p>



<p></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>pip install optuna</code></pre></div>



<p></p>



<h2 class="wp-block-heading">&#8220;Optuna&#8221; を実際に使ってみた</h2>



<figure class="wp-block-image size-full"><img decoding="async" width="952" height="312" src="https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat_flower.png" alt="" class="wp-image-1110" srcset="https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat_flower.png 952w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat_flower-300x98.png 300w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat_flower-768x252.png 768w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat_flower.png 856w" sizes="(max-width: 952px) 100vw, 952px" /></figure>



<h3 class="wp-block-heading">二次関数を例にして最適解を求めてみる</h3>



<p>まずは簡単な関数を用意して最適化を試みます！</p>



<p>今回は、下記のような二次関数を対象として<span class="marker"><strong>ｙ軸</strong></span>の値が<span class="marker"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>最小</strong></mark><strong>となるような解</strong></span>を<strong>Optuna</strong>に導き出してもらおうと思います。</p>



<p></p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" width="546" height="436" src="https://tomtom-stock.com/wp-content/uploads/2023/01/image-20.png" alt="quadratic function" class="wp-image-1303" style="width:412px;height:329px"/></figure></div>


<p></p>



<p>そのため、最適な目的関数値は <span class="marker"><strong>&#8220;0&#8221;</strong></span> に近い値が導出されていれば良いということになりますね。</p>



<p>では実際にプログラムを書いて、<span class="marker"><strong>Optuna</strong></span>が優れた値を導き出してくれるかどうか検証してみます。</p>



<p></p>



<div class="wp-block-jin-gb-block-box-with-headline kaisetsu-box1"><div class="kaisetsu-box1-title">今回の探索条件</div>
<ul class="wp-block-list">
<li>・　目的関数：<strong>二次関数</strong></li>



<li>・　探索範囲（変数）の値は、浮動小数点型で　<strong>-10～10</strong></li>



<li>・　探索回数（n_trials）<strong>100回</strong></li>
</ul>
</div>



<p></p>



<p>(実際のコード)</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import optuna

# 最適化関数
def objective(trial):
    # 変数を変化させる
    x = trial.suggest_float(&#39;x&#39;, -10, 10)
    # 目的関数を設定
    score = x ** 2
    return score   

# 最適化を実行
study = optuna.create_study(direction=&quot;minimize&quot;)
study.optimize(objective, n_trials=100)

# 最適解の出力
print(f&quot;The best value is : \n {study.best_value}&quot;)
print(f&quot;The best parameters are : \n {study.best_params}&quot;)</code></pre></div>



<p></p>



<p>（実行結果）</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" width="526" height="51" src="https://tomtom-stock.com/wp-content/uploads/2023/01/image-21.png" alt="result of program1" class="wp-image-1304" style="width:659px;height:64px"/></figure></div>


<p></p>



<p>上記プログラムの <span class="marker"><strong>&#8220;最適解の出力&#8221;</strong></span> 部分は、それぞれ下記を示しています。<br>他にも出力可能な最適化計算結果は<a href="#a-1">コチラ</a>を確認してみてください。</p>



<div class="scroll">
<figure class="wp-block-table"><table><tbody><tr><td><span class="marker"><strong>study.best_value</strong></span></td><td>探索した中で最適な目的関数値</td></tr><tr><td><span class="marker"><strong>study.best_params</strong></span></td><td>&#8220;best_value&#8221; を出した変数値</td></tr></tbody></table></figure>
</div>



<p></p>



<p>なのでこの結果を見てみると、100回いろいろな値を探索してみたところ7.099e<sup>-6</sup>の時に<span class="marker"><strong>最小の目的関数（優れた解）</strong></span>が得られたことを示しています。</p>



<p></p>



<div class="wp-block-jin-gb-block-chat-block balloon-box balloon-left clearfix has-ccc-ballon has-efefef-bgballon"><div class="balloon-icon maru"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/slime5-2.png"/></div><span class="icon-name">すらいむ管理人</span><div class="balloon-serif"><div class="balloon-content">
<p>ちゃんと <span class="marker"><strong>&#8220;0&#8221;</strong></span> に近い値が出ましたね。<br>試行回数をより増やせばさらに0に近い値が出力されると思います！</p>



<p>この時、コンソールにもしっかりと<span class="marker"><strong>Trialの結果</strong></span>が表示されます！</p>
</div></div></div>



<p></p>



<p>（コンソール表示内容）</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img decoding="async" width="1024" height="535" src="https://tomtom-stock.com/wp-content/uploads/2023/01/image-22-1024x535.jpg" alt="result of console" class="wp-image-1305" style="width:781px;height:407px" srcset="https://tomtom-stock.com/wp-content/uploads/2023/01/image-22-1024x535.jpg 1024w, https://tomtom-stock.com/wp-content/uploads/2023/01/image-22-300x157.jpg 300w, https://tomtom-stock.com/wp-content/uploads/2023/01/image-22-768x401.jpg 768w, https://tomtom-stock.com/wp-content/uploads/2023/01/image-22.jpg 1270w, https://tomtom-stock.com/wp-content/uploads/2023/01/image-22-1024x535.jpg 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure></div>


<p></p>



<p>また、今回は目的値が ”<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>最小</strong></mark>” となるような値を最適値として計算していまいたが</p>



<p><span class="marker"><strong>direction=&#8221;maximize&#8221;</strong></span></p>



<p>とすることで目的値が &#8220;<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>最大</strong></mark>&#8221; となる値を最適値とすることもできます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code># 望大モデル
study = optuna.create_study(direction=&quot;maximize&quot;)</code></pre></div>



<p></p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<a href="//af.moshimo.com/af/c/click?a_id=3290641&amp;p_id=170&amp;pc_id=185&amp;pl_id=4062&amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB0DDNHF25B" rel="nofollow" referrerpolicy="no-referrer-when-downgrade"><img decoding="async" src="https://images-fe.ssl-images-amazon.com/images/I/5174bMicG5L._SL160_.jpg" alt="" style="border: none;"><br>仕事がはかどるPython&amp;Excel自動処理 全部入り 改訂2版（できる全部入り） 全部入り。シリーズ</a><img decoding="async" src="//i.moshimo.com/af/i/impression?a_id=3290641&amp;p_id=170&amp;pc_id=185&amp;pl_id=4062" alt="" loading="lazy" width="1" height="1" style="border: none;">
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<a href="//af.moshimo.com/af/c/click?a_id=3290641&amp;p_id=170&amp;pc_id=185&amp;pl_id=4062&amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB0DDNGLSHF" rel="nofollow" referrerpolicy="no-referrer-when-downgrade"><img decoding="async" src="https://images-fe.ssl-images-amazon.com/images/I/51iAk475oVL._SL160_.jpg" alt="" style="border: none;"><br>ゼロから作るDeep Learning Pythonで学ぶディープラーニングの…</a><img decoding="async" src="//i.moshimo.com/af/i/impression?a_id=3290641&amp;p_id=170&amp;pc_id=185&amp;pl_id=4062" alt="" loading="lazy" width="1" height="1" style="border: none;">
</div>
</div>



<div class="wp-block-jin-gb-block-box simple-box6">
<div class="wp-block-media-text is-stacked-on-mobile" style="grid-template-columns:27% auto"><figure class="wp-block-media-text__media"><a href="https://store.line.me/stickershop/product/25737383/ja"><img decoding="async" width="350" height="308" src="https://tomtom-stock.com/wp-content/uploads/2024/02/35.png" alt="" class="wp-image-2117 size-full"/></a></figure><div class="wp-block-media-text__content">
<p class="has-text-align-left"><a href="https://store.line.me/stickershop/product/25737383/ja">【LINEスタンプ発売中！】<br>たこちゃんと可愛い生物たち</a></p>
</div></div>
</div>



<h3 class="wp-block-heading">その他の探索空間の指定方法</h3>



<p>先ほど紹介したプログラムにおける<strong>ハイパーパラメータの決定</strong>では、</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>trial.suggest_float ( )</code></pre></div>



<p></p>



<p>としていたので、<strong>浮動小数点のパラメータ</strong>値が選ばれていました。</p>



<p>その他にも、ハイパーパラメータとして指定できる値はたくさんあるので紹介していきます！</p>



<p></p>



<figure class="wp-block-table is-style-stripes"><table><tbody><tr><td><strong>suggest_int(name, low, high, step=1, log=False)</strong></td><td>整数</td></tr><tr><td><strong>suggest_float(name, low, high, *, step=None, log=False)</strong></td><td>浮動小数点</td></tr><tr><td><strong>suggest_uniform(name, low. high)</strong></td><td>線形連続値</td></tr><tr><td><strong>suggest_loguniform(name, low, high)</strong></td><td>対数区間での連続値</td></tr><tr><td><strong>suggest_categorical(name, choices)</strong></td><td>カテゴリパラメータ</td></tr><tr><td><strong>suggest_discrete_uniform(name, low, high, q)</strong></td><td>離散値(ステップ: q)</td></tr></tbody></table></figure>



<p></p>



<p>ここで、<span class="marker"><strong>suggest_categorical()</strong></span>の使い方がイマイチ分からないなと思って調べていたら<a href="https://optuna.readthedocs.io/en/stable/reference/generated/optuna.trial.Trial.html#optuna.trial.Trial.suggest_categorical">公式サイト</a>に紹介されていましたので記載しておきます。<span class="marker"><strong>SVCにおけるカーネル関数</strong></span>を定義した例です↓。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
import optuna

X, y = load_iris(return_X_y=True)
X_train, X_valid, y_train, y_valid = train_test_split(X, y)


def objective(trial):
    kernel = trial.suggest_categorical(&quot;kernel&quot;, [&quot;linear&quot;, &quot;poly&quot;, &quot;rbf&quot;])
    clf = SVC(kernel=kernel, gamma=&quot;scale&quot;, random_state=0)
    clf.fit(X_train, y_train)
    return clf.score(X_valid, y_valid)


study = optuna.create_study(direction=&quot;maximize&quot;)
study.optimize(objective, n_trials=3)</code></pre></div>



<p></p>



<p></p>



<h3 class="wp-block-heading">目的関数が高次元の場合の指定方法</h3>



<p>ハイパーパラメータを<span class="marker"><strong>複数扱いたい場合</strong></span>は下記のようにして、定義すればよさそうです。</p>



<p></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>x1 = trial.suggest_float(name1, low1, high1)
x2 = trial.suggest_float(name2, low2, high2)</code></pre></div>



<p></p>



<h3 class="wp-block-heading" id="a-1">最適化結果の詳細確認</h3>



<p>Optunaで最適計算した結果は、<span class="marker"><strong>Studyに保存されます</strong></span>。</p>



<p>計算をした結果、どのようなパラメータが保存されているかを紹介します。</p>



<p></p>



<figure class="wp-block-table is-style-stripes"><table><tbody><tr><td><strong>study.best_params</strong></td><td>最良パラメータを返す</td></tr><tr><td><strong>study.best_value</strong></td><td>最適な目的値を返す</td></tr><tr><td><strong>study.best_trial</strong></td><td>最良な目的関数が得られた試験数を返す</td></tr><tr><td><strong>study.best_trials</strong></td><td>パレートフロント解の試験数を返す</td></tr><tr><td><strong>study.trials</strong></td><td>試験回数を返す</td></tr><tr><td><strong>study.direction</strong></td><td>最適化の方向を返す</td></tr><tr><td><strong>study.directions</strong></td><td>最適化の方向を返す</td></tr><tr><td><strong>study.system_attrs</strong></td><td>システム属性を返す</td></tr><tr><td><strong>study.user_attrs</strong></td><td>ユーザー属性を返す</td></tr></tbody></table></figure>



<p></p>



<div class="wp-block-jin-gb-block-chat-block balloon-box balloon-left clearfix has-ccc-ballon has-efefef-bgballon"><div class="balloon-icon maru"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/slime5-2.png"/></div><span class="icon-name">アイコン名を入力</span><div class="balloon-serif"><div class="balloon-content">
<p>Optunaはいちいち自分で最適値を更新していくプログラムを組まなくても自動最適値を更新していってくれるようです！</p>



<p>上記のコマンドを使えば、<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>探索結果を簡単に</strong></mark>検索することができますね！</p>
</div></div></div>



<p></p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p class="has-text-align-center has-small-font-size"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-cyan-bluish-gray-color">スポンサーリンク</mark></p>



<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4709394586832392"
     crossorigin="anonymous"></script>
<!-- ディスプレイ300×280 -->
<ins class="adsbygoogle"
     style="display:inline-block;width:300px;height:250px"
     data-ad-client="ca-pub-4709394586832392"
     data-ad-slot="1091550778"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div></div>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p class="has-text-align-center has-small-font-size"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-cyan-bluish-gray-color">スポンサーリンク</mark></p>



<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4709394586832392"
     crossorigin="anonymous"></script>
<!-- ディスプレイ300×280 -->
<ins class="adsbygoogle"
     style="display:inline-block;width:300px;height:250px"
     data-ad-client="ca-pub-4709394586832392"
     data-ad-slot="1091550778"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div></div>
</div>
</div>



<h2 class="wp-block-heading">Sampler ‐ 最適化アルゴリズムについて</h2>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="337" src="https://tomtom-stock.com/wp-content/uploads/2022/02/eyecatch_lookingcat-1024x337.png" alt="" class="wp-image-1168" srcset="https://tomtom-stock.com/wp-content/uploads/2022/02/eyecatch_lookingcat-1024x337.png 1024w, https://tomtom-stock.com/wp-content/uploads/2022/02/eyecatch_lookingcat-300x99.png 300w, https://tomtom-stock.com/wp-content/uploads/2022/02/eyecatch_lookingcat-768x253.png 768w, https://tomtom-stock.com/wp-content/uploads/2022/02/eyecatch_lookingcat.png 1200w, https://tomtom-stock.com/wp-content/uploads/2022/02/eyecatch_lookingcat-1024x337.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">異なるSamplerを使用したいとき</h3>



<p>最適解を求めていく際の最適化アルゴリズム（Sampler）において、デフォルトでは<strong>TPESampler</strong>が選ばれるようですが、任意のアルゴリズムを指定することもできます！</p>



<p>最適化アルゴリズム（Sampler）の指定方法は、引数にSampler＝***を追加することで指定できます。</p>



<p></p>



<p><span class="marker"><strong>optuna.create_study(Sampler ＝ optuna.samplers.***)</strong></span></p>



<p></p>



<p>実際に2つほど例を挙げてみます！</p>



<p>（例1）</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code># 例1　RandomSamplerを指定したい場合
study = optuna.create_study ( sampler=optuna.samplers.RandomSampler() )</code></pre></div>



<p>（例2）</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code># 例2 NSGAIIを指定したい場合
study = optuna.create_study(sampler=optuna.samplers.NSGAIISampler())</code></pre></div>



<p></p>



<p>Optunaで下記のSamplerは使用できるみたいです！</p>



<figure class="wp-block-table aligncenter is-style-stripes"><table><tbody><tr><td>GridSampler</td><td></td></tr><tr><td>RandomSampler</td><td></td></tr><tr><td>TPESampler</td><td></td></tr><tr><td>CmaEsSampler</td><td></td></tr><tr><td>PartialFixedSampler</td><td></td></tr><tr><td>NSGAIISampler</td><td></td></tr><tr><td>QMCSampler</td><td></td></tr><tr><td>BoTorchSampler</td><td></td></tr><tr><td>BruteForceSampler</td><td></td></tr></tbody></table></figure>



<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4709394586832392"
     crossorigin="anonymous"></script>
<!-- ディスプレイ　レスポンシブ -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4709394586832392"
     data-ad-slot="5973725251"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h3 class="wp-block-heading">最適化アルゴリズムの選定方法</h3>



<p></p>



<div class="wp-block-jin-gb-block-chat-block balloon-box balloon-left clearfix has-ccc-ballon has-efefef-bgballon"><div class="balloon-icon maru"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/slime5-2.png"/></div><span class="icon-name">すらいむ管理人</span><div class="balloon-serif"><div class="balloon-content">
<p>先ほど紹介したSamplerは目的に応じて適切に選定していく必要があります！</p>



<p>それぞれ、特徴が異なるので紹介していきます！</p>
</div></div></div>



<p></p>



<div class="sp-scroll-table">
<table>
<tbody>
<tr>
<th bgcolor="#b0c4de"></th>
<th bgcolor="#b0c4de">RandomSampler</th>
<th bgcolor="#b0c4de">GridSampler</th>
<th bgcolor="#b0c4de">TPESampler</th>
<th bgcolor="#b0c4de">CmaEsSampler</th>
<th bgcolor="#b0c4de">NSGAIISampler</th>
<th bgcolor="#b0c4de">QMCSampler</th>
<th bgcolor="#b0c4de">BoTorchSampler</th>
<th bgcolor="#b0c4de">BruteForceSampler</th>
</tr>
</thead>
</tbody>
<tbody>
<tr>
<th>suggest_float</th>
<td><b><font color="Green">〇</font></b></td>
<td><b><font color="Green">〇</font></b></td>
<td><b><font color="Green">〇</font></b></td>
<td><b><font color="Green">〇</font></b></td>
<td><b><font color="orange">▲</font></b></td>
<td><b><font color="Green">〇</font></b></td>
<td><b><font color="Green">〇</font></b></td>
<td><b><font color="Green">〇</font></b>( <font color="Red">×</font> 無限整域)</td>
</tr>
<tr>
<th bgcolor="#dcdcdc">suggest_int</th>
<td bgcolor="#dcdcdc"><b><font color="Green">〇</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="Green">〇</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="Green">〇</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="Green">〇</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="orange">▲</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="Green">〇</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="Green">〇</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="Green">〇</font></b></td>
</tr>
<tr>
<th>suggest_categorical</th>
<td><b><font color="Green">〇</font></b></td>
<td><b><font color="Green">〇</font></b></td>
<td><b><font color="Green">〇</font></b></td>
<td><b><font color="orange">▲</font></b></td>
<td><b><font color="Green">〇</font></b></td>
<td><b><font color="orange">▲</font></b></td>
<td><b><font color="Green">〇</font></b></td>
<td><b><font color="Green">〇</font></b></td>
</tr>
<tr>
<th bgcolor="#dcdcdc">Pruning</th>
<td bgcolor="#dcdcdc"><b><font color="Green">〇</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="Green">〇</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="Green">〇</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="orange">▲</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="red">×</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="Green">〇</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="orange">▲</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="Green">〇</font></b></td>
</tr>
<tr>
<th>多変量最適化</th>
<td><b><font color="orange">▲</font></b></td>
<td><b><font color="orange">▲</font></b></td>
<td><b><font color="Green">〇</font></b></td>
<td><b><font color="Green">〇</font></b></td>
<td><b><font color="orange">▲</font></b></td>
<td><b><font color="orange">▲</font></b></td>
<td><b><font color="Green">〇</font></b></td>
<td><b><font color="orange">▲</font></b></td>
</tr>
<tr>
<th bgcolor="#dcdcdc">Conditional Search Space</th>
<td bgcolor="#dcdcdc"><b><font color="green">〇</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="orange">▲</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="Green">〇</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="orange">▲</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="orange">▲</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="orange">▲</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="orange">▲</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="green">〇</font></b></td>
</tr>
<tr>
<th>多目的最適化</th>
<td><b><font color="green">〇</font></b></td>
<td><b><font color="green">〇</font></b></td>
<td><b><font color="Green">〇</font></b></td>
<td><b><font color="red">×</font></b></td>
<td><b><font color="green">〇</font></b> (<font color="orange">▲</font> 単目的の場合)</td>
<td><b><font color="green">〇</font></b></td>
<td><b><font color="Green">〇</font></b></td>
<td><b><font color="green">〇</font></b></td>
</tr>
<tr>
<th bgcolor="#dcdcdc">バッチ最適化</th>
<td bgcolor="#dcdcdc"><b><font color="green">〇</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="green">〇</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="Green">〇</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="green">〇</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="green">〇</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="green">〇</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="orange">▲</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="green">〇</font></b></td>
</tr>
<tr>
<th>分散最適化</th>
<td><b><font color="green">〇</font></b></td>
<td><b><font color="green">〇</font></b></td>
<td><b><font color="Green">〇</font></b></td>
<td><b><font color="green">〇</font></b></td>
<td><b><font color="green">〇</font></b></td>
<td><b><font color="green">〇</font></b></td>
<td><b><font color="orange">▲</font></b></td>
<td><b><font color="green">〇</font></b></td>
</tr>
<tr>
<th bgcolor="#dcdcdc">制約付き最適化</th>
<td bgcolor="#dcdcdc"><b><font color="red">×</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="red">×</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="Green">〇</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="red">×</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="green">〇</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="red">×</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="green">〇</font></b></td>
<td bgcolor="#dcdcdc"><b><font color="red">×</font></b></td>
</tr>
</tbody>
</table>
</div>



<p class="has-text-align-center"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color"><strong>〇</strong></mark>：適用可　<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color"><strong>▲</strong></mark>：適用可だが非効率　<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>×</strong></mark>：エラーが発生もしくはインターフェースなし</p>



<p class="has-text-align-right">Reference：<a href="https://optuna.readthedocs.io/en/stable/reference/samplers/index.html">Optuna.samplers instruction</a></p>



<p></p>



<p>この表を見てみると、すべてのSamplerがどのようなモデルにも適用できる訳ではなく、用いるパラメータの型や最適化したいモデルの種類によって適切なものを選定する必要がありそうです。。。</p>



<p></p>



<h2 class="wp-block-heading">Optunaで枝刈り(Pruner)する方法</h2>



<p>最後になりますが、Optunaには枝刈り機能を付け加えることができます。</p>



<div class="wp-block-jin-gb-block-box-with-headline kaisetsu-box5"><div class="kaisetsu-box5-title">枝刈り（Pruning）とは</div>
<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:45%">
<figure class="wp-block-image size-full"><img decoding="async" width="362" height="326" src="https://tomtom-stock.com/wp-content/uploads/2023/02/image-51.png" alt="pruner" class="wp-image-1837"/></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p>深層学習や、勾配ブースティング及び反復試行などに用いられる場合、学習の途中で見込みのない試行は途中で処理を打ち切ってしまって、短時間で効率的に探索を進めようという機能です。</p>
</div>
</div>
</div>



<p>枝刈り（Pruner）を使用する場合には、下記のようにオプションを指定します。今回はMedianPruner()を指定してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>study = optuna.create_study(pruner=optuna.pruners.MedianPruner())</code></pre></div>



<p></p>



<p>Prunerは他にも様々な種類があり、用いる目的や最適化問題に合わせて適したものを選定する必要があります。</p>



<figure class="wp-block-table aligncenter is-style-stripes"><table><tbody><tr><td>MedianPruner</td></tr><tr><td>NopPruner</td></tr><tr><td>PatientPruner</td></tr><tr><td>PercentilePruner</td></tr><tr><td>SuccessiveHalvingPruner</td></tr><tr><td>HyperbandPruner</td></tr><tr><td>ThresholdPruner</td></tr></tbody></table></figure>



<p>公式サイトによると、<br>ほとんどの場合、<span class="marker"><strong>MedianPruner</strong></span>を用いるそうです。</p>



<p>基本的に、<span class="marker"><strong>MedianPruner</strong></span>はSuccesiveHalvingPruner及びHyperbandPrunerよりも優れているそうです。</p>



<p>ただ、Prunerとして<strong>TPESamplerを用いる場合はHyperbandPrunerが最適だそうです</strong>。</p>



<p>詳しくは<a href="https://optuna.readthedocs.io/en/stable/tutorial/10_key_features/003_efficient_optimization_algorithms.html#sphx-glr-tutorial-10-key-features-003-efficient-optimization-algorithms-py">Optuna公式サイト</a>を確認してみてください！</p>



<h2 class="wp-block-heading">ノーフリーランチの定理</h2>



<p>ノーフリーランチの定理とは、要約すると「うまい話なんてない」という意味です。今回のような最適化問題においては「万能なアルゴリズムなんてない」　ということを言っています。</p>



<p>つまり、<span class="marker"><strong>アルゴリズムを選定する上では何が最適なのかを色々と試してみる必要がある</strong></span>ということです。</p>



<p></p>



<div class="wp-block-jin-gb-block-chat-block balloon-box balloon-left clearfix has-ccc-ballon has-efefef-bgballon"><div class="balloon-icon maru"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/slime5-2.png"/></div><span class="icon-name">すらいむ管理人</span><div class="balloon-serif"><div class="balloon-content">
<p>大変ですが機械学習や最適化をする際には、アルゴリズムをいくつかに絞った上で一つずつ検証していく必要がありそうです。。。</p>



<p>万能な探索アルゴリズム、、、欲しいですよね、、、</p>
</div></div></div>



<p></p>



<p>以上となります、最後まで見ていただきありがとうございます！</p>



<p><span class="marker"><strong>Python学習に役立つ書籍も紹介しています！</strong></span></p>



<a href="https://tomtom-stock.com/2022/03/13/python-bookreview-syosinnsya/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/eyecatch_recombooks-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">[2025年版][難易度別] Python学習にオススメな参考書：厳選9冊！</span><span class="blog-card-excerpt">Pythonを勉強する初心者から中級者を対象として、2023年現在で本当に良いと感じた厳選9冊を紹介しています。Pythonの基礎を学べる書籍から、GUI、アプリ作成、機械学習などを学べる書籍まで幅広く紹介しています！レビューも書き込んでいます！...</span></div></div></a>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://tomtom-stock.com/2023/01/29/optuna-instruction/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
