sklearn之决策树和随机森林对iris的处理比较

# Iris鸢尾花数据集是常用的分类实验数据集,由Fisher, 1936收集整理。
# 是一类多重变量分析的数据集。分为3类,每类50个数据,每个数据包含4个属性。
# 可通过4个属性预测鸢尾花属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。
 
sklearn决策树
from sklearn import datasets,tree
import numpy as np
#载入数据集
iris=datasets.load_iris()
iris_data=iris['data']
iris_label=iris['target']
X=np.array(iris_data)
Y=np.array(iris_label)
#训练
clf=tree.DecisionTreeClassifier(max_depth=5)
clf.fit(X,Y)
#预测
print clf.predict([[4.1, 2.2, 2.3, 5.4]])
 
 
sklearn随机森林
from sklearn import datasets, ensemble
import numpy as np
iris=datasets.load_iris()
iris_data=iris['data']
iris_label=iris['target']
X=np.array(iris_data)
Y=np.array(iris_label)
clf = ensemble.RandomForestClassifier(max_depth=5, n_estimators=1, max_features=1)
clf.fit(X,Y)
print clf.predict([[4.1, 2.2, 2.3, 5.4]])
 
 
本意是想确认,当随机森林里n_estimators=1即森林数量1个时,看结果是否和决策树一致。
多次执行程序发现,两段代码的结果都是不唯一的。决策树在任何条件下的结果不都应该是唯一的吗?困惑!
先去学其他的,后面深入研究下sklearn的代码含义,再来解决这个问题。
 
Q:看了下sklearn决策树算法的predict_proba接口,它的解释是输出一个样本属于某个类的概率。但是我所理解的,每一个样本在给定的决策树下,最终应该只会属于一个类别,那也就是意味着这个样本属于那个类别的概率就应该是100%啊。那predict_proba这个接口是怎么计算所谓的概率的呢?不知道我是不是哪里理解错了。
A:这是《机器学习·升级版IV》中“决策树和随机森林”章节的问题。
答案非常简单:因为叶子节点是“纯结点”,假定某个叶子包含的三个类别的样本个数分别是(7,2,1),则如果某测试样本落在这个结点中,它判定这三个类别的概率分别是(0.7,0.2,0.1)。
 
 
posted @ 2019-11-01 14:01  数之美  阅读(1638)  评论(0编辑  收藏  举报