我有一个用于预测团队是否赢得比赛的数据集,其中每一行对应一个训练样例,每一列对应一个特定特征。我希望决策树基于每一列中的每个特征进行分割,以确定最终的回归值:
Train= [['0' '0' '1' '-1' '8' '-9'] ['-15' '0' '0' '18' '7' '11'] ['-8' '0' '0' '8' '2' '6'] ... ['11' '0' '2' '-15' '-3' '-12'] ['3' '0' '-1' '-16' '-15' '-1'] ['-3' '0' '0' '-6' '4' '-10']]Result=[1,1,0,...,1]
基于输出回归值(实际上是他们赢的概率),我应用一个阈值函数将输出分类为’1’(赢)或’0’(输)。这不能直接转化为分类问题,因为概率是一个重要的中间步骤。
我想知道直接使用sci-kit learn的决策树分类器是否有帮助:
regr_2 = DecisionTreeRegressor(max_depth=6)regr_2.fit(Train, Result)
我还看到了这个关于决策树的教程,我也想知道在这种情况下我是否应该从头开始构建决策树。sci-kit learn函数是如何创建分割的?它是否执行我打算做的事情?请告诉我我的方法中可能存在的缺陷。
另外,max_features和max_depth有什么区别?
回答:
Sci-kit learn默认使用基尼不纯度度量(见基尼不纯度,维基百科)来分割决策树的分支。这种方法通常效果很好,除非你对数据有很好的了解并且知道如何进行分割,否则最好使用Sci-kit learn的默认设置。
关于max_depth:这是你的树的最大深度,你不希望它很大,因为你可能会过度拟合训练数据。
关于max_features:每次进行分割时,你的训练算法会查看一定数量的特征,并选择其中度量最优的特征(在本例中为基尼不纯度),然后根据该特征创建两个分支。每次查看所有特征在计算上是繁重的,因此你可以只检查其中的一些。max_features则是每次在节点上创建一对分支时查看的特征数量。