目次
- イントロダクション
1.1 はじめに
1.2 今回の実験サマリ - 事前準備
2.1 ライブラリのインストールとOpenAI APIの設定
2.2 データセットの準備 - データセットの詳細
- ランダムフォレストの予測モデルを作成してみる
- まとめ
1. イントロダクション
1.1 はじめに
前回のブログでは、LangChainからChatGPT APIを呼び出して、自然言語からデータ分析、予測モデルの作成を行えるかを試しました。前回は線形回帰のモデルを作成してみましたが、今回はランダムフォレストのモデルも同様に作成できるかを試してみます。
1.2 今回の実験サマリ
ランダムフォレストのコードの生成・実行にあたって、線形回帰の時と同様に、以下のようなプロンプトで指示を出してみました。
■python
text=""" 生存したかどうかを、RandomForestで予測してください。 生存したかどうかは、変数Survivedです。1なら生存、0なら死亡です。 入力データセットはdfです。 データセットを訓練用とテスト用に分割してください。データセットの70%を訓練用、30%をテスト用としてください。 訓練用データセットを使って予測モデルを作成し、テスト用データセットを使って予測精度を計算してください。 予測精度は、AUCを計算してください。 """ agent.run(text)
その結果、以下のようなエラーが発生してモデルを作成することができませんでした。
'Agent stopped due to iteration limit or time limit.'
生成するコードが複雑なため、コードの実行・修正を内部で繰り返しているうちに、create_pandas_dataframe_agentのAPIの繰り返し実行回数の上限に達してしまったためのようです。
2. 事前準備
2.1 ライブラリのインストールとOpenAI APIの設定
まずは、LangChainでOpenAIのAPIを使用する手順に従って、langchainのインストール、OpenAIのAPIキーの発行と設定を行います。
※ 以前に上記の設定をしている場合、この手順はスキップして構いません。
2.2 データセットの準備
今回は分類モデルを作成するため、タイタニックデータセットを使用します。
3. データセットの詳細
このデータセットは、タイタニック号の乗客に関する情報を含んでいます。
データセットには、以下のカラムが含まれています。
| No | カラム名 | 説明 |
|---|---|---|
| 1 | PassengerId | 乗客のID |
| 2 | Survived | 乗客が生存したかどうか(0 = 死亡, 1 = 生存) |
| 3 | Pclass | 乗客のチケットクラス(1 = 1st(最上級)、2 = 2nd(中級)、3 = 3rd(下級)) |
| 4 | Name | 乗客の名前 |
| 5 | Sex | 乗客の性別 |
| 6 | Age | 乗客の年齢 |
| 7 | SibSp | 乗客がタイタニック号に同乗していた兄弟姉妹や配偶者の数 |
| 8 | Parch | 乗客がタイタニック号に同乗していた親や子供の数 |
| 9 | Ticket | チケット番号 |
| 10 | Fare | 運賃 |
| 11 | Cabin | キャビン番号 |
| 12 | Embarked | 乗船した港 |
4. ランダムフォレストの予測モデルを作成してみる
■python
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']
import pandas as pd
from langchain.chat_models import ChatOpenAI
from langchain.llms import OpenAI
from langchain.agents import create_pandas_dataframe_agent
from langchain.agents.agent_types import AgentType
from langchain.output_parsers import StructuredOutputParser, ResponseSchema
# データフレームを操作するエージェントの作成
agent = create_pandas_dataframe_agent(
OpenAI(temperature=0, max_tokens=1000),
df,
verbose=True,
agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
)
# データの読み込み
df = pd.read_csv('../data/titanic.csv')
df.head()
さて、前回と同じように以下のコードを実行してみます。
■python
text=""" 生存したかどうかを、RandomForestで予測してください。 生存したかどうかは、変数Survivedです。1なら生存、0なら死亡です。 入力データセットはdfです。 データセットを訓練用とテスト用に分割してください。データセットの70%を訓練用、30%をテスト用としてください。 訓練用データセットを使って予測モデルを作成し、テスト用データセットを使って予測精度を計算してください。 予測精度は、AUCを計算してください。 """ agent.run(text)
すると、以下のようなエラーが発生して実行が止まりました。
生成するコードが複雑なため、コードの実行・修正を内部で繰り返しているうちに、create_pandas_dataframe_agentのAPIの繰り返し実行回数の上限に達してしまったためのようです。
'Agent stopped due to iteration limit or time limit.'

5. まとめ
ランダムフォレストのコードの生成・実行は、今回の方法では上手くいきませんでした。
生成するコードが複雑なため、コードの実行・修正を内部で繰り返しているうちに、create_pandas_dataframe_agentのAPIの繰り返し実行回数の上限に達してしまったためのようです。
今後は、プロンプトの記載方法を工夫することによって、モデルを作成できないかを試してみます。手順を明確に記載したり、具体的に書くなどの工夫をしてみたいと思います。
