強化学習を使用してレコメンドシステムを構築するためのサンプルコード Q学習
強化学習を使用してレコメンドシステムを構築するためのサンプルコードを提供します。この例では、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値を更新します。学習は複数のエピソードで行われ、エージェントは最適な方策を学習していきます。

ディスカッション
コメント一覧
まだ、コメントがありません