SKLEARN-1

1. 决策树及建模基本流程

目标:将表格转化成一棵树
在这里插入图片描述
在这里插入图片描述

2.DecisionTreeClassifier

观察参数
在这里插入图片描述

2.1 重要参数

2.1.1 criterion(尺度;标准)

为了要将表格转化为一棵树,决策树需要找出最佳节点和最佳的分枝方法,
对分类树来说,衡量这个"最佳"的指标叫做’不纯度’。 通常来说,不纯度越低,决策树对训练集的拟合越好。 现在使用的决策树算法在分枝方法上的核心大多是围绕在对某个不纯度相关指标的最优化上。
不纯度基于节点来计算,树中的每个节点都会有一个不纯度,并且子节点的不纯度一定是低于父节点的, 也就是说,在同一棵决策树上,叶子节点的不纯度一定是最低的。
Criterion这个参数正是用来决定不纯度的计算方法的。sklearn提供了两种选择:1)输入”entropy“,使用信息熵(Entropy)2)输入”gini“,使用基尼系数(Gini Impurity)
其中t代表给定的节点,i代表标签的任意分类, p ( i ∣ t ) p(i|t) p(it)代表标签分类i在节点t上所占的比例。注意,当使用信息熵时,sklearn实际计算的是基于信息熵的信息增益(Information Gain),即父节点的信息熵和子节点的信息熵之差。比起基尼系数,信息熵对不纯度更加敏感,对不纯度的惩罚最强。但是在实际使用中,信息熵和基尼系数的效果基本相同。信息熵的计算比基尼系数缓慢一些,因为基尼系数的计算不涉及对数。另外,因为信息熵对不纯度更加敏感,所以信息熵作为指标时,决策树的生长会更加“精细”,因此对于高维数据或者噪音很多的数据,信息熵很容易
过拟合,基尼系数在这种情况下效果往往比较好。当然,这不是绝对的。
在这里插入图片描述

2.1.2 实现一棵树,随机性参数

画图成功!


在这里插入图片描述

3. 决策树剪枝

过拟合:它会在训练集上表现很好,在测试集上却表现糟糕

sklearn提供剪枝策略:

3.1 max_depth

限制树的最大深度,超过设定深度的树枝全部剪掉

3.2 min_samples_leaf & min_samples_split

min_samples_leaf限定,一个节点在分枝后的每个子节点都必须包含至少min_samples_leaf个训练样本,否则分
枝就不会发生,或者,分枝会朝着满足每个子节点都包含min_samples_leaf个样本的方向去发生。
一般搭配max_depth使用,在回归树中有神奇的效果,可以让模型变得更加平滑。这个参数的数量设置得太小会引
起过拟合,设置得太大就会阻止模型学习数据。一般来说,建议从=5开始使用。如果叶节点中含有的样本量变化很
大,建议输入浮点数作为样本量的百分比来使用。同时,这个参数可以保证每个叶子的最小尺寸,可以在回归问题
中避免低方差,过拟合的叶子节点出现。对于类别不多的分类问题,=1通常就是最佳选择。
min_samples_split限定,一个节点必须要包含至少min_samples_split个训练样本,这个节点才允许被分枝,否则
分枝就不会发生。

3.3 max_features & min_impurity_decrease

一般max_depth使用,用作树的”精修“
max_features限制分枝时考虑的特征个数,超过限制个数的特征都会被舍弃。和max_depth异曲同工,
max_features是用来限制高维度数据的过拟合的剪枝参数,但其方法比较暴力,是直接限制可以使用的特征数量
而强行使决策树停下的参数,在不知道决策树中的各个特征的重要性的情况下,强行设定这个参数可能会导致模型
学习不足。如果希望通过降维的方式防止过拟合,建议使用PCA,ICA或者特征选择模块中的降维算法。
min_impurity_decrease限制信息增益的大小,信息增益小于设定数值的分枝不会发生。这是在0.19版本种更新的
功能,在0.19版本之前时使用min_impurity_split。

确认最优的剪枝参数
那具体怎么来确定每个参数填写什么值呢?

这时候,我们就要使用确定超参数的曲线来进行判断了,继续使用我们
已经训练好的决策树模型clf。超参数的学习曲线,是一条以超参数的取值为横坐标,模型的度量指标为纵坐标的曲
线,它是用来衡量不同超参数取值下模型的表现的线。在我们建好的决策树里,我们的模型度量指标就是score。

3.4 目标权重参数-class_weight & min_weight_fraction_leaf

