设计一个决策树算法,建立对模型评价、画出决策树、混淆矩阵、ROC曲线、对属性的重要性排序,数据集是乳腺癌数据集
时间: 2023-06-23 17:10:18 浏览: 113
基于Matlab实现决策树分类器在乳腺癌诊断中的应用研究仿真(源码+数据+文件说明).rar
5星 · 资源好评率100%
好的,我们来一步步完成这些任务。
首先,我们需要准备乳腺癌数据集,并将其分为训练集和测试集。这里我们使用sklearn库自带的乳腺癌数据集进行演示。代码如下:
```python
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
# 加载数据集
data = load_breast_cancer()
X = data.data
y = data.target
# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
```
接着,我们使用sklearn库中的DecisionTreeClassifier类来建立决策树模型。代码如下:
```python
from sklearn.tree import DecisionTreeClassifier
# 建立决策树模型
clf = DecisionTreeClassifier(random_state=42)
clf.fit(X_train, y_train)
```
现在,我们可以对模型进行评价了。我们可以使用sklearn库中的score()函数来计算模型在测试集上的准确率,代码如下:
```python
# 计算模型在测试集上的准确率
accuracy = clf.score(X_test, y_test)
print('Accuracy:', accuracy)
```
我们也可以使用sklearn库中的classification_report()函数来生成一个分类报告,其中包括准确率、召回率、F1值等指标。代码如下:
```python
from sklearn.metrics import classification_report
# 生成分类报告
y_pred = clf.predict(X_test)
print(classification_report(y_test, y_pred))
```
接下来,我们可以使用graphviz库来画出决策树。代码如下:
```python
from sklearn.tree import export_graphviz
import graphviz
# 导出决策树到dot文件
dot_data = export_graphviz(clf, out_file=None,
feature_names=data.feature_names,
class_names=data.target_names,
filled=True, rounded=True,
special_characters=True)
# 画出决策树
graph = graphviz.Source(dot_data)
graph
```
现在,我们可以绘制混淆矩阵和ROC曲线。混淆矩阵可以使用sklearn库中的confusion_matrix()函数来生成,ROC曲线可以使用sklearn库中的roc_curve()函数来生成。代码如下:
```python
from sklearn.metrics import confusion_matrix, roc_curve, roc_auc_score
import matplotlib.pyplot as plt
# 计算混淆矩阵
cm = confusion_matrix(y_test, y_pred)
print('Confusion Matrix:\n', cm)
# 绘制ROC曲线
y_score = clf.predict_proba(X_test)[:, 1]
fpr, tpr, thresholds = roc_curve(y_test, y_score)
roc_auc = roc_auc_score(y_test, y_score)
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()
```
最后,我们可以使用feature_importances_属性来计算各个属性的重要性,并绘制条形图来可视化。代码如下:
```python
import numpy as np
# 计算各个属性的重要性
importances = clf.feature_importances_
indices = np.argsort(importances)[::-1]
# 绘制条形图
plt.figure(figsize=(10, 5))
plt.title("Feature importances")
plt.bar(range(X_train.shape[1]), importances[indices],
color="r", align="center")
plt.xticks(range(X_train.shape[1]), data.feature_names[indices], rotation=90)
plt.xlim([-1, X_train.shape[1]])
plt.show()
```
至此,我们完成了决策树算法的设计,并对模型进行了评价、画出了决策树、混淆矩阵、ROC曲线、对属性的重要性排序。
阅读全文