新着記事一覧

転職エージェント

キャリア形成・転職 仕事・キャリア

2026/10/20

【40代の転職】転職エージェントの選び方

転職活動を始めるとき、利用する人も多い「転職サイト」。 転職サイトに登録していると、様々な転職エージェントからスカウトや連絡があります。 私も今回の転職活動では、複数の転職サイトに登録し、その中でスカウトを送ってくれたいくつかの転職エージェントの担当者と実際に話をしました。 そこで感じたのが、「転職エージェントなら、どこでも同じというわけではない」ということです。 求人の紹介方法も違えば、書類添削や面接対策などのサポート内容も違います。 そして何より、担当者によって熱量や相性がかなり違うと感じました。 今 ...

続きを読む

ポケモン 遊び・趣味

2026/10/20

【ポケモン】ポケモンGo リアルイベントの醍醐味

ポケモンGOのリアルイベントに参加してみて、改めて感じたことがあります。 それは、「ポケモンGOって、こんなに人とつながれるゲームだったんだ!」ということ。 普段もポケモンGOをプレイしていますが、家の近所や通勤途中で遊んでいるときは、一人(もしくは子供と)で黙々とポケモンを捕まえています。 知らない人に話しかけることも、ほとんどありません。 ところが、リアルイベントになると、それがちょっと変わります。 そこには、同じようにポケモンが好きな人が全国、そして世界中から集まっている。 「ポケモンが好き」という ...

続きを読む

キャリア形成・転職 仕事・キャリア

2026/10/20

【40代の転職】転職活動のスケジュールと進め方

海外営業からデジタルマーケティングへキャリアチェンジし、やりたい仕事に手応えを感じていたものの、組織変更によってデジタルマーケティングの仕事そのものがなくなってしまったことが、転職を考える大きなきっかけでした。 今回は、その後の転職活動のスケジュールと、実際にどのように転職活動を進めたのかを書いてみたいと思います。 結果的には、3月に本格的に転職活動を始め、4月に転職先を決定、4月22日を最終出社日として、5月は少しゆっくり過ごし、6月から新しい会社で働き始めました。 これから転職を考えている方の参考にな ...

続きを読む

ポケモン 遊び・趣味

2026/10/18

【ポケモン】Pokémon GO Fest 2026:東京!5月のリアルイベントの服装と持ち物まとめ

5月に開催されたPokémon GO Fest 東京に、小学2年生の息子と一緒に参加してきました!リアルイベントは初参加です! 今回が初めてのリアルイベント参加。 参加する前は、 「5月ならそこまで暑くないかな?」 「飲み物はどれくらい持っていけばいい?」 「スマホの充電は足りる?」 など、いろいろと気になることがありました。 実際に参加してみると、ポケモンGOのリアルイベントならではの準備がかなり重要! 特に、たくさんの人が集まるイベントなので、飲み物やモバイルバッテリーなどは「ちょっと多いかな?」くら ...

続きを読む

キャリア形成・転職 仕事・キャリア

2026/10/20

【40代の転職】転職のきっかけ

Haruは41歳で転職をしました。この記事では、40代の転職のきっかけをお伝えしようと思います。 なぜ転職を決めたのか 「なぜ転職したの?」 転職すると、よく聞かれる質問です。 私の場合、突然「今の会社が嫌になったから」というわけではありません。むしろ、これまでの会社で自分なりにやりたいことを見つけ、勉強して、部署異動まで実現させて、少しずつキャリアを変えてきました。 それでも最終的に転職を決めたのは、「この会社にいても、これ以上自分がやりたい方向には進めない」と思う出来事があったからです。 今回は、私が ...

続きを読む

ポケモン 遊び・趣味

2026/10/11

【ポケモン】豊橋ポケモン天文台に行ってきた話

