基于支持向量机SVM的鸢尾花分类:准确率、召回率、精确率及ROC曲线分析

本文将介绍如何使用支持向量机(Support Vector Machine,SVM)算法构建一个鸢尾花分类模型。除了评估模型的准确率外,我们还将计算召回率、精确率,并绘制ROC曲线来评估模型性能。

1. 数据集准备

我们使用Scikit-learn库中自带的鸢尾花数据集。该数据集包含三种不同类型的鸢尾花样本,每种样本有150个,共计450个样本。每个样本有四个特征:萼片长度、萼片宽度、花瓣长度和花瓣宽度。

2. 模型构建与训练

我们使用Scikit-learn库中的SVC类来构建SVM模型。首先,我们将数据集划分为训练集和测试集,然后使用训练集训练模型。

3. 模型评估

除了使用accuracy_score函数计算准确率之外,我们还可以使用recall_score和precision_score函数来计算模型的召回率和精确率。此外,可以使用roc_curve函数和roc_auc_score函数来计算ROC曲线和AUC值。

4. 代码实现

以下是完整的代码:pythonfrom sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_splitfrom sklearn.svm import SVCfrom sklearn.metrics import accuracy_score, recall_score, precision_score, roc_curve, roc_auc_scoreimport matplotlib.pyplot as plt

加载鸢尾花数据集iris = load_iris()

划分数据集为训练集和测试集X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)

创建SVC模型并进行训练model = SVC()model.fit(X_train, y_train)

在测试集上进行预测y_pred = model.predict(X_test)

计算准确率、召回率、精确率accuracy = accuracy_score(y_test, y_pred)recall = recall_score(y_test, y_pred, average='weighted')precision = precision_score(y_test, y_pred, average='weighted')print('准确率:', accuracy)print('召回率:', recall)print('精确率:', precision)

计算ROC曲线和AUC值y_prob = model.decision_function(X_test) # 获取决策函数值fpr, tpr, thresholds = roc_curve(y_test, y_prob, pos_label=2)roc_auc = roc_auc_score(y_test, y_prob)print('AUC值:', roc_auc)

绘制ROC曲线plt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % roc_auc)plt.plot([0, 1], [0, 1], 'k--')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()

5. 总结

本文介绍了如何使用支持向量机算法构建鸢尾花分类模型,并使用多种指标评估模型性能。此外,我们还介绍了如何绘制ROC曲线,以及如何解释ROC曲线和AUC值。希望本文能帮助您更好地理解支持向量机算法及其应用。


原文地址: https://www.cveoy.top/t/topic/62v 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录