决策树容易过拟合,尤其是在你具有包含大量特征的数据时,复杂的决策树可能会过拟合数据
输出是连续或离散,分为回归和分类
名词:
实例:输入
函数
目标:答案
假设类:愿意考虑的所有函数
训练集:由所有的输入和与之配对的标签组成的集合
候选者:可能会使目标函数
测试集
决策树有特定的表示
决策节点:挑选一个特定的属性,提出该属性的问题,答案就是边所表示的值
顺序是由根节点到输出
构建决策树:
1.挑选一个最佳属性(将事物大致一分为二的同一特性)
2.提出问题
3.沿着答案的路径
3 返回1
直到把可能性空间缩小到一个示例
决策树可表达性:
and,or:复杂度n
xor:复杂度O(2^n)
决策树数量:2^2^n
需要用明智的算法选择合适的决策树:
ID3:
输出:id3决策树。
1) 若所有种类的属性都处理完毕,返回;否则执行2)
2)计算出信息增益最大属性a,把该属性作为一个节点。
如果仅凭属性a就可以对样本分类,则返回;否则执行3)
3)对属性a的每个可能的取值v,执行一下操作:
i. 将所有属性a的值是v的样本作为S的一个子集Sv;
ii. 生成属性集合AT=A-{a};
iii.以样本集合Sv和属性集合AT为输入,递归执行id3算法;
最佳属性标准(信息增益):
S:训练样本的集合
A:特定属性
Gain(S,A)=熵(S)-(具有特定值的每个样本集的预期或平均熵)
熵:测量随机性的一种方法
比如说将出现的红色 x 的数量和将出现的绿色 o 的数量,如果它们均匀分割 则它们的熵会是最大值。
在你可能看到的所有可能值中求和,该值的概率乘以该值的概率的对数,再乘以负一
ID3偏差:
限定偏差:集合(决策树可以在目前已提供离散变量的所有情况中表示的函数)
优选偏差:子集
偏向好的分割靠近顶部
偏向正确的答案
偏向更短的树
树过大过复杂,违反奥卡姆剃刀定律,会造成过拟合。交叉验证,剪枝等
from sklearn import tree
from class_vis import prettyPicture, output_image
clf = tree.DecisionTreeClassifier()
clf.fit(features_train, labels_train)
prettyPicture(clf, features_test, labels_test)
output_image("test.png", "png", open("test.png", "rb").read())