1.graphviz的安装,参考:https://www.cnblogs.com/theoup/articles/9976898.html
2.决策树相关知识:
(1)特征选取:数据特征选择,规则生成,if-lese
(2)树的生成:根据选好的特征生成一棵树,生成的原则是,所有训练数据都能分配到相应的叶节点。
(3)树的剪枝:使得树生成效果准确,好。但是过程中存在过度拟合情况。过度拟合,指模型对训练数据的效果很好,但是对测试数据的效果差,泛化能力较弱。解决决策树过度拟合的方法是对决策树进行剪枝。它的依据是,剪枝前和剪枝后的决策树整体损失函数最小。控制深度和广度。
from matplotlib import pyplot as plt
import pandas as pd
from sklearn import datasets
# 载入数据集
iris = datasets.load_iris()
iris.data, iris.target
from sklearn.tree import DecisionTreeClassifier
# 建立模型
model = DecisionTreeClassifier()
# 模型训练
model.fit(iris.data, iris.target)
from sklearn.tree import export_graphviz
import graphviz
img = export_graphviz(
model, out_file=None,
feature_names=iris.feature_names, # 传入特征名称
class_names=iris.target_names, # 传入类别值
filled=True, node_ids=True,
rounded=True)
graphviz.Source(img) # 展示决策树

决策树和随机森林的不同:随机森林不只是建立一颗树,而是建立一堆树。与决策树不同,随机森林每次只从全部数据集中随机抽取一部分数据用于生成树。另外,随机森林在生成树的时候不会剪枝。
随机森林优点:
可以处理大量的数据;
可以在特征不均衡时,依然维持较高的准确度;
随机森林学习速度快,一般情况下,结果比单纯应用决策树要好。
决策树和随机森林预测比较:
from sklearn.ensemble import RandomForestClassifier
X_train = iris.data[:120]
X_test = iris.data[120:]
y_train = iris.target[:120]
y_test = iris.target[120:]
# 建立模型
model_tree = DecisionTreeClassifier(random_state=10)
model_random = RandomForestClassifier(random_state=10, n_estimators=10)
# 训练模型并验证
model_tree.fit(X_train, y_train)
s1 = model_tree.score(X_test, y_test)
model_random.fit(X_train, y_train)
s2 = model_random.score(X_test, y_test)
print('DecisionTree:', s1)
print('RandomForest:', s2)
#结果:
DecisionTree: 0.7333333333333333
RandomForest: 0.8333333333333334
网友评论