import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import confusion_matrix, roc_auc_score, roc_curve
defforward(self, x): x = torch.relu(self.fc1(x)) x = self.fc2(x) return x
次に、訓練データとテストデータを定義します。ここでは、ダミーデータを使用します。
1 2 3 4 5 6
# Dummy data train_features = torch.rand(100, 3) # 100 recipes, 3 features each train_ratings = torch.randint(1, 6, (100, 1)).float() # ratings from 1 to 5
test_features = torch.rand(20, 3) # 20 recipes, 3 features each test_ratings = torch.randint(1, 6, (20, 1)).float() # ratings from 1 to 5
net = Net() criterion = nn.MSELoss() optimizer = optim.SGD(net.parameters(), lr=0.01)
# Store losses for plotting losses = []
for epoch inrange(500): # number of epochs optimizer.zero_grad() outputs = net(train_features) loss = criterion(outputs, train_ratings) loss.backward() optimizer.step()
losses.append(loss.item())
# Plot the loss over time plt.plot(losses) plt.xlabel('Epoch') plt.ylabel('Loss') plt.show()
最後に、テストデータを使用してネットワークの性能を評価します。
1 2 3 4 5
with torch.no_grad(): predictions = net(test_features) loss = criterion(predictions, test_ratings)
import torch from torch import nn, optim import torch.nn.functional as F from sklearn.datasets import load_diabetes from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt
このサンプルでは、乳がんのデータセットであるBreast Cancer Wisconsin (Diagnostic) Data Setを使用します。
データセットはscikit-learnライブラリから利用できます。
また、結果を分かりやすくするためにMatplotlibを使用してグラフ化します。
まず、必要なライブラリをインポートします。
1 2 3 4 5 6
import torch import torch.nn as nn import torch.optim as optim from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt
次に、データセットをロードして前処理を行います。
1 2 3 4 5 6 7 8 9 10
# データセットの読み込み data = load_breast_cancer() X, y = data.data, data.target
# データをPyTorchのテンソルに変換 X = torch.tensor(X, dtype=torch.float32) y = torch.tensor(y, dtype=torch.float32).view(-1, 1)
import gym import numpy as np import torch import torch.nn as nn import torch.optim as optim from torch.distributions import Categorical import matplotlib.pyplot as plt
defselect_action(state): state = torch.from_numpy(state).float().unsqueeze(0) probs = policy(state) m = Categorical(probs) action = m.sample() policy.saved_log_probs.append(m.log_prob(action)) return action.item()
deffinish_episode(): R = 0 policy_loss = [] returns = [] for r in policy.rewards[::-1]: R = r + 0.99 * R returns.insert(0, R) returns = torch.tensor(returns) returns = (returns - returns.mean()) / (returns.std() + 1e-6) for log_prob, R inzip(policy.saved_log_probs, returns): policy_loss.append(-log_prob * R) optimizer.zero_grad() policy_loss = torch.cat(policy_loss).sum() policy_loss.backward() optimizer.step() del policy.rewards[:] del policy.saved_log_probs[:]