三連休の土曜日、子どもたちと一緒にポケモン天文台へ行ってきました!ポケモンと宇宙が組み合わさった施設ということで、子どもたちは行く前から楽しみにしていました。今回は、実際に訪れてみて感じたことを中心に、アクセスや駐車場、混雑状況、館内の見どころ、グッズ購入までまとめてみます。(ネタばれしない範囲で) ポケモン天文台ってどんなところ? ポケモン天文台は、宇宙や星について楽しく学べる、ポケモン好きの子どもにはたまらないスポット。単に展示を見るだけではなく、ポケモンと一緒に太陽系や星、隕石などについて学べるので ...

続きを読む

Python 仕事・キャリア

2026/10/10

【Python】Pythonでの自然言語処理(日本語)

こちらの記事では、自然言語処理についてまとめています。 自然言語処理とは? 自然言語とは、日本語や英語のような自然発生的に生まれた言語です。日常的に使用している自然言語について、言葉が持つ意味を解析し処理します。活用事例としては、チャットボット、音声認識AI、文字認識(手書き文字をカメラが認識し文字データへと変換する技術)、検索エンジン、翻訳、感情分析、文章要約などがあります。 文章の意味を機械に理解させるには、単語分割を行う必要があります。手法は主に2つあります。 1.形態素解析形態素とは意味を持つ最小 ...

続きを読む

Python 仕事・キャリア

【Python】機械学習ハイパーパラメーターの調整 ランダムサーチ

※学習初学者の勉強のアウトプットですので、もしコードや解釈に間違い等あればご指摘頂けますと幸いです。
メモも兼ねて、各コードなるべく詳しく説明をつけるようにしています。

ハイパーパラメーターの調整について

機械学習においてハイパーパラメーターの調整はとても重要ですが、ハイパーパラメーターの種類はたくさんあり、これを手動で毎回変更するのは大変です。

ハイパーパラメーターの範囲を指定して、精度の良いハイパーパラメーターを自動で見つけてもらう方法があります。主な方法としては、グリッドサーチとランダムサーチの2種類があります。

グリッドサーチ:
調整したいハイパーパラメーターの値の候補を明示的に複数指定し、ハイパーパラメーターセットを作成します。モデルの評価を繰り返すことにより、最適なハイパーパラメーターセットが作成されます。値の候補を明示的に指定するため、ハイパーパラメーターの値に文字列や整数、True/Falseといった数学的に連続ではない値をとるハイパーパラメータの探索に向いている一方、多数のハイパーパラメーターをチューニングするのは不向きです。

ランダムサーチ:
ランダムサーチは、ハイパーパラメーターが取りうる値の範囲を指定し、確率で決定されたハイパーパラメーターセットを用いてモデルの評価を行うことを繰り返し、最適なパラメーターを探す手法です。値の範囲は、ハイパーパラメーターの確率関数を指定します。
パラメータの数が多い場合やモデルの学習に時間がかかる場合には、ランダムサーチの方が効率的。

ランダムサーチ

scikit-learn内の乳がんのデータセットを使用し、ランダムサーチにてハイパーパラメーターの調整を行ってみます。
モデルは決定木で実行してみます。

#必要なライブラリのインポート
import scipy.stats
from sklearn.datasets import load_breast_cancer
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import RandomizedSearchCV
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

#乳がんのデータセットを取得し、中身を確認する
cancer = load_breast_cancer()

#X,yにそれぞれ説明変数と目的変数を格納する
X = cancer.data

#yにtargetを格納する
y = cancer.target

#train_data ,testデータに分割する
train_X, test_X, train_y, test_y = train_test_split(X, y, test_size = 0.3, random_state=42)

#ハイパーパラメータの値の候補を設定する
model_param_set_grid = {DecisionTreeClassifier(): {
                                "criterion": ["gini", "entropy"],
                                "max_depth": [None, 10, 20, 30, 40],
                                "min_samples_split": [2, 5, 10],
                                "min_samples_leaf": [1, 2, 4],
                                "random_state":[42]}}

max_score = 0
best_param = None

#ランダムサーチでハイパーパラメーターを検索する
for model, param in model_param_set_grid.items():
    clf =RandomizedSearchCV(model, param)
    clf.fit(train_X, train_y)
    pred_y = clf.predict(test_X)
    score = accuracy_score(test_y, pred_y)
    if max_score < score:
        max_score = score
        best_param = clf.best_params_

