強化学習を使用してレコメンドシステムを構築するためのサンプルコード Q学習

2024年6月17日

強化学習を使用してレコメンドシステムを構築するためのサンプルコードを提供します。この例では、Q学習を使用してエージェントがユーザーに対してレコメンドを行います。

python
import numpy as np

# レコメンドシステムの環境を定義
class RecommendationEnvironment:
    def __init__(self, num_items):
        self.num_items = num_items
        self.state = np.zeros(num_items)  # レコメンドシステムの状態を表すベクトル

    def reset(self):
        self.state = np.zeros(self.num_items)  # 初期状態にリセット
        return self.state

    def step(self, action):
        # アクションを実行し、報酬を計算
        reward = self.state[action]  # ユーザーが選択した商品の評価を報酬とする
        done = True  # 1ステップで終了する
        return self.state, reward, done

# Q学習エージェントの定義
class QLearningAgent:
    def __init__(self, num_items, alpha=0.1, gamma=0.99, epsilon=0.1):
        self.num_items = num_items
        self.alpha = alpha  # 学習率
        self.gamma = gamma  # 割引率
        self.epsilon = epsilon  # ε-greedy法のε
        self.q_table = np.zeros((num_items, num_items))  # Qテーブルの初期化

    def choose_action(self, state):
        # ε-greedy法に基づいて行動を選択
        if np.random.uniform(0, 1) < self.epsilon:
            return np.random.randint(self.num_items)  # ランダムに選択
        else:
            return np.argmax(self.q_table[state])  # Q値が最大の行動を選択

    def update(self, state, action, reward, next_state):
        # Q値の更新
        q_value = self.q_table[state, action]
        next_max = np.max(self.q_table[next_state])
        new_q_value = q_value + self.alpha * (reward + self.gamma * next_max - q_value)
        self.q_table[state, action] = new_q_value

# 環境とエージェントの初期化
env = RecommendationEnvironment(num_items=10)  # 商品数は適宜設定
agent = QLearningAgent(num_items=10)

# 学習の実行
num_episodes = 1000
for episode in range(num_episodes):
    state = env.reset()  # 環境のリセット
    total_reward = 0

    while True:
        action = agent.choose_action(state)  # 行動の選択
        next_state, reward, done = env.step(action)  # 行動の実行

        # Q値の更新
        agent.update(state, action, reward, next_state)

        total_reward += reward
        state = next_state

        if done:
            break

    # エピソードごとに結果を出力
    print("Episode:", episode+1, "Total Reward:", total_reward)

# 学習したQテーブルの表示
print("Learned Q Table:")
print(agent.q_table)

このサンプルコードでは、簡単なレコメンドシステムの環境を定義し、Q学習エージェントを使用して学習を行っています。エージェントは、状態を観測し、その状態に基づいて行動を選択し、その行動の結果として得られる報酬を受け取り、その情報を使ってQ値を更新します。学習は複数のエピソードで行われ、エージェントは最適な方策を学習していきます。

未分類

Posted by ぼっち