Decision Tree
sklearn API
sklearn.tree.DecisionTreeClassifier(底层封装是二叉树,所以没有信息增益率没关系了)
- criterion{“gini”, “entropy”, “log_loss”}, default=”gini”. 基尼系数和信息增益(比起基尼系数,信息熵对不纯度更加敏感,对不纯度的惩罚最强。但在实际使用中,信息熵和基尼系数的效果基本相同。
同时,因为信息熵对不纯度更加敏感,所以信息熵作为指标时,决策树的生长会更加“精细”,因此对于高维数据或者噪音很多的数据,信息熵很容易过拟合,基尼系数在这种情况下效果往往会更好。) - splitter{“best”, “random”}, default=”best”
- max_depth int, default=None 树的最大深度
- min_samples_split int or float, default=2. 每个分支最少包含多少样本,节点切分,该节点最少包含2个样本
- min_samples_leaf int or float, default=1 叶子结点最少要1个样本
- min_weight_fraction_leaf float, default=0.0。 样本数占所有样本的比例
- max_features int, float or {“auto”, “sqrt”, “log2”}, default=None 寻找最佳分割时要考虑的特征数量:
- random_state int, RandomState instance or None, default=None
- max_leaf_nodes int, default=None 叶子结点的数量
- min_impurity_decrease float, default=0.0 如果该分裂导致杂质减少大于或等于该值,则该节点将被分裂。不存度减小的幅度
- class_weight dict, list of dict or “balanced”, default=None 类关联的权重。如果没有,所有的类都应该有一个权重。
- ccp_alpha non-negative float, default=0.0 用于最小成本复杂度修剪的复杂度参数。
属性:
- classes_ndarray形状 (n_classes,) 或 ndarray 列表
类标签(单输出问题),或类标签数组列表(多输出问题)。 - feature_importances_ndarray 形状 (n_features,)
返回特征重要性。 - max_features_int _
max_features 的推断值。 - n_classes_ int 或 int 列表
类数(对于单输出问题),或包含每个输出的类数的列表(对于多输出问题)。 - n_features_整数
已弃用:该属性n_features_在 1.0 中已弃用,并将在 1.2 中删除。 - n_features_in_ int
拟合期间看到的特征数。 - feature_names_in_ ndarray 的形状 ( n_features_in_,)
拟合期间看到的特征名称。仅当X 具有全为字符串的特征名称时才定义。 - n_outputs_int _
执行时的输出数fit。 - tree_树实例
基础树对象。请参阅 help(sklearn.tree._tree.Tree)树对象的属性和 了解决策树结构 以了解这些属性的基本用法。
前剪枝
max_depth等参数 。。。。
后减枝
REP-错误率代价减枝
PEP-悲观减枝
CCP-代价复杂度减枝
sklearn.tree.DecisionTreeRegressor
- criterion{“squared_error”, “friedman_mse”, “absolute_error”, “poisson”}, default=”squared_error”。 friedman_mse: 左子树的方差与右子树的方差之和
- splitter
- max_depth
- min_samples_split
- min_samples_leaf
- min_weight_fraction_leaf
- max_features
- random_state
- max_leaf_nodes
- min_impurity_decrease
- ccp_alpha
属性:
- classes_ndarray形状 (n_classes,) 或 ndarray 列表
类标签(单输出问题),或类标签数组列表(多输出问题)。 - feature_importances_ndarray 形状 (n_features,)
返回特征重要性。 - max_features_int _
max_features 的推断值。 - n_classes_ int 或 int 列表
类数(对于单输出问题),或包含每个输出的类数的列表(对于多输出问题)。 - n_features_整数
已弃用:该属性n_features_在 1.0 中已弃用,并将在 1.2 中删除。 - n_features_in_ int
拟合期间看到的特征数。 - feature_names_in_ ndarray 的形状 ( n_features_in_,)
拟合期间看到的特征名称。仅当X 具有全为字符串的特征名称时才定义。 - n_outputs_int _
执行时的输出数fit。 - tree_树实例
基础树对象。请参阅 help(sklearn.tree._tree.Tree)树对象的属性和 了解决策树结构 以了解这些属性的基本用法。
优点:
1.决策过程接近人的思维习惯。
12. 模型容易解释,比线性模型具有更好的解释性。
13. 能清楚地使用图形化描述模型。
14. 处理定型特征比较容易
代码
from __future__ import print_function, annotations
import os
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn import tree
## 加载数据
data_file = os.path.join(os.path.dirname(__file__), "../datasets/titanic/train_process.csv")
df = pd.read_csv(data_file)
df["Sex"] = df["Sex"].map({"female":0, "male":1})
X = df.drop(["Survived"], axis=1)
y = df["Survived"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=1314)
print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)
## 训练
clf = tree.DecisionTreeClassifier() #实例化
clf = clf.fit(X_train,y_train)#用训练集数据训练模型
result = clf.score(X_test, y_test)#导入测试集,从接口中调用需要的信息
print("result:", result)