在这篇文章中,我将使用python中的决策树(用于分类)。重点将放在基础知识和对最终决策树的理解上。
因此,首先我们进行一些导入。
接下来,我们需要考虑一些数据。我将使用著名的iris数据集,该数据集可对各种不同的iris类型进行各种测量。pandas和sckit-learn都可以轻松导入这些数据,我将使用pandas编写一个从csv文件导入的函数。这样做的目的是演示如何将scikit-learn与pandas一起使用。因此,我们定义了一个获取iris数据的函数:
下一步是获取数据,并使用head()和tail()方法查看数据的样子。因此,首先获取数据:
然后 :
从这些信息中,我们可以讨论我们的目标:给定特征SepalLength, SepalWidth, PetalLength 和PetalWidth来预测iris类型。
为了将这些数据传递到scikit-learn,我们需要将Names编码为整数。为此,我们将编写另一个函数,并返回修改后的数据框以及目标(类)名称的列表:
让我们看看有什么:
接下来,我们获得列的名称:
现在,我们可以使用 上面导入的DecisionTreeClassifier拟合决策树,如下所示:
我们可以使用以下功能生成图形:
运行函数:
结果
我们可以使用此图来了解决策树发现的模式:
最后,我们考虑生成代表学习的决策树的伪代码。
应用于iris数据的结果输出为:
将其与上面的图形输出进行比较-这只是决策树的不同表示。
首先,我们导入所有代码:
主要添加的内容是sklearn.grid_search中的方法,它们可以:
现在我们可以开始编写函数了。
包括:
接下来,我们添加一些新功能来进行网格和随机搜索,并报告找到的主要参数。首先是报告。此功能从网格或随机搜索中获取输出,打印模型的报告并返回最佳参数设置。
网格搜索
接下来是run_gridsearch。该功能需要
param_grid是一组参数,这将是作测试,要注意不要列表中有太多的选择。
随机搜寻
接下来是run_randomsearch函数,该函数从指定的列表或分布中采样参数。与网格搜索类似,参数为:
好的,我们已经定义了所有函数。
获取数据
接下来,让我们使用上面设置的搜索方法来找到合适的参数设置。首先进行一些初步准备-获取数据并构建目标数据:
第一次交叉验证
在下面的所有示例中,我将使用10倍交叉验证。
使用当前参数设置,在所有组合上重复此操作,以产生十个模型精度估计。通常会报告十个评分的平均值和标准偏差。
0.960还不错。这意味着平均准确性(使用经过训练的模型进行正确分类的百分比)为96%。该精度非常高,但是让我们看看是否可以找到更好的参数。
网格搜索的应用
首先,我将尝试网格搜索。字典para_grid提供了要测试的不同参数设置。
在大多数运行中,各种参数设置的平均值为0.967。这意味着从96%改善到96.7%!我们可以看到最佳的参数设置ts_gs,如下所示:
并复制交叉验证结果:
接下来,让我们使用获取最佳树的伪代码:
我们还可以制作决策树的图形:
随机搜索的应用
接下来,我们尝试使用随机搜索方法来查找参数。在此示例中,我使用288个样本,以便测试的参数设置数量与上面的网格搜索相同:
与网格搜索一样,这通常会找到平均精度为0.967或96.7%的多个参数设置。如上所述,最佳交叉验证的参数为:
并且,我们可以再次测试最佳参数:
要查看决策树是什么样的,我们可以生成伪代码以获得最佳随机搜索结果
并可视化树
因此,我们使用了带有交叉验证的网格和随机搜索来调整决策树的参数。在这两种情况下,从96%到96.7%的改善都很小。当然,在更复杂的问题中,这种影响会更大。最后几点注意事项:
大数据部落 -中国专业的第三方数据服务提供商,提供定制化的一站式数据挖掘和统计分析咨询服务
统计分析和数据挖掘咨询服务:y0.cn/teradat(咨询服务请联系官网客服)
【服务场景】
科研项目; 公司项目外包;线上线下一对一培训;数据爬虫采集;学术研究;报告撰写;市场调查。
【大数据部落】提供定制化的一站式数据挖掘和统计分析咨询
欢迎选修我们的R语言数据分析挖掘必知必会课程!
python中使用scikit-learn和pandas决策树进行iris鸢尾花数据分类建模和交叉验证
原文:https://www.cnblogs.com/tecdat/p/12014191.html