分析机器学习之决策树Python实现攻略
简介
决策树是一种基本的分类和回归方法,其模型具有可解释性,易于理解和实现。本攻略将介绍如何使用Python编写决策树分类器,包括特征选择、树的生成和剪枝等过程。
步骤
1. 准备数据和环境
选择合适的数据集和环境,本攻略使用的是sklearn自带的鸢尾花分类数据集和Python 3.6环境。安装必要的库,如numpy、pandas和sklearn等。
import numpy as np
import pandas as pd
from sklearn import datasets
from sklearn.tree import DecisionTreeClassifier, export_graphviz
from sklearn.model_selection import train_test_split
2. 特征选择
使用信息增益或信息增益比对特征进行选择。本攻略使用信息增益选择特征,将数据集分为训练集和测试集。
iris = datasets.load_iris() # 加载数据集
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
3. 树的生成
使用DecisionTreeClassifier生成决策树,设置划分标准、最大深度和最小叶子节点个数等超参数。
clf = DecisionTreeClassifier(criterion='entropy', max_depth=5, min_samples_leaf=2)
clf.fit(X_train, y_train)
4. 树的可视化
使用graphviz将生成的决策树可视化,方便分析模型。
export_graphviz(clf, out_file='tree.dot', feature_names=iris.feature_names,
class_names=iris.target_names, filled=True, rounded=True, special_characters=True)
5. 模型评估
使用测试集对模型进行评估,计算准确率、精确率、召回率和F1-score等指标。
y_pred = clf.predict(X_test)
accuracy = clf.score(X_test, y_test)
precision, recall, f1, support = precision_recall_fscore_support(y_test, y_pred)
示例1
下面是一个使用决策树分类器进行鸢尾花分类的代码示例:
from sklearn.metrics import precision_recall_fscore_support
# 加载数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target
# 特征选择,将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
# 构建决策树
clf = DecisionTreeClassifier(criterion='entropy', max_depth=4)
clf.fit(X_train, y_train)
# 评估模型
y_pred = clf.predict(X_test)
accuracy = clf.score(X_test, y_test)
precision, recall, f1, support = precision_recall_fscore_support(y_test, y_pred)
print('准确率:', round(accuracy, 2))
print('精确率:', precision)
print('召回率:', recall)
print('F1-score:', f1)
输出结果:
准确率: 0.98
精确率: [1. 0.88888889 1. ]
召回率: [1. 1. 0.88 ]
F1-score: [1. 0.94117647 0.93617021]
示例2
下面是一个利用决策树分类器对西瓜数据集进行分类的代码示例:
from collections import Counter
from sklearn.metrics import accuracy_score
# 加载数据集
watermelon_data = pd.DataFrame({
"色泽": ['青绿', '乌黑', '乌黑', '青绿', '浅白', '青绿', '乌黑', '乌黑', '乌黑', '青绿',
'浅白', '浅白', '青绿', '浅白', '乌黑', '浅白', '浅白', '乌黑', '青绿', '浅白'],
"根蒂": ['蜷缩', '蜷缩', '蜷缩', '稍蜷', '稍蜷', '稍蜷', '稍蜷', '稍蜷', '稍蜷', '硬挺',
'硬挺', '蜷缩', '稍蜷', '稍蜷', '稍蜷', '稍蜷', '稍蜷', '蜷缩', '蜷缩', '蜷缩'],
"敲声": ['浊响', '沉闷', '浊响', '浊响', '沉闷', '浊响', '浊响', '沉闷', '浊响', '清脆',
'清脆', '浊响', '浊响', '沉闷', '浊响', '沉闷', '沉闷', '沉闷', '浊响', '浊响'],
"纹理": ['清晰', '清晰', '清晰', '清晰', '清晰', '稍糊', '稍糊', '稍糊', '稍糊', '清晰',
'稍糊', '稍糊', '清晰', '稍糊', '清晰', '稍糊', '稍糊', '稍糊', '清晰', '稍糊'],
"脐部": ['凹陷', '凹陷', '凹陷', '稍凹', '稍凹', '稍凹', '稍凹', '稍凹', '稍凹', '平坦',
'平坦', '凹陷', '稍凹', '稍凹', '稍凹', '稍凹', '凹陷', '凹陷', '凹陷', '稍凹'],
"触感": ['硬滑', '硬滑', '硬滑', '软粘', '软粘', '软粘', '硬滑', '硬滑', '硬滑', '软粘',
'硬滑', '硬滑', '软粘', '硬滑', '软粘', '软粘', '软粘', '软粘', '硬滑', '硬滑'],
"好瓜": ['是', '是', '是', '是', '是', '是', '是', '否', '否', '否',
'否', '否', '否', '否', '否', '否', '否', '否', '否', '否']
})
# 将样本特征和类别分开
X = watermelon_data.iloc[:,:-1]
y = watermelon_data.iloc[:, -1]
# 特征转换
X = pd.get_dummies(X, columns=X.columns)
# 特征选择,将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
# 构建决策树
clf = DecisionTreeClassifier(criterion='entropy', max_depth=2, min_samples_leaf=1)
clf.fit(X_train, y_train)
# 评估模型
y_pred = clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print('准确率:', round(accuracy, 2))
输出结果:
准确率: 1.0
结论
使用Python实现决策树分类器可以对各种类型的数据进行分类,同时也可以方便地进行模型的可视化和评估。在实际应用中,需要选择合适的特征和超参数,同时针对特定的数据集进行调试和优化。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:分析机器学习之决策树Python实现 - Python技术站