首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【机器学习】几种常用的机器学习调参方法

【机器学习】几种常用的机器学习调参方法

作者头像
Twcat_tree
发布于 2023-11-03 01:20:07
发布于 2023-11-03 01:20:07
1.3K01
代码可运行
举报
文章被收录于专栏:二猫の家二猫の家
运行总次数:1
代码可运行

机器学习中,模型的性能往往受到模型的超参数、数据的质量、特征选择等因素影响。其中,模型的超参数调整是模型优化中最重要的环节之一。超参数(Hyperparameters)在机器学习算法中需要人为设定,它们不能直接从训练数据中学习得出。与之对应的是模型参数(Model Parameters),它们是模型内部学习得来的参数。 以支持向量机(SVM)为例,其中C、kernel 和 gamma 就是超参数,而通过数据学习到的权重 w 和偏置 b则 是模型参数。实际应用中,我们往往需要选择合适的超参数才能得到一个好的模型。搜索超参数的方法有很多种,如网格搜索、随机搜索、对半网格搜索、贝叶斯优化、遗传算法、模拟退火等方法,具体内容如下。

一、网格搜索

网格搜索可能是最简单、应用最广泛的超参数搜索算法,通过查找搜索范围内的所有的点来确定最优值。如果采用较大的搜索范围以及较小的步长,网恪搜索很大概率找到全局最优值。 然而,这种搜索方案十分消耗计算资源和时间,特别是需要调优的超参数比较多的时候。 因此, 在实际应用中,网格搜索法一般会先使用较广的搜索范围和较大的步长,来寻找全局最优值可能的位置。然后通过逐渐缩小搜索范围和步长,来寻找更精确的最优值。 这种操作方案可以降低所需的时间和计算量, 但由于目标函数一般是非凸的, 所以很可能会错过全局最优值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import time
from sklearn.model_selection import KFold
from sklearn.ensemble import RandomForestClassifier

rf_param_grid = {
    'max_depth' : list(range(2,20,2)),
    'n_estimators': list(range(20,800,100)),
    'min_samples_split': [2,6,10],
    'min_samples_leaf': [2,6,10]}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#计算参数空间大小
def count_space(rf_param_grid):
    no_option=1
    for i in rf_param_grid:
        no_option*=len(rf_param_grid[i])
    return no_option
count_space(rf_param_grid)

参数空间总量为648个。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#网格搜索GridSearchCV
from sklearn.model_selection import GridSearchCV
start_time = time.time() 
m = RandomForestClassifier(n_jobs = -1, random_state = 2023)
cv = KFold(n_splits = 5, shuffle = True, random_state = 2023)
m_g = GridSearchCV(param_grid=rf_param_grid
                   ,estimator = m
                   ,scoring = "roc_auc"
                   ,cv = cv)
m_g.fit(x_train, y_train)
end_time = time.time() 
run_time = end_time - start_time
print("GridSearchCV time", run_time)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for key in m_r.best_params_.keys():
    print('%s = %s'%(key,m_g.best_params_[key]))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
y_pred_train = m_g.predict_proba(x_train)[:,1]
fpr_train,tpr_train,_ = roc_curve(y_train,y_pred_train)
train_ks = round(abs(fpr_train-tpr_train).max(), 2)
roc_auc_train = auc(fpr_train, tpr_train)
print('train_ks:',train_ks)

y_pred = m_g.predict_proba(x_test)[:,1]
fpr_test, tpr_test,_ = roc_curve(y_test,y_pred)
test_ks = round(abs(fpr_test-tpr_test).max(), 2)
roc_auc_test = auc(fpr_test, tpr_test)
print('test_ks:',test_ks)

plt.title('Receiver Operating Characteristic')
plt.plot(fpr_train, tpr_train, 'b', label = 'train_AUC = %0.2f' % roc_auc_train)
plt.plot(fpr_test, tpr_test, 'y', label = 'test_AUC = %0.2f' % roc_auc_test)
plt.legend(loc = 'lower right')
plt.plot([0, 1], [0, 1],'r--')
plt.xlim([0, 1])
plt.ylim([0, 1])
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.show()

二、随机搜索

