- 博客(27)
- 收藏
- 关注
原创 机器学习网格搜索超参数优化实战(随机森林) ##4
max_depth本轮最优取值为9,能够进一步肯定max_depth最终的最优取值也就是9、10左右;至此,大致得到最优结果,往后调优思路可大致照此.
2024-02-15 19:55:57
1673
1
原创 机器学习逻辑回归模型训练与超参数调优 ##3
而在这些所有超参数中,对模型结果影响较大的参数主要有两类,其一是正则化项的选择,同时也包括经验风险项的系数与损失求解方法选择,第二类则是迭代限制条件,主要是max_iter和tol两个参数,当然,在数据量较小、算力允许的情况下,我们也可以直接设置较大max_iter、同时设置较小tol数值。接下来执行网格搜索,在网格搜索评估器的使用过程中,只需要输入搜索的评估器(也就是机器学习流)和评估器的参数空间即可,当然若想提高运行速度,可以在n_jobs中输入调用进程数,一般保守情况数值可以设置为当前电脑核数。
2024-02-05 18:42:58
2114
原创 机器学习数据预处理方法(数据重编码) ##2
如果从效果上看,preprocess_col和我们单独使用多分类独热编码处理离散变量过程并无区别,但实际上我们更推荐使用preprocess_col来进行处理,原因主要有以下几点:其一,通过preprocess_col处理后的数据集无需再进行拼接工作,preprocess_col能够直接输出离散变量独热编码+连续变量保持不变的数据集;在执行单独的转化器时,我们需要单独将要转化的列提取出来,然后对其转化,并且在转化完成后再和其他列拼接成新的数据集。
2024-02-05 12:31:58
1104
原创 机器学习数据预处理--连续变量分箱
连续字段的离散化能够更加简洁清晰的呈现特征信息,并且能够极大程度减少异常值的影响(例如Income取值为180的用户),同时也能够消除特征量纲影响,当然,最重要的一点是,对于很多线性模型来说,连续变量的分箱实际上相当于在线性方程中引入了非线性的因素,从而提升模型表现。所谓等宽分箱,需要先确定划分成几分,然后根据连续变量的取值范围划分对应数量的宽度相同的区间,并据此对连续变量进行分箱。当然,无论是等宽/等频分箱,还是聚类分箱,本质上都是进行无监督的分箱,即在不考虑标签的情况下进行的分箱。
2024-02-04 18:22:56
1275
原创 sklearn实现数据标准化(Standardization)和归一化(Normalization)
sklearn的标准化过程,即包括Z-Score标准化,也包括0-1标准化,并且即可以通过实用函数来进行标准化处理,同时也可以利用评估器来执行标准化过程。
2024-02-04 17:52:43
2916
原创 数据处理方法--OneHotEncoder独热编码
对于独热编码的使用,有一点是额外需要注意的,那就是对于二分类离散变量来说,独热编码往往是没有实际作用的。不过需要注意的是,对于sklearn的独热编码转化器来说,尽管其使用过程会更加方便,但却无法自动创建转化后的列名称,而在需要考察字段业务背景含义的场景中,必然需要知道每一列的实际名称(就类似于极简示例中每一列的名字,通过“原列名_字段取值”来进行命名),因此我们需要定义一个函数来批量创建独热编码后新数据集各字段名称的函数。
2024-02-04 16:29:15
1008
1
原创 机器学习数据预处理方法(基本信息探索)##1
需要知道的是,根据相关系数计算的基本原理,相关系数为正数,则二者为正相关,数值变化会更倾向于保持同步。我们发现,这11条数据的入网时间都是0,也就是说,这11位用户极有可能是在统计周期结束前的最后时间入网的用户,因此没有过去的总消费记录,但是却有当月的消费记录。此外,我们还可以通过箱线图来进行异常值点的识别,和3倍标准差法利用均值和方差进行计算不同,箱线图主要借助中位数和四分位数来进行计算,以上四分位数+1.5倍四分位距为上界、下四分位数-1.5倍四分位距为下界,超出界限则认为是异常值。
2024-02-03 17:49:55
1068
1
原创 机器学习超参数优化算法(贝叶斯优化)
贝叶斯优化是当今黑盒函数估计领域最为先进和经典的方法,在同一套序贯模型下使用不同的代理模型以及采集函数、还可以发展出更多更先进的贝叶斯优化改进版算法,因此,贝叶斯优化的其算法本身就多如繁星,实现各种不同种类的贝叶斯优化的库也是琳琅满目,几乎任意一个专业用于超参数优化的工具库都会包含贝叶斯优化的内容。也因为bayes_opt的这个性质,因此当我们定义的目标函数是某种损失时,目标函数的输出需要取负(即,如果使用RMSE,则应该让目标函数输出负RMSE,这样最大化负RMSE后,才是最小化真正的RMSE。
2024-02-02 14:39:23
11722
原创 对半网格搜索HalvingSearchCV
对半网格搜索算法设计了一个精妙的流程,可以很好的权衡子集的大小与计算效率问题,我们来看具体的流程:1、首先从全数据集中无放回随机抽样出一个很小的子集d0,并在d0上验证全部参数组合的性能。根据d0上的验证结果,淘汰评分排在后1/2的那一半参数组合2、然后,从全数据集中再无放回抽样出一个比d0大一倍的子集d1,并在d1上验证剩下的那一半参数组合的性能。根据d1上的验证结果,淘汰评分排在后1/2的参数组合3、再从全数据集中无放回抽样出一个比d。
2024-02-01 10:55:14
978
1
原创 随机网格搜索RandomizedSearchCV
在sklearn中,随机抽取参数子空间并在子空间中进行搜索的方法叫做随机网格搜索RandomizedSearchCV。由于搜索空间的缩小,需要枚举和对比的参数组的数量也对应减少,整体搜索耗时也将随之减少,因此:当设置相同的全域空间时,随机搜索的比枚举网格搜索很多。当设置相同的训练次数时,随机搜索可以比枚举网格搜索很多。同时,绝妙的是,随机网格搜索得出的与枚举网格搜索得出的最小损失。可以说,是提升了运算速度,又没有过多地伤害搜索的精度。不过,需要注意的是,
2024-02-01 10:15:19
1861
1
原创 随机森林超参数的网格优化(机器学习的精华--调参)
因此我们可以选择转折点或转折点附近的n_estimators取值,例如20。不难发现,网格搜索之后的模型过拟合程度减轻,且在训练集与测试集上的结果都有提高,可以说从根本上提升了模型的基础能力。我们还可以根据网格的结果继续尝试进行其他调整,来进一步降低模型在测试集上的RMSE。因此n_estimators的参数空间可以被确定为range(20,100,5),如果你比较保守,甚至可以确认为是range(15,25,5)。可以通过对上述属性的调用查看当前模型每一棵树的各个属性,对我们对于参数范围的选择给予帮助。
2024-01-31 18:13:57
4587
3
原创 随机森林回归器的参数详解
对单一决策树而言,模型复杂度由树结构(树深、树宽、树上的叶子数量等)与数据量(样本量、特征量)决定,而对随机森林而言,模型复杂度由森林中树的数量、树结构与数据量决定,其中树的数量越多,模型越复杂。另外,当我们选择不同的criterion之后,决策树的feature_importances_也会随之变化,因为在sklearn当中,feature_importances_是特征对criterion下降量的总贡献量,因此不同的criterion可能得到不同的特征重要性。默认值为0,因此是个相当有空间的参数。
2024-01-31 17:05:27
3104
原创 集成学习Bagging方法(随机森林实现巨简代码实现)
从图像来看,森林与决策树都处于过拟合状态,不过森林的过拟合程度较轻,决策树的过拟合程度较强。两个算法在训练集上的结果都比较优秀,决策树的可以完美学习训练集上的内容,达到RMSE=0的程度,而随机森林在训练集上的RMSE大约在1w上下徘徊,测试集上的结果则是随机森林更占优。从提供的数据中随机抽样出不同的子集,用于建立多棵不同的决策树,并按照Bagging的规则对单棵决策树的结果进行集成(回归则平均,分类则少数服从多数)画出决策树和随机森林在训练集和测试集的RMSE进行对比(5折交叉验证)
2024-01-31 16:25:18
1090
原创 汇编语言学习随笔
call dispmsg:从eax开始输出赋值操作符格式: 重复次数 dup (重复参数)赋值参数未确定时可用 “?”表示。---"?"往往都是0来填充。bvar1 = byte 5 dup ('$')八位 字节变量定义:byte十六位 字变量(两字节)定义:word...
2024-01-31 15:45:16
513
原创 回溯法--迷宫问题
使用二位数据进行描述迷宫,在二维数组中,0表示该点还没有走过,1表示为墙,2表示路可以走(也为最终的路线),3表示该点已经走过但是走不通。
2023-01-29 11:21:15
131
原创 数据结构--串
准备工作#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<string.h>#include<windows.h>//函数结果状态字符#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typede
2021-10-27 20:36:32
127
原创 队列的链式表示和实现
准备工作#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<windows.h>//函数结果状态字符#define TRUE 1 #define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2 typedef int Status;
2021-10-13 09:30:39
214
原创 队列的顺序表示和实现
准备工作#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<windows.h>//函数结果状态字符#define TRUE 1 #define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2 typedef int Status;
2021-10-13 09:00:18
191
原创 链栈的表示和实现
准备工作#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<windows.h>//函数结果状态字符#define TRUE 1 #define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2链栈是运算受限的单链表,只能在链表头部进行
2021-10-12 11:03:10
194
原创 顺序栈的表示和实现
准备工作#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<windows.h>//函数结果状态字符#define TRUE 1 #define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2顺序栈的表示(用指针来操作数组中的元素)
2021-10-12 10:18:27
219
原创 有序表的合并(算法思路)
1.顺序表的实现void MergeList_Sq(SqList LA,SqList LB,SqList &LC){ pa=LA.elem pb=LB.elem //此处指针pa和pb的初值分别指向两个表的第一个元素 LC.length = LA.length + LB.length; LC.elem = new ElemType[LC.length]; //为合并后的新表分配一个数组空间 pc = LC.elem;
2021-10-04 21:16:44
639
原创 线性表的合并(算法思路)
话不多说,直接开正:void union(List &La, List Lb){ La_len = ListLength(La); Lb_len = ListLength(Lb); for(i=1;i<=Lb_len;i++) { GetElem(Lb,i,e); if(!LocateElem(La,e)) ListInesert(&La,++La_len,e); } }时间
2021-10-04 16:17:16
554
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人