print(f"ハイパーパラメーター:{best_param}")
print(f"ベストスコア:{max_score}")
dtc = DecisionTreeClassifier()
dtc.fit(train_X, train_y)
print()
print('調整なし')
print(dtc.score(test_X, test_y))

解説

#必要なライブラリのインポート
import scipy.stats
from sklearn.datasets import load_breast_cancer
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import RandomizedSearchCV
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

#乳がんのデータセットを取得し、中身を確認する
cancer = load_breast_cancer()

#X,yにそれぞれ説明変数と目的変数を格納する
X = cancer.data

#yにtargetを格納する
y = cancer.target

#train_data ,testデータに分割する
train_X, test_X, train_y, test_y = train_test_split(X, y, test_size = 0.3, random_state=42)

まず必要なライブラリをインポートし、X,yにそれぞれ説明変数、目的変数を格納し、訓練データとテストデータに分けます。

#ハイパーパラメータの値の候補を設定する
model_param_set_grid = {DecisionTreeClassifier(): {
                                "criterion": ["gini", "entropy"],
                                "max_depth": [None, 10, 20, 30, 40],
                                "min_samples_split": [2, 5, 10],
                                "min_samples_leaf": [1, 2, 4],
                                "random_state":[42]}}

max_score = 0
best_param = None

今回は決定木でパラメーター最適化を行ってみます。
まず、"ctiterion"では決定木モデルの分割基準を指定します。一般的に、分割基準としてジニ不純度やエントロピーが使われます。
gini: ジニ不純度は、ノード内のサンプルが異なるクラスに属する確率の重み付き合計。ジニ不純度が低いほど、ノードの純度が高くなる。
entropy: エントロピーは、ノード内のサンプルのクラス分布の不確実性を測定します。エントロピーが低いほど、ノードの純度が高くなります。

max_depth: 決定木の最大の深さを指定します。デフォルトはNone,適切な深さを指定することで過学習を防ぐことができます。

min_sample_split:ノードを分割するために必要な最小サンプル数。

min_samples_leaf:葉ノードに必要な最小サンプル数を指定します。葉ノードがこの値よりも少ないサンプル数を持つ場合、そのノードは分割されません。

"random_state"を設定することにより、再現性を確保できます。任意の整数値を指定します。

#ランダムサーチでハイパーパラメーターを検索する
for model, param in model_param_set_grid.items():
    clf =RandomizedSearchCV(model, param)
    clf.fit(train_X, train_y)
    pred_y = clf.predict(test_X)
    score = accuracy_score(test_y, pred_y)
    if max_score < score:
        max_score = score
        best_param = clf.best_params_

model_param_set_gridにはモデル名とそのハイパーパラメータの候補が設定されていますが、.items()でモデル名をmodelに、パラメーターの候補をparamに格納します。それらをRandomizedSearchCVに入れランダムサーチを実行し、最適なハイパーパラメーターを探索していきます。各モデルに対してランダムサーチを行った後、テストデータを使用して予測を行いスコアを出し、最も精度の高いモデルとパラメーターの組み合わせをbest_paramに格納します。

print(f"ハイパーパラメーター:{best_param}")
print(f"ベストスコア:{max_score}")
dtc = DecisionTreeClassifier()
dtc.fit(train_X, train_y)
print()
print('調整なし')
print(dtc.score(test_X, test_y))

ランダムサーチで探索した最適値と、その最適値を用いたモデルのスコアを表示してみます。
また、ハイパーパラメーターを何も調整しなかった場合のスコアも出してみます。
ランダムサーチで探索したハイパーパラメーターを使用した方が、スコアが高いことがわかります。

https://haruhaya-channel.com/python19
  • この記事を書いた人

Haru

会社員。育休2回取得、40代で転職。
職種はデジタルマーケティング。
ポケモン、スノボ、IT系の学び、キャリア、育児について発信していきます。

-Python, 仕事・キャリア
-, ,