随机搜索的思想与网格搜索比较相似,只是不再测试上界和下界之间的所有值,而是在搜索范围中随机选取样本点。它的理论依据是,如果样本点集足够大,那么通过随机采样也能大概率地找到全局最优值, 或其近似值。随机搜索一般会比网格搜索要快一些,但是和网格搜索的快速版一样,它的结果也是没法保证的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 随机搜索RandomizedSearchCV
from sklearn.model_selection import RandomizedSearchCV
m = RandomForestClassifier(n_jobs = -1, random_state = 2023)
cv = KFold(n_splits = 5, shuffle = True, random_state = 2023)

m_r = RandomizedSearchCV(param_distributions=rf_param_grid
                         ,estimator = m
                         ,scoring = "roc_auc"
                         ,cv = cv
                         ,n_iter=10
                         ,verbose=True
                         ,n_jobs=-1)
%time  m_r.fit(x_train, y_train)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print("best params:", m_r.best_estimator_, "\n","\n", "best cvscore:", m_r.best_score_)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
y_pred_train = m_r.predict_proba(x_train)[:,1]
fpr_train,tpr_train,_ = roc_curve(y_train,y_pred_train)
train_ks = round(abs(fpr_train-tpr_train).max(), 2)
roc_auc_train = auc(fpr_train, tpr_train)
print('train_ks:',train_ks)

y_pred = m_r.predict_proba(x_test)[:,1]
fpr_test, tpr_test,_ = roc_curve(y_test,y_pred)
test_ks = round(abs(fpr_test-tpr_test).max(), 2)
roc_auc_test = auc(fpr_test, tpr_test)
print('test_ks:',test_ks)

plt.title('Receiver Operating Characteristic')
plt.plot(fpr_train, tpr_train, 'b', label = 'train_AUC = %0.2f' % roc_auc_train)
plt.plot(fpr_test, tpr_test, 'y', label = 'test_AUC = %0.2f' % roc_auc_test)
plt.legend(loc = 'lower right')
plt.plot([0, 1], [0, 1],'r--')
plt.xlim([0, 1])
plt.ylim([0, 1])
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.show()

三、对半网格搜索

面对枚举网格搜索过慢的问题,sklearn中呈现了两种优化方式:其一是调整搜索空间,其二是调整每次训练的数据。调整搜索空间的方法就是随机网格搜索,而调整每次训练数据的方法就是对半网格搜索。 假设现在有数据集D,我们从数据集D中随机抽样出一个子集d。如果一组参数在整个数据集D上表现较差,那大概率这组参数在数据集的子集d上表现也不会太好。反之,如果一组参数在子集d上表现不好,我们也不会信任这组参数在全数据集D上的表现。那么我们可以认为参数在子集与在全数据集上的表现一致。 但在现实数据中,这一假设要成立是有条件的,即任意子集的分布都与全数据集D的分布类似。当子集的分布越接近全数据集的分布,同一组参数在子集与全数据集上的表现越有可能一致。根据之前在随机网格搜索中得出的结论,我们知道子集越大、其分布越接近全数据集的分布,但是大子集又会导致更长的训练时间,因此为了整体训练效率,我们不可能无限地增大子集。这就出现了一个矛盾:大子集上的结果更可靠,但大子集计算更缓慢。 对半网格搜索算法设计了一个精妙的流程,可以很好的权衡子集的大小与计算效率问题,具体流程如下: 首先从全数据集中无放回随机抽样出一个很小的子集 d0 ,并在d0上验证全部参数组合的性能。根据d0上的验证结果,淘汰评分排在后1/2的那一半参数组合。然后,从全数据集中再无放回抽样出一个比 d0大一倍的子集 d1,并在d1上验证剩下的那一半参数组合的性能。根据 d1上的验证结果,淘汰评分排在后1/2的参数组合。再从全数据集中无放回抽样出一个比 d1大一倍的子集 d2,并在 d2上验证剩下1/4的参数组合的性能。根据 d2上的验证结果,淘汰评分排在后1/2的参数组合……,直至到达限制条件。 在这种模式下,只有在不同的子集上不断获得优秀结果的参数组合能够被留存到迭代的后期,最终选择出的参数组合一定是在所有子集上都表现优秀的参数组合。这样一个参数组合在全数据上表现优异的可能性是非常大的,同时也可能展现出比网格、随机搜索得出的参数更大的泛化能力。 然而这个过程当中会存在一个问题:子集越大时,子集与全数据集D的分布会越相似,但整个对半搜索算法在开头的时候,就用最小的子集筛掉了最多的参数组合。如果最初的子集与全数据集的分布差异很大,那么在对半搜索开头的前几次迭代中,就可能筛掉许多对全数据集D有效的参数,因此对半网格搜索最初的子集一定不能太小。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 对半网格搜索HalvingGridSearchCV
from sklearn.experimental import enable_halving_search_cv
from sklearn.model_selection import HalvingGridSearchCV

