对iris数据集做ROC曲线和AUC
时间: 2023-12-29 11:01:58 浏览: 118
好的,以下是针对iris数据集做ROC曲线和AUC的步骤:
1. 导入数据集
首先,我们需要导入iris数据集。可以使用sklearn库中的load_iris函数来导入数据集。
```python
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
```
2. 数据预处理
为了方便绘制ROC曲线,我们需要将数据集分成训练集和测试集,并将类别标签转换为二元标签。
```python
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import label_binarize
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 将类别标签转换为二元标签
y_train_binary = label_binarize(y_train, classes=[0, 1, 2])
y_test_binary = label_binarize(y_test, classes=[0, 1, 2])
```
3. 训练模型
在这里,我们使用Random Forest Classifier作为分类器。训练模型的代码如下:
```python
from sklearn.ensemble import RandomForestClassifier
# 创建分类器
clf = RandomForestClassifier(n_estimators=50, random_state=42)
# 训练模型
clf.fit(X_train, y_train_binary)
```
4. 绘制ROC曲线和计算AUC
接下来,我们可以使用sklearn库中的roc_curve和auc函数来绘制ROC曲线和计算AUC值。代码如下:
```python
from sklearn.metrics import roc_curve, auc
# 预测测试集的类别概率值
y_score = clf.predict_proba(X_test)
# 计算每个类别的ROC曲线和AUC值
fpr = dict()
tpr = dict()
roc_auc = dict()
for i in range(3):
fpr[i], tpr[i], _ = roc_curve(y_test_binary[:, i], y_score[:, i])
roc_auc[i] = auc(fpr[i], tpr[i])
# 计算Macro-Averaging和Micro-Averaging的AUC值
fpr["micro"], tpr["micro"], _ = roc_curve(y_test_binary.ravel(), y_score.ravel())
roc_auc["micro"] = auc(fpr["micro"], tpr["micro"])
all_fpr = np.unique(np.concatenate([fpr[i] for i in range(3)]))
# 绘制ROC曲线
plt.figure(figsize=(8, 6))
for i in range(3):
plt.plot(fpr[i], tpr[i], lw=2, label='ROC curve of class %d (AUC = %0.2f)' % (i+1, roc_auc[i]))
plt.plot(fpr["micro"], tpr["micro"], label='Micro-Avg ROC curve (AUC = {0:0.2f})'\
''.format(roc_auc["micro"]), color='deeppink', linestyle=':', linewidth=4)
plt.plot([0, 1], [0, 1], 'k--', lw=2)
plt.xlim([-0.05, 1.05])
plt.ylim([-0.05, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC curve for iris dataset')
plt.legend(loc="lower right")
plt.show()
```
运行上述代码,我们就可以得到iris数据集的ROC曲线和AUC值。
![image](https://user-images.githubusercontent.com/74955102/135929577-0dd1d8f9-9b7f-4f1b-88a9-7e2d6bd2c9d0.png)
从图中可以看出,三个类别的ROC曲线都很接近左上角,说明模型的分类能力很好。同时,Micro-Averaging的AUC值为0.98,说明模型的总体分类能力也很好。
阅读全文