NaiveBayes Classier 的超参数调优

数据挖掘 机器学习 scikit-学习 朴素贝叶斯分类器 超参数 超参数调整
2022-03-14 12:21:31

我对机器学习还很陌生,我知道分类器的超参数调整的概念,并且我遇到了一些这种技术的例子。但是,我正在尝试将 sklearn 的 NaiveBayes 分类器用于一项任务,但我不确定我应该尝试的参数值。

我想要的是这样的东西,但对于 GaussianNB() 分类器而不是 SVM:

from sklearn.model_selection import GridSearchCV
C=[0.05,0.1,0.2,0.3,0.25,0.4,0.5,0.6,0.7,0.8,0.9,1]
gamma=[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0]
kernel=['rbf','linear']
hyper={'kernel':kernel,'C':C,'gamma':gamma}
gd=GridSearchCV(estimator=svm.SVC(),param_grid=hyper,verbose=True)
gd.fit(X,Y)
print(gd.best_score_)
print(gd.best_estimator_)

我试图搜索 NaiveBayes 的示例,但找不到任何示例。我现在所拥有的只是:

model = GaussianNB()

我想要的是尝试不同的参数并比较分数。

3个回答
from sklearn.model_selection import GridSearchCV

hyper = {'C':[0.05,0.1,0.2,0.3,0.25,0.4,0.5,0.6,0.7,0.8,0.9,1],
         'gamma':[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0],
         'kernel':['rbf','linear']
        }

gd=GridSearchCV(estimator=svm.SVC(),param_grid=hyper,verbose=True)

gd.fit(X,Y)
print(gd.best_score_)
print(gd.best_estimator_)

资料来源:

  1. Python中机器学习模型的超参数调优
  2. https://github.com/dataprofessor/code/blob/master/python/hyperparameter_tuning.ipynb
  3. https://www.youtube.com/watch?v=AvWfL1Us3Kg

我认为评论是正确的 - 没有与其他 ML 分类器具有相同意义的超参数。

您确实希望根据您的数据确保使用最佳版本的朴素贝叶斯(sklearn 用户指南:https ://scikit-learn.org/stable/modules/naive_bayes.html#gaussian-naive-bayes )

我认为以稳健的方式使用朴素贝叶斯的一种方法可能是重复 K 折交叉验证(https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RepeatedStratifiedKFold.html

如果我不在基地,请更正这个答案!我在 ML 方面不是很有经验,我自己也有这个问题——这是我能想到的最好的答案。

我认为您会发现Optuna 对此很有用,它适用于您想要的任何型号。你可以尝试这样的事情:

import optuna

def objective(trial):
    hyper_parameter_value = trial.suggest_uniform('x', -10, 10)
    model = GaussianNB(<hyperparameter you are trying to optimize>=hyperparameter_value)

    # evaluate the model here

    return model_accuracy  # or whatever metric you want to optimize

study = optuna.create_study()
study.optimize(objective, n_trials=100)

您可以运行在多次运行中持续存在的研究,并且可以打印出效果最佳的超参数的值等。