m = RandomForestClassifier(n_jobs = -1, random_state = 2023)
cv = KFold(n_splits = 5, shuffle = True, random_state = 2023)
m_h = HalvingGridSearchCV(estimator = m
                          ,param_grid=rf_param_grid
                          ,factor=3
                          ,min_resources = 100
                          ,scoring='roc_auc'
                          ,n_jobs = -1
                          ,random_state=2023
                          ,cv=cv)
%time m_h.fit(x_train, y_train)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print("best params:", m_h.best_estimator_, "\n","\n", "best cvscore:", m_h.best_score_)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
y_pred_train = m_h.predict_proba(x_train)[:,1]
fpr_train,tpr_train,_ = roc_curve(y_train,y_pred_train)
train_ks = round(abs(fpr_train-tpr_train).max(), 2)
roc_auc_train = auc(fpr_train, tpr_train)
print('train_ks:',train_ks)

y_pred = m_h.predict_proba(x_test)[:,1]
fpr_test, tpr_test,_ = roc_curve(y_test,y_pred)
test_ks = round(abs(fpr_test-tpr_test).max(), 2)
roc_auc_test = auc(fpr_test, tpr_test)
print('test_ks:',test_ks)

plt.title('Receiver Operating Characteristic')
plt.plot(fpr_train, tpr_train, 'b', label = 'train_AUC = %0.2f' % roc_auc_train)
plt.plot(fpr_test, tpr_test, 'y', label = 'test_AUC = %0.2f' % roc_auc_test)
plt.legend(loc = 'lower right')
plt.plot([0, 1], [0, 1],'r--')
plt.xlim([0, 1])
plt.ylim([0, 1])
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.show()

四、贝叶斯优化

贝叶斯优化算法在寻找最优值参数时,采用了与网格搜索、随机搜索完全不同的方法。网格搜索和随机搜索在测试一个新点时,会忽略前一个点的信息,而贝叶斯优化算法则充分利用了之前的信息。贝叶斯优化算法通过对目标函数形状进行学习,找到使目标函数向全局最优值提升的参数。 具体来说,它学习目标函数形状的方法是,首先根据先验分布,假设一个搜集函数,每一次使用新的采样点来测试目标函数时,利用这个信息来更新目标函数的先验分布;最后,算法测试由后验分布给出的全局最值最可能出现的位置的点。 对于贝叶斯优化算法,有一个需要注意的地方,一旦找到了一个局部最优值,它会在该区域不断采样,所以很容易陷入局部最优值。为了弥补这个缺陷,贝叶斯优化算法会在探索和利用之间找到一个平衡点,“探索”就是在还未取样的区域获取采样点;而“利用”则是根据后验分布在最可能出现全局最值的区域进行采样。下图为贝叶斯优化框架:

4.1基于高斯过程的贝叶斯优化

bayes-optimization是最早开源的贝叶斯优化库之一,也是为数不多至今依然保留着高斯过程优化的优化库。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#贝叶斯优化Baysian optimization
##BayesianOptimization只支持目标函数最大值,不支持最小值
from bayes_opt import BayesianOptimization

def randomforest_evaluate(**params):
    params['max_depth'] = int(round(params['max_depth'],0))
    params['n_estimators'] = int(round(params['n_estimators'],0))
    params['min_samples_split'] = int(round(params['min_samples_split'],0))
    params['min_samples_leaf'] = int(round(params['min_samples_leaf'],0))
    
    model = RandomForestClassifier(**params, n_jobs=-1, random_state = 2023)
    cv = KFold(n_splits = 5, shuffle = True, random_state = 2023)
    validation_loss = cross_validate(model, x_train, y_train
                                     ,scoring='roc_auc'
                                     ,cv = cv
                                     ,verbose=False
                                     ,n_jobs=-1
                                     ,error_score='raise')       
    return np.mean(validation_loss['test_score'])
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rf_param_grid = {'max_depth' : (2,20)
                 ,'n_estimators': (20,800)
                 ,'min_samples_split': (2,10)
                 ,'min_samples_leaf': (2, 10)}

