机器学习实践———朴素贝叶斯、决策树

朴素贝叶斯分类器

与线性模型相似,相比起来训练速度更快,但是模型泛化能力稍差。高效的原因是通过查看每个特征来学习参数,从每个特征中收集简单的类别统计数据。

sklearn中实现了3种朴素贝叶斯分类器:

  1. GuassianNB:高斯贝叶斯分类器,应用于任意连续数据。保存每个类别中每个特征的平均值和标准差。
  2. BernoulliNB:伯努利贝叶斯分类器,输入数据是二分类数据。计算每个类别中每个特征不为0的元素个数。
  3. MultinomialNB:多项式贝叶斯分类器,假定输入数据是计数数据。比如说一个词的出现次数。计算每个类别中每个特征的平均值。

BernoulliNB和MultinomialNB主要用在文本分类中。

具体可参考sklearn官方文档

决策树

决策树是从一层层的if/else问题中学习的,这些问题叫做测试。一系列问题可以表示为一棵决策树。

1、构造决策树

  • 将所有数据当做一个根结点,通过测试对数据集进行划分。
  • 若测试结果为真,将这个点分配到左边的结点,否则分配到右边。每个结点都包含一个测试。
  • 对数据反复进行递归划分,直到每个叶结点只包含单一类别。若叶结点中数据点的目标值相同,则为纯叶结点。

2、控制决策树的复杂度

通常来说,如果叶结点都是纯的会导致模型非常复杂,因为它要去拟合每个数据,造成过拟合。
防止过拟合有两种常见的策略:

  • 预剪枝:及早停止树的生长。可通过限制树的最大深度,限制叶结点的最大数目,规定一个结点中数据点的最小数目。
  • 后剪枝:先构造树,随后删除或折叠信息少的结点。

sklearn实现决策树在DecisionTreeClassifier和DecisionTreeRegressor中。只实现了预剪枝,没有后剪枝。

from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_breast_cancer

cancer=load_breast_cancer()
X_train,X_test,y_train,y_test=train_test_split(cancer.data,cancer.target,stratify=cancer.target,random_state=42)

tree=DecisionTreeClassifier().fit(X_train,y_train)
print("train acc={}".format(tree.score(X_train,y_train)))
print("test acc={}".format(tree.score(X_test,y_test)))

输出:
train acc=1.0
test acc=0.9230769230769231

可以看到训练集上的精度是100%,这棵树直到划分到纯叶结点才停止的。
它对测试集的数据泛化能力不好,接下来通过限制树的深度来停止生长,避免过拟合问题。

tree=DecisionTreeClassifier(max_depth=4).fit(X_train,y_train)#将深度设为4,意味着只可以连续问4个问题。
print("train acc={:.3f}".format(tree.score(X_train,y_train)))
print("test acc={:.3f}".format(tree.score(X_test,y_test)))

输出:
train acc=0.988
test acc=0.944

3、决策树可视化

将决策树可视化有助于理解算法是如何预测的。

生成.dot文件

from sklearn.tree import export_graphviz#可视化树,生成一个.dot文件,保存图形的文本文件格式
export_graphviz(tree,out_file="tree.dot",class_names=["malignant","benign"],
                feature_names=cancer.feature_names,impurity=False,filled=
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值