pytorch画roc曲线
时间: 2023-09-06 12:13:31 浏览: 137
要画ROC曲线,需要先计算出模型的真正率(TPR)和假正率(FPR),并以FPR为横坐标,TPR为纵坐标,绘制ROC曲线。下面是一个使用PyTorch实现的ROC曲线绘制的示例代码:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, auc
# 定义模型,这里使用一个简单的二分类模型作为例子
class BinaryClassifier(nn.Module):
def __init__(self, input_size):
super(BinaryClassifier, self).__init__()
self.linear = nn.Linear(input_size, 1)
def forward(self, x):
x = self.linear(x)
return torch.sigmoid(x)
# 定义数据集和数据加载器
X = np.random.rand(1000, 10)
y = np.random.randint(0, 2, size=(1000,))
dataset = torch.utils.data.TensorDataset(torch.tensor(X, dtype=torch.float32), torch.tensor(y, dtype=torch.float32))
dataloader = torch.utils.data.DataLoader(dataset, batch_size=32)
# 训练模型
model = BinaryClassifier(input_size=10)
criterion = nn.BCELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
for epoch in range(10):
for inputs, labels in dataloader:
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, labels.unsqueeze(1))
loss.backward()
optimizer.step()
# 计算模型的预测结果和真实标签
model.eval()
with torch.no_grad():
y_pred = []
y_true = []
for inputs, labels in dataloader:
outputs = model(inputs)
y_pred.append(outputs.numpy())
y_true.append(labels.numpy())
y_pred = np.concatenate(y_pred, axis=0)
y_true = np.concatenate(y_true, axis=0)
# 计算ROC曲线和AUC值
fpr, tpr, thresholds = roc_curve(y_true, y_pred)
roc_auc = auc(fpr, tpr)
# 绘制ROC曲线
plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area=%0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic')
plt.legend(loc="lower right")
plt.show()
```
在这个示例中,我们使用一个简单的二分类模型对一个随机生成的数据集进行训练,并计算出模型的预测结果和真实标签。然后,使用`sklearn.metrics`中的`roc_curve`和`auc`函数计算出ROC曲线和AUC值,并使用`matplotlib`库绘制ROC曲线。
阅读全文