def param_bayes_opt(init_points, n_iter):
    opt = BayesianOptimization(randomforest_evaluate, rf_param_grid, random_state=2023)
    opt.maximize(init_points = init_points, n_iter = n_iter)
    params_best = opt.max['params']
    score_best = opt.max['target']
    print("\n","\n", "best params:", params_best
          ,"\n","\n", "best cvscore:", score_best,"\n")
    
%time param_bayes_opt(5, 10)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
m_o = RandomForestClassifier(max_depth = 2
                             ,min_samples_leaf = 2
                             ,min_samples_split = 9
                             ,n_estimators = 582
                             ,n_jobs = -1
                             ,random_state = 2023).fit(x_train, y_train)

y_pred_train = m_o.predict_proba(x_train)[:,1]
fpr_train,tpr_train,_ = roc_curve(y_train,y_pred_train)
train_ks = round(abs(fpr_train-tpr_train).max(), 2)
roc_auc_train = auc(fpr_train, tpr_train)
print('train_ks:',train_ks)

y_pred = m_o.predict_proba(x_test)[:,1]
fpr_test, tpr_test,_ = roc_curve(y_test,y_pred)
test_ks = round(abs(fpr_test-tpr_test).max(), 2)
roc_auc_test = auc(fpr_test, tpr_test)
print('test_ks:',test_ks)

plt.title('Receiver Operating Characteristic')
plt.plot(fpr_train, tpr_train, 'b', label = 'train_AUC = %0.2f' % roc_auc_train)
plt.plot(fpr_test, tpr_test, 'y', label = 'test_AUC = %0.2f' % roc_auc_test)
plt.legend(loc = 'lower right')
plt.plot([0, 1], [0, 1],'r--')
plt.xlim([0, 1])
plt.ylim([0, 1])
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.show()

4.2基于TPE的贝叶斯优化 Hyperopt优化器是目前最为通用的贝叶斯优化器之一,Hyperopt中集成了包括随机搜索、模拟退火和TPE(Tree-structured Parzen Estimator Approach)等多种优化算法。可通过参数algo指定搜索算法,如随机搜索hyperopt.rand.suggest、模拟退火hyperopt.anneal.suggest、TPE算法hyperopt.tpe.suggest。

相比于Bayes_opt,Hyperopt的是更先进、更现代、维护更好的优化器,也是我们最常用来实现TPE方法的优化器。在实际使用中,相比基于高斯过程的贝叶斯优化,基于高斯混合模型的TPE在大多数情况下以更高效率获得更优结果,该方法目前也被广泛应用于AutoML领域中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#贝叶斯优化Tree of Parzen Estimators (TPE) 
#Hyperopt只支持寻找目标函数的最小值,不支持寻找最大值
from hyperopt import hp, fmin, tpe, Trials, partial
from hyperopt.early_stop import no_progress_loss

# 设定参数空间
space = {
    'max_depth': hp.quniform('max_depth', 2,20, 2)
    ,'n_estimators': hp.quniform('n_estimators', 20, 800, 50)
    ,'min_samples_split' : hp.choice('min_samples_split',[2,3,6,9,10])
    ,'min_samples_leaf' : hp.choice('min_samples_leaf',[2,3,6,9,10])}


# 设定目标函数_基评估器选择随机森林
def randomforest_evaluate(params):
    model = RandomForestClassifier(n_estimators = int(params["n_estimators"])
                                   ,max_depth = int(params["max_depth"])
                                   ,min_samples_split = int(params["min_samples_split"])
                                   ,min_samples_leaf = params["min_samples_leaf"]
                                   ,n_jobs=-1, random_state = 2023)
    cv = KFold(n_splits = 5, shuffle = True, random_state = 2023)
    validation_loss = cross_validate(model, x_train, y_train
                                     ,scoring='roc_auc'
                                     ,cv = cv
                                     ,verbose = False
                                     ,n_jobs = -1
                                     ,error_score = 'raise')       
    return np.mean((-1) * validation_loss['test_score'])

