根据https://archive.ics.uci.edu/ml/datasets/Adult所给Adult数据集构建SVM分类器,并测试分类器的性能,输出性能指标并画出ROC曲线 python代码有注释
时间: 2023-07-19 22:16:46 浏览: 130
好的,我来为您解答。首先需要下载Adult数据集,然后安装sklearn库和matplotlib库。
以下是Python代码及注释:
```Python
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
from sklearn.svm import SVC
from sklearn.metrics import classification_report, confusion_matrix, roc_curve, auc
import matplotlib.pyplot as plt
# 读取数据集
data = pd.read_csv('adult.csv')
# 数据预处理
le = LabelEncoder()
data['workclass'] = le.fit_transform(data['workclass'])
data['education'] = le.fit_transform(data['education'])
data['marital-status'] = le.fit_transform(data['marital-status'])
data['occupation'] = le.fit_transform(data['occupation'])
data['relationship'] = le.fit_transform(data['relationship'])
data['race'] = le.fit_transform(data['race'])
data['sex'] = le.fit_transform(data['sex'])
data['native-country'] = le.fit_transform(data['native-country'])
data['income'] = le.fit_transform(data['income'])
# 划分训练集和测试集
X = data.drop('income', axis=1)
y = data['income']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
# 训练SVM分类器
svm = SVC(kernel='linear', probability=True)
svm.fit(X_train, y_train)
# 测试分类器性能
y_pred = svm.predict(X_test)
print(classification_report(y_test, y_pred))
print(confusion_matrix(y_test, y_pred))
# 画ROC曲线
y_pred_proba = svm.predict_proba(X_test)[:, 1]
fpr, tpr, thresholds = roc_curve(y_test, y_pred_proba)
roc_auc = auc(fpr, tpr)
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()
```
注释中已经解释了每一步的作用,这里简单说明一下:
1. 使用pandas库读取Adult数据集;
2. 使用sklearn库进行数据预处理,将非数字类型的特征转换为数字类型;
3. 使用train_test_split函数将数据集划分为训练集和测试集;
4. 使用SVM分类器进行模型训练;
5. 使用classification_report和confusion_matrix函数评估分类器性能;
6. 使用roc_curve和auc函数计算ROC曲线的FPR和TPR以及AUC;
7. 使用matplotlib库将ROC曲线绘制出来。
希望能对您有所帮助。
阅读全文