下面就为大家详细介绍一下 Scikit-learn 中的 sklearn.tree.DecisionTreeClassifier 函数的作用与使用方法的攻略。
函数作用介绍
sklearn.tree.DecisionTreeClassifier 主要用于拟合分类树模型,它能够根据特征的值将数据集划分为多个类别,对数据进行分类。利用分类树模型建立的决策规则非常直观易懂,因此在实际应用中得到了广泛的应用。
函数语法
class sklearn.tree.DecisionTreeClassifier(
criterion='gini',
splitter='best',
max_depth=None,
min_samples_split=2,
min_samples_leaf=1,
min_weight_fraction_leaf=0.0,
max_features=None,
random_state=None,
max_leaf_nodes=None,
min_impurity_decrease=0.0,
min_impurity_split=None,
class_weight=None,
presort=False)
函数参数说明
criterion
: 表示决策树划分时的评估指标,默认值为 ‘gini’;splitter
: 表示决策树中节点的分裂方式,默认值为 ‘best’;max_depth
: 表示决策树的最大深度,默认值为None
;min_samples_split
: 表示决策树节点分裂所需的最小样本数,默认值为 2;min_samples_leaf
: 表示叶子节点中最少的样本数,默认值为 1;min_weight_fraction_leaf
: 表示叶子节点中样本权重占比的最小值,默认值为 0.0;max_features
: 表示每个节点分裂时可用的最大特征数,默认值为None
;random_state
: 表示随机种子的值,默认值为None
;max_leaf_nodes
: 表示决策树最大的叶子节点数,默认值为None
;min_impurity_decrease
: 表示节点分裂所需最小的不纯度下降值,默认值为 0.0;min_impurity_split
: 停止分裂的阈值(小于等于该值时,分裂停止),已弃用;class_weight
: 每个类别的权重,可以是字典形式的权重,也可以是字符串形式的权重,可以选择 ‘balanced’,默认值为None
;presort
: 决定是否预先排序数据以加速训练,默认值为False
。
函数返回值
DecisionTreeClassifier 函数返回的是一个 DecisionTreeClassifier 对象,相当于一个分类树模型。
函数使用方法
使用 DecisionTreeClassifier 函数需要先将数据集进行处理,确保数据集中无缺失值,并且特征与标签已经分离。在将数据集转化成符合使用函数要求的格式后,就可以进行分类树模型的训练了。
下面给出两个实例:
实例一
本实例将介绍如何使用 DecisionTreeClassifier 函数对鸢尾花数据集进行分类。
首先,我们需要导入必要的库并读取数据集:
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
iris = load_iris()
df = pd.DataFrame(np.column_stack((iris.data, iris.target)), columns=iris.feature_names+['target'])
读取数据后,接下来需要将数据集拆分为特征和标签:
features = iris.data
target = iris.target
然后,我们可以使用 train_test_split 函数将数据集划分为训练集和测试集,并对训练集使用 DecisionTreeClassifier 进行训练:
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
X_train, X_test, y_train, y_test = train_test_split(features, target, random_state=0)
model = DecisionTreeClassifier(random_state=0)
model.fit(X_train, y_train)
训练完成后,我们可以使用测试集对模型进行评估,使用 accuracy_score 函数计算分类准确率:
from sklearn.metrics import accuracy_score
y_pred = model.predict(X_test)
score = accuracy_score(y_test, y_pred)
print(score)
在本示例中,我们使用了鸢尾花数据集,使用 DecisionTreeClassifier 训练鸢尾花数据集,并将测试集的分类准确率输出。
实例二
本实例将介绍如何使用 DecisionTreeClassifier 函数对泰坦尼克乘客是否幸存进行预测。
首先,我们需要导入必要的库并读取数据集(数据集的下载链接为:https://www.kaggle.com/c/titanic/data):
import pandas as pd
import numpy as np
df_train = pd.read_csv('train.csv')
df_test = pd.read_csv('test.csv')
读取数据后,我们需要进行数据的预处理,包括缺失值的填充、特征值的处理等:
# 对 Age 特征值进行中位数填充
median_value = df_train['Age'].median()
df_train['Age'] = df_train['Age'].fillna(median_value)
df_test['Age'] = df_test['Age'].fillna(median_value)
# 对 Embarked 特征值进行频率填充
most_frequency = df_train['Embarked'].mode()[0]
df_train['Embarked'] = df_train['Embarked'].fillna(most_frequency)
df_test['Embarked'] = df_test['Embarked'].fillna(most_frequency)
# 对 Fare 特征值进行平均数填充
mean_value = df_train['Fare'].mean()
df_test['Fare'] = df_test['Fare'].fillna(mean_value)
# 对 Parch 和 SibSp 进行组合处理,生成家庭人数特征
df_train['FamilySize'] = df_train['Parch'] + df_train['SibSp'] + 1
df_test['FamilySize'] = df_test['Parch'] + df_test['SibSp'] + 1
预处理完成后,我们需要对数据进行特征工程,将非数字特征转化为数值特征,并删除一些无用的特征:
# 将 Sex、Embarked 特征的字符串数据转化为数值
df_train['Sex'] = df_train['Sex'].factorize()[0]
df_test['Sex'] = df_test['Sex'].factorize()[0]
df_train['Embarked'] = df_train['Embarked'].factorize()[0]
df_test['Embarked'] = df_test['Embarked'].factorize()[0]
# 删除无用的特征,包括 Name、Ticket、Cabin 等
df_train = df_train.drop(['Name', 'Ticket', 'Cabin'], axis=1)
df_test = df_test.drop(['Name', 'Ticket', 'Cabin'], axis=1)
然后,我们可以使用 train_test_split 函数将数据集划分为训练集和测试集,并对训练集使用 DecisionTreeClassifier 进行训练:
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
# 取出训练集和测试集的特征和标签
features_train = df_train.drop(['Survived'], axis=1)
targets_train = df_train['Survived']
features_test = df_test
# 将训练集划分为新的训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(features_train, targets_train, test_size=0.2, random_state=0)
# 训练 DecisionTreeClassifier 模型
model = DecisionTreeClassifier(random_state=0)
model.fit(X_train, y_train)
训练完成后,我们可以使用测试集对模型进行评估,使用 accuracy_score 函数计算分类准确率:
from sklearn.metrics import accuracy_score
y_pred = model.predict(X_test)
score = accuracy_score(y_test, y_pred)
print(score)
在本示例中,我们使用了泰坦尼克号数据集,对训练集进行了缺失值填充、特征工程,并使用 DecisionTreeClassifier 训练泰坦尼克号数据集,并将测试集的分类准确率输出。
至此,我们已经完整地介绍了 DecisionTreeClassifier 函数的作用与使用方法,包括参数、返回值、使用示例等。