def param_hyperopt(max_evals):
    #记录迭代过程
    trials=Trials()
    #提前停止
    early_stop_fn=no_progress_loss(100) 
    #定义代理模型
    params_best=fmin(randomforest_evaluate
                     ,space=space 
                     ,algo=tpe.suggest
                     ,max_evals=max_evals
                     ,trials=trials 
                     ,early_stop_fn=early_stop_fn)
    
    if params_best["min_samples_split"] <=1:
        params_best["min_samples_split"] = 2
    
    if params_best["min_samples_split"] <=1:
        params_best["min_samples_leaf"] = 2
    
    print('best parmas:',params_best)
    return params_best,trials

%time params_best, trials=param_hyperopt(30) 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
m_t = RandomForestClassifier(max_depth = 2
                             ,min_samples_leaf = 4
                             ,min_samples_split = 4
                             ,n_estimators = 350
                             ,n_jobs = -1
                             ,random_state = 2023).fit(x_train, y_train)

y_pred_train = m_t.predict_proba(x_train)[:,1]
fpr_train,tpr_train,_ = roc_curve(y_train,y_pred_train)
train_ks = round(abs(fpr_train-tpr_train).max(), 2)
roc_auc_train = auc(fpr_train, tpr_train)
print('train_ks:',train_ks)

y_pred = m_t.predict_proba(x_test)[:,1]
fpr_test, tpr_test,_ = roc_curve(y_test,y_pred)
test_ks = round(abs(fpr_test-tpr_test).max(), 2)
roc_auc_test = auc(fpr_test, tpr_test)
print('test_ks:',test_ks)

plt.title('Receiver Operating Characteristic')
plt.plot(fpr_train, tpr_train, 'b', label = 'train_AUC = %0.2f' % roc_auc_train)
plt.plot(fpr_test, tpr_test, 'y', label = 'test_AUC = %0.2f' % roc_auc_test)
plt.legend(loc = 'lower right')
plt.plot([0, 1], [0, 1],'r--')
plt.xlim([0, 1])
plt.ylim([0, 1])
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.show()

五、遗传算法 受生物进化论的启发,1975年J.Holland提出遗传算法(Genetic Algorithm,GA)。GA是一种基于“适者生存”的高度并行、随机和自适应优化的搜索算法,它将问题的求解表示成“染色体”的适者生存过程。通过“染色体”群的一代代不断进化,使用复制(reproduction)、交叉(crossover)和变异(mutation)等操作,最终收敛到“最适应环境”的个体,从而求得问题最优解。 本文遗传算法调参使用Tree-based Pipeline Optimization Tool库(TPOT,基于树的管道优化工具)。TPOT 基于树的结构来表示预测建模问题的模型管道,包括数据准备和建模算法以及模型超参数。它利用流行的 Scikit-Learn 机器学习库进行数据转换和机器学习算法,并使用遗传编程随机全局搜索过程来有效地发现给定数据集的性能最佳的模型管道。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from tpot import TPOTClassifier

n_estimators = [10,11,12,13,14,15,16]
max_depth = [5,10,20,30,40,50,60]
criterion=['entropy', 'gini']
min_samples_leaf=[1, 2, 5, 10]
min_samples_split=[2, 5, 10, 15]
max_features = ['auto', 'sqrt','log2']


param = {'n_estimators': n_estimators,
         'max_features': max_features,
         'max_depth': max_depth,
         'min_samples_split': min_samples_split,
         'min_samples_leaf': min_samples_leaf,
         'criterion':['entropy','gini']}

tpot_classifier = TPOTClassifier(generations= 5, population_size= 24, offspring_size= 12,
                                 verbosity= 2, early_stop= 12,
                                 config_dict={'sklearn.ensemble.RandomForestClassifier': param}, 
                                 cv = 4, scoring = 'roc_auc')
%time tpot_classifier.fit(x_train,y_train)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
m_a = RandomForestClassifier(max_depth = 5
                             ,min_samples_leaf = 1
                             ,min_samples_split = 10
                             ,n_estimators = 11
                             ,criterion='gini'
                             ,n_jobs = -1
                             ,random_state = 2023).fit(x_train, y_train)

y_pred_train = m_a.predict_proba(x_train)[:,1]
fpr_train,tpr_train,_ = roc_curve(y_train,y_pred_train)
train_ks = round(abs(fpr_train-tpr_train).max(), 2)
roc_auc_train = auc(fpr_train, tpr_train)
print('train_ks:',train_ks)