完成样本标签平衡的参数。样本不平衡是指在一组数据集中,标签的一类天生占有很大的比例。比如说,在银行要
判断“一个办了信用卡的人是否会违约”,就是是vs否(1%:99%)的比例。这种分类状况下,即便模型什么也不
做,全把结果预测成“否”,正确率也能有99%。因此我们要使用class_weight参数对样本标签进行一定的均衡,给
少量的标签更多的权重,让模型更偏向少数类,向捕获少数类的方向建模。该参数默认None,此模式表示自动给
与数据集中的所有标签相同的权重。
有了权重之后,样本量就不再是单纯地记录数目,而是受输入的权重影响了,因此这时候剪枝,就需要搭配min_
weight_fraction_leaf这个基于权重的剪枝参数来使用。另请注意,基于权重的剪枝参数(例如min_weight_
fraction_leaf)将比不知道样本权重的标准(比如min_samples_leaf)更少偏向主导类。如果样本是加权的,则使
用基于权重的预修剪标准来更容易优化树结构,这确保叶节点至少包含样本权重的总和的一小部分。

4. 重要属性和接口

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

<think>好的,用户想查找关于sklearn-opt的教学资源或示例代码。首先需要明确用户提到的“sklearn-opt”具体指哪个库,因为名称可能有误或存在多个类似名称的库。根据之前提供的引用,用户之前提到了“Sklearn-Genetic-Opt”和“nn-bayesian-optimization”,这两个库都与优化相关,但名称不同。 检查引用[1],用户提到“Sklearn-Genetic-Opt”是基于进化算法的模型调优工具,并提供了安装命令。引用[5]提到的是“nn-bayesian-optimization”,使用神经网络进行贝叶斯优化。因此,用户可能混淆了库的名称,或者想找的是与scikit-learn兼容的优化库。 接下来,用户需要教程或示例代码,应该优先参考官方文档和示例。对于Sklearn-Genetic-Opt,引用[1]中提到了安装步骤,但未提供详细的使用方法。可能需要引导用户查看官方GitHub页面或文档,通常这些资源会有示例代码和教程。 另外,引用[3]中提到了使用SageMaker的SKLearn估计器,这可能与模型训练相关,但不确定是否与用户的问题直接相关。引用[2]和[4]更多涉及一般使用和Python的应用,可能帮助不大。 用户可能的需求是优化scikit-learn模型的超参数,因此需要明确他们具体想用哪种优化方法:遗传算法、贝叶斯优化等。根据引用[1]和[5],分别对应两种不同的优化方法,可能需要分别介绍。 需要确认用户是否有特定的优化算法需求,或者只是寻找通用的优化工具。在回答中应覆盖这两种可能性,并提供相应的资源链接和示例代码,如遗传算法优化和贝叶斯优化的基本使用步骤。 此外,用户可能需要安装指南和基本示例,所以应分步骤说明如何安装库,并给出一个简单的分类或回归任务的示例,展示如何集成到scikit-learn的工作流中。同时,提醒用户注意版本兼容性和可能的依赖问题。 最后,生成相关问题,帮助用户深入探索,比如如何选择优化算法、比较不同方法的优劣,或者处理实际应用中的问题。这些相关问题应基于提供的引用和常见的使用场景来设计。</think>根据您提到的"sklearn-opt",结合相关引用信息,可能是指以下两个方向的优化工具库,以下是具体资源指引: ### 一、Sklearn-Genetic-Opt(基于遗传算法) 这是专门为scikit-learn模型设计的超参数优化工具,采用遗传算法实现[^1] **安装命令:** ```bash pip install sklearn-genetic-opt ``` **基础使用示例:** ```python from sklearn_genetic import GASearchCV from sklearn_genetic.space import Continuous, Categorical, Integer from sklearn.svm import SVC param_grid = { 'kernel': Categorical(['linear', 'rbf']), 'C': Continuous(0.1, 10), 'gamma': Continuous(1e-4, 1e-1) } clf = GASearchCV( estimator=SVC(), cv=5, param_grid=param_grid, population_size=50, generations=30 ) clf.fit(X, y) print(clf.best_params_) ``` ### 二、nn-bayesian-optimization(贝叶斯优化) 结合神经网络的贝叶斯优化实现[^5] **项目地址:** ```python # 安装后基础使用示例 from nn_bayesian_optimization import BayesianOptimizer optimizer = BayesianOptimizer( model=your_sklearn_model, param_bounds={ 'param1': (0, 1), 'param2': (10, 100) } ) optimizer.maximize(init_points=5, n_iter=15) ``` ### 三、官方资源指引 1. Sklearn-Genetic官方文档: https://sklearn-genetic-opt.readthedocs.io 2. 贝叶斯优化代码示例: https://gitcode.com/gh_mirrors/nn/nn-bayesian-optimization 3. scikit-learn集成示例参考: SageMaker训练示例中的参数传递方式[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值