数据挖掘系列笔记(4)——决策树和随机森林

决策树和随机森林的概念理解:

决策树:是构建一个二叉树模型,利用对象的某些特征值,下降分类的范围,直到得到确定的一个类别。

理解方法:可以参考之前的ONER算法,那边是用一个特征值,然后根据特征值的区间或者离散点的分布,然后直接IF、ELSE得到类别。决策树的训练和它类似,是用部分特征值和分类结果进行训练,得到一个树状的判断序列,利用序列得到分类结果。

实验依然使用sklearn的库实现。scikit-learn库实现了分类回归树(Classification and Regression Trees,CART)算法并将
其作为生成决策树的默认算法,它支持连续型特征和类别型特征。

跟大多数分类算法一样,决策树也分为两大步骤。

  • 首先是训练阶段,用训练数据构造一棵树。上一章的近邻算法没有训练阶段,但是决策树需要。从这个意义上说,近邻算法是一种惰性算法,在用它进行分类时,它才开始干活。相反,决策树跟大多数机器学习方法类似,是一种积极学习的算法,在训练阶段完成模型的创建。
  • 其次是预测阶段,用训练好的决策树预测新数据的类别。以上图为例,["is raining","very windy"]的预测结果为“Bad”(坏天气)。

算法中的关键参数:

需要明确的是,决策树的退出准则是重要特性,因为构建树的时候,最后几步决策很大程度影响整体模型,因此整个算法特别容易出现过拟合的情况。合适的退出准则能够防止出现过拟合导致决策精度过高。和退出准则类似,算法也可先构建完整的树,然后进行修剪,去掉并没有提供太多信息的节点,这个过程叫做剪枝。

SKLearn提供的算法可以通过以下参数控制退出:

  • min_samples_split:指定创建一个新节点至少需要的个体数量。控制节点创建
  • min_samples_leaf:指定为了保留节点,每个节点至少应该包含的个体数量。决定是否保留节点

决策树的和创建相关的参数标准有多个参数,常用的有:

  • 基尼不纯度(Gini impurity):用于衡量决策节点错误预测新个体类别的比例。
  • 信息增益(Information gain):用信息论中的熵来表示决策节点提供多少新信息。

算法的具体原理这里暂不讨论。

使用方法:

from sklearn.tree import DecisionTreeClassifier # 算法模块
from sklearn.model_selection import cross_val_score    # 测试模块
clf = DecisionTreeClassifier(random_state=14)

X_previouswins = dataset[["HomeLastWin", "VisitorLastWin"]].values    #选特征值
scores = cross_val_score(clf, X_previouswins, y_true, scoring='accuracy')    #直接验证
print("Using just the last result from the home and visitor teams")
print("Accuracy: {0:.1f}%".format(np.mean(scores) * 100))

一棵决策树可以学到很复杂的规则。然而,很可能会导致过拟合问题——学到的规则只适用于训练集。解决方法之一就是调整决策树算法,限制它所学到的规则的数量。例如,把决策树的深度限制在三层,只让它学习从全局角度拆分数据集的最佳规则,不让它学习适用面很窄的特定规则,这些规则会将数据集进一步拆分为更加细致的群组。使用这种折中方案得到的决策树泛化能力强,但整体表现稍弱。

因此诞生了随机森林:创建多棵决策树,用它们分别进行预测,再根据少数服从多数的原则从多个预测结果中选择最终预测结果。每课决策树都是从数据集随机取出一部分数据,以防止不同的决策树之间的相似性。

SKLearn库里面的决策森林算法:RandomForestClassifier,和决策树不同的地方,随机森林引入了更多的参数:

  • n_estimators:用来指定创建决策树的数量。该值越高,所花时间越长,正确率(可能)越高。
  • oob_score:如果设置为真,测试时将不使用训练模型时用过的数据。
  • n_jobs:采用并行计算方法训练决策树时所用到的内核数量。
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(random_state=14)
scores = cross_val_score(clf, X_all, y_true, scoring='accuracy')
print("Using whether the home team is ranked higher")
print("Accuracy: {0:.1f}%".format(np.mean(scores) * 100))

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这篇笔记主要介绍了Pandas模块的基本操作和使用方法。Pandas是Python中一个用于数据分析和处理的常用库,提供了高效的数据构和数据分析工具,是进行数据处理和数据挖掘的重要工具之一。 一、Pandas数据构 Pandas主要有两种数据构:Series和DataFrame。 1. Series Series是一种类似于一维数组的对象,由一组数据和一组与之相关的标签(即索引)组成。Series的创建方式如下: ```python import pandas as pd # 通过列表创建Series s = pd.Series([1, 3, 5, np.nan, 6, 8]) # 通过字典创建Series s = pd.Series({'a': 1, 'b': 2, 'c': 3}) ``` 2. DataFrame DataFrame是一种二维表格数据构,由一组数据和一组行索引和列索引组成。DataFrame的创建方式有很多种,最常用的是通过字典创建。例如: ```python import pandas as pd data = {'name': ['Tom', 'Jerry', 'Mike'], 'age': [18, 20, 22], 'gender': ['M', 'M', 'F']} df = pd.DataFrame(data) ``` 二、Pandas的基本操作 1. 数据读取 Pandas可以读取多种格式的数据文件,如CSV、Excel、SQL等。常用的读取CSV文件的方式如下: ```python import pandas as pd df = pd.read_csv('data.csv') ``` 2. 数据预处理 数据预处理是数据挖掘中非常重要的一部分,Pandas提供了很多方便的函数和方法来进行数据清洗和转换。常用的数据预处理函数和方法有: - 处理缺失值 ```python # 判断是否存在缺失值 df.isnull() # 删除缺失值 df.dropna() # 填充缺失值 df.fillna(value) ``` - 处理重复值 ```python # 删除重复值 df.drop_duplicates() ``` - 数据转换 ```python # 数据类型转换 df.astype() # 数据替换 df.replace() ``` 3. 数据分析 Pandas提供了各种数据分析和处理的方法和函数,常用的包括: - 统计函数 ```python # 计算平均值 df.mean() # 计算标准差 df.std() # 计算最大值和最小值 df.max(), df.min() ``` - 排序 ```python # 按照某列排序 df.sort_values(by='column_name') ``` - 数据聚合 ```python # 对某列数据进行分组求和 df.groupby('column_name').sum() ``` 以上是Pandas模块的基础内容,还有很多高级用法和技巧需要进一步学习和掌握。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值