y_pred = m_a.predict_proba(x_test)[:,1]
fpr_test, tpr_test,_ = roc_curve(y_test,y_pred)
test_ks = round(abs(fpr_test-tpr_test).max(), 2)
roc_auc_test = auc(fpr_test, tpr_test)
print('test_ks:',test_ks)

plt.title('Receiver Operating Characteristic')
plt.plot(fpr_train, tpr_train, 'b', label = 'train_AUC = %0.2f' % roc_auc_train)
plt.plot(fpr_test, tpr_test, 'y', label = 'test_AUC = %0.2f' % roc_auc_test)
plt.legend(loc = 'lower right')
plt.plot([0, 1], [0, 1],'r--')
plt.xlim([0, 1])
plt.ylim([0, 1])
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.show()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-11-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
scikit-learn 梯度提升树(GBDT)调参小结
    在梯度提升树(GBDT)原理小结中,我们对GBDT的原理做了总结,本文我们就从scikit-learn里GBDT的类库使用方法作一个总结,主要会关注调参中的一些要点。
刘建平Pinard
2018/08/14
4.1K0
【机器学习实战】 手把手教学,kaggle贷款批准预测 (使用xgboost解决正负样本不平衡问题)
train.csv - 训练数据集;loan_status是二进制目标 test.csv - 测试数据集;
机器学习司猫白
2025/01/21
2970
【机器学习实战】 手把手教学,kaggle贷款批准预测 (使用xgboost解决正负样本不平衡问题)
机器学习集成学习与模型融合!
对比过kaggle比赛上面的top10的模型,除了深度学习以外的模型基本上都是集成学习的产物。集成学习可谓是上分大杀器,今天就跟大家分享在Kaggle或者阿里天池上面大杀四方的数据科学比赛利器---集成学习。
Datawhale
2020/08/20
1.1K0
机器学习集成学习与模型融合!
趣析逻辑回归模型评价指标
Python 实现的逻辑回归后,不像 SAS 那样会自动给出模型精确度的评价,需要人为操作计算 Python 专属的 AUC (Area Under Curve),ROC 曲线与 X 轴围成的面积大小反映了模型的精度。本文将着重 AUC 值和 ROC 曲线背后的原理和 Python 代码实现。
萝 卜
2022/05/12
5890
趣析逻辑回归模型评价指标
机器学习——决策树模型:Python实现
决策树模型既可以做分类分析(即预测分类变量值),也可以做回归分析(即预测连续变量值),分别对应的模型为分类决策树模型(DecisionTreeClassifier)及回归决策树模型(DecisionTreeRegressor)。
全栈程序员站长
2022/11/03
1.4K0
数据挖掘机器学习[六]---项目实战金融风控之贷款违约预测
因为文档是去年弄的,很多资料都有点找不到了,我尽可能写的详细。后面以2021年研究生数学建模B题为例【空气质量预报二次建模】再进行一个教学。
汀丶人工智能
2022/12/21
1.8K0
数据挖掘机器学习[六]---项目实战金融风控之贷款违约预测
决战紫禁之巅 | sklearn参数介绍及使用
本篇将介绍决策树sklearn的使用,超参数的定义和用法,以一个简单的实战内容实现决策树的分类和回归实现。
Python数据科学
2019/07/19
1.8K0
Python 实现随机森林预测宽带客户离网(附源数据与代码)
组合算法也叫集成学习,在金融行业或非图像识别领域,效果有时甚至比深度学习还要好。能够理解基本原理并将代码用于实际的业务案例是本文的目标,本文将详细介绍如何利用Python实现集成学习中随机森林这个经典的方法来预测宽带客户的流失,主要将分为两个部分:
萝 卜
2020/08/02
1.6K2
机器学习6:集成学习--boosting(AdaBoost)与GBDT
GBDT相关知识模块:前向分布算法,负梯度拟合,损失函数,回归,二分类,多分类,正则化。
用户5473628
2019/08/08
2.3K0
机器学习6:集成学习--boosting(AdaBoost)与GBDT
还在当调参侠?推荐这三个超参优化库【含示例代码】
在传统的算法建模过程中,影响算法性能的一个重要环节、也可能是最为耗时和无趣的一项工作就是算法的调参,即超参数优化(Hyper-parameter Optimization,HPO),因此很多算法工程师都会调侃的自称"调参侠"。近期在研究一些AutoML相关的论文和实现,而在AutoML中的一个核心组件就是HPO。借此机会,本文梳理总结Python中三种常见的可实现HPO的库,并提供一个简单的示例。
luanhz
2021/08/20
8030
案例实战 | 决策树预测客户违约
而且将连续变量转化为类别变量后,可以与其他类别变量一起,都直接使用卡方检验或方差分析,写成函数快捷操作也更方便。
萝 卜
2022/05/12
8590
案例实战 | 决策树预测客户违约
机器学习·自动调参(Hyperopt)
从规则编程到机器学习,从人工调参到AutoML(meta-machine learning),一直是整个行业发展的趋势。目前机器学习的算法框架逐渐成熟,针对机器学习模型的自动调参算法也有很多,可以帮助我们摆脱手动调参的烦恼,目前主流的调参算法包括Grid search、Random search、TPE、PSO、SMAC以及贝叶斯调参等。目前有许多调参框架可以选择,本文简单介绍Hyperopt自动调参框架的设计和实现
MeteoAI
2019/07/24
9.6K1
100天搞定机器学习|Day56 随机森林工作原理及调参实战(信用卡欺诈预测)
前文对随机森林的概念、工作原理、使用方法做了简单介绍,并提供了分类和回归的实例。本期我们重点讲一下:
Ai学习的老章
2019/12/06
8210
100天搞定机器学习|Day56 随机森林工作原理及调参实战(信用卡欺诈预测)
案例实战 | 逻辑回归实现客户流失预测
利用逻辑回归进行客户流失预警建模中涵盖了许多比较细的知识点,思维导图只展示了极小的一部分,相关知识点链接将穿插在文中。
萝 卜
2022/05/12
1.2K0
案例实战 | 逻辑回归实现客户流失预测
scikit-learn随机森林调参小结
    在Bagging与随机森林算法原理小结中,我们对随机森林(Random Forest, 以下简称RF)的原理做了总结。本文就从实践的角度对RF做一个总结。重点讲述scikit-learn中RF的调参注意事项,以及和GBDT调参的异同点。
