前回のブログでは、LangChainからChatGPT APIを呼び出して、自然言語からランダムフォレストのコードの生成・実行を試してみました。
目次
- イントロダクション
- 事前準備
2.1 ライブラリのインストールとOpenAI APIの設定
2.2 データセットの準備 - LangChainで複数モデルを比較する
3.1 前準備
3.2 予測モデルを比較する - まとめ
1. イントロダクション
前回の結果から、LLMに指示を出す際には、手順を明確かつ具体的に記述することがポイントであることがわかりました。
前回わかった書き方のポイントを活かして、より複雑なタスクを実行してみます。具体的には、複数のモデルを実行して、予測精度の比較を自動でさせてみます。
今回の例は、複数のモデルを実行させて、それぞれの予測精度を比較させます。
2. 事前準備
2.1 ライブラリのインストールとOpenAI APIの設定
まずは、LangChainでOpenAIのAPIを使用する手順に従って、langchainのインストール、OpenAIのAPIキーの発行と設定を行います。
※ 以前に上記の設定をしている場合、この手順はスキップして構いません。
2.2 データセットの準備
今回も分類モデルを作成するため、タイタニックデータセットを使用します。
3. LangChainで複数モデルを比較する
3.1 前準備
OpenAI APIキーの設定と、データの読み込みを行います。
■python
import pandas as pd from langchain.llms import OpenAI from langchain.agents import create_pandas_dataframe_agent from langchain.agents.agent_types import AgentType # メモリの追加 from langchain.memory import ConversationBufferMemory import os import openai # .envファイルからAPIキーを読み込む from dotenv import load_dotenv, find_dotenv _ = load_dotenv(find_dotenv()) openai.api_key = os.environ['OPENAI_API_KEY']
■python
# データの読み込み df = pd.read_csv('../data/titanic.csv') df.head()
3.2 予測モデルを比較する
■python
# データフレームを操作するエージェントの作成 agent = create_pandas_dataframe_agent( OpenAI(temperature=0, max_tokens=1000), df, verbose=True, agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION, )
エージェントを実行してみます。プロンプトでは、「データの詳細」「比較したいモデル」「モデルの作成手順」「結果の説明」について詳細に指示を出しています。
■python
agent.run(""" タイタニック号の乗客が生存したかどうかを予測するモデルを作成して、最も精度の良いモデルを教えてください。 # 入力データの情報: 入力データセットの変数名はdfです。生存したかどうかは、変数Survivedです。1なら生存、0なら死亡です。 # 以下の5つのモデルを学習して予測精度を比較してください。 1. ロジスティック回帰 2. 決定木 3. ランダムフォレスト 4. SVM 5. LightGBM # モデルの作成手順は以下の通りです。 1. dfからObject型の列を削除してください。 2. データセットdfを訓練用とテスト用に分割してください。データセットの70%を訓練用、30%をテスト用としてください。 3. 訓練用データセットを使って予測モデルを作成し、テスト用データセットを使って予測精度を計算してください。 4. 予測精度は、AUC_ROCを使って比較してください。 # 結果 実行ログを用いて、プロセスと推論結果を説明してください。 タスクの完了後、あなたのワークフロー・使用したモデル・推論結果の詳細・予測精度を説明してください。 私のリクエストに関係のない情報はフィルタリングしてください。 """)
以下の通り、各モデルのAUCの予測精度について
- ロジスティック回帰が0.77
- 決定木が0.77
- ランダムフォレストが0.83
であり、ランダムフォレストが最も予測精度が高いと返してくれます。
ロジスティック回帰、決定木、ランダムフォレストの3つのモデルを比較した結果、最も予測精度の高いモデルはランダムフォレストでした。AUC_ROCスコアは、ロジスティック回帰が0.77、決定木が0.77、ランダムフォレストが0.83でした。
さらに、SVMとlightGBMも追加して比較してみます。
■python
agent.run(""" タイタニック号の乗客が生存したかどうかを予測するモデルを作成して、最も精度の良いモデルを教えてください。 # 入力データの情報: 入力データセットの変数名はdfです。生存したかどうかは、変数Survivedです。1なら生存、0なら死亡です。 # 以下の5つのモデルを学習して予測精度を比較してください。 1. ロジスティック回帰 2. 決定木 3. ランダムフォレスト 4. SVM 5. LightGBM # モデルの作成手順は以下の通りです。 1. dfからObject型の列を削除してください。 2. データセットdfを訓練用とテスト用に分割してください。データセットの70%を訓練用、30%をテスト用としてください。 3. 訓練用データセットを使って予測モデルを作成し、テスト用データセットを使って予測精度を計算してください。 4. 予測精度は、AUC_ROCを使って比較してください。 # 結果 実行ログを用いて、プロセスと推論結果を説明してください。 タスクの完了後、あなたのワークフロー・使用したモデル・推論結果の詳細・予測精度を説明してください。 私のリクエストに関係のない情報はフィルタリングしてください。 """)
以下の通り結果が返ってきました。
LightGBMモデルが最も精度の良いモデルであることが分かりました。LightGBMモデルのAUCは0.669679233373501です。
先程の比較の際のランダムフォレストのAUCよりも精度が低いモデルが提案されています。これは、データの分割方法などが影響していると考えられます。
4. まとめ
プロンプトを詳細に記載することで、複数のモデルの実行とモデルの予測精度の比較を行うことができました。
ただし、異なるモデル比較をしたときに整合しない結果が出てくるなど、予測結果が怪しい部分もありました。そのため、結果に加えてコードも返すようにして、検証できるようにするのが良いと思います。