刘建平Pinard
2018/08/14
4.4K0
机器学习(12)——随机森林集成学习随机森林
前言:前面已经介绍了的几种算法,应该对算法有了一个基本的认识了,本章主要是在前面已经学到的基础上,对前面的算法模型进行整合操作,训练出效果更好的分类器模型。 集成学习 集成学习的思想是将若干个学习器(分类器&回归器)组合之后产生一个新学习器。弱分类器( weak learner)指那些分类准确率只稍微好于随机猜测的分类器( errorrate<0.5);集成算法的成功在于保证弱分类器的多样性( Diversity)。而且集成不稳定的算法也能够得到一个比较明显的性能提升。 常见的集成学习思想有: (1)投
DC童生
2018/04/27
2.6K1
机器学习(12)——随机森林集成学习随机森林
原理+代码|深入浅出Python随机森林预测实战
组合算法也叫集成学习,在金融行业或非图像识别领域,效果有时甚至比深度学习还要好。能够理解基本原理并将代码用于实际的业务案例是本文的目标,本文将详细介绍如何利用Python实现集成学习中随机森林这个经典的方法来预测宽带客户的流失,主要将分为两个部分:
刘早起
2020/07/27
1.6K0
Python数据科学:Logistic回归
Logistic回归通过logit转换将取值为正负无穷的线性方程的值域转化为(0,1),正好与概率的取值范围一致。
小F
2020/10/09
1.9K0
Python数据科学:Logistic回归
【Python机器学习实战】决策树与集成学习(五)——集成学习(3)GBDT应用实例
前面对GBDT的算法原理进行了描述,通过前文了解到GBDT是以回归树为基分类器的集成学习模型,既可以做分类,也可以做回归,由于GBDT设计很多CART决策树相关内容,就暂不对其算法流程进行实现,本节就根据具体数据,直接利用Python自带的Sklearn工具包对GBDT进行实现。
冬夜先生
2021/09/08
5970
数学建模~~~预测方法--决策树模型
第一维度:介绍基本的概念,以及这个决策树的分类和相关的这个算法和基尼系数的计算方法,通过给定这个用户的数据预测这个用户是否会离职;
阑梦清川
2025/02/24
2040
数学建模~~~预测方法--决策树模型
推荐阅读
相关推荐
scikit-learn 梯度提升树(GBDT)调参小结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档