机器学习中的超参数调整
简介
机器学习中的超参数调整是一种技术,我们通过调整或更改现有模型或算法的默认参数来获得更高的精度和更好的性能。有时,当我们使用算法的默认参数时,它并不适合现有数据,因为数据会根据问题陈述而变化。在这种情况下,超参数调整成为增强模型性能的模型构建中必不可少的部分。
本文将讨论算法的超参数调整、优势以及其他相关内容。这将帮助人们理解超参数调整的概念及其必要性,并帮助人们对任何类型的数据和模型进行超参数调整。
为什么需要超参数调整?
在机器学习中,每个数据的行为和模式并非完全相同,我们正在处理的问题陈述也各不相同。几乎所有机器学习算法都有其默认参数,如果未选择特定参数,则将应用这些默认参数。
在每种情况下或每个项目中,机器学习算法的默认参数并非总是最合适的解决方案;该模型可能在默认参数下运行良好,但在某些情况下,仍然可以通过调整这些参数来提高性能和可靠性。
我们可以根据需要、数据类型、数据行为、数据模式以及我们希望从模型中获得的目标来调整算法的参数。
模型参数与超参数
你很可能听说过模型参数和超参数这两个术语,并且你可能认为它们是相同的;尽管这两个术语的目的相同,但它们之间仍然略有不同。
模型参数是模型从数据训练中得出的参数;在这里,模型对数据进行训练,观察其模式,做出决策,并在训练结束时,根据从数据中学习到的知识设置一些参数。例如,线性回归从数据中学习,并根据数据行为及其模式得出斜率和 y 截距的值。请注意,这些参数是由模型导出的,我们无法控制它们。
而我们可以控制模型的超参数,并且我们可以在根据我们的需求定义模型时控制这些参数。
超参数空间
众所周知,与机器学习模型相关的参数主要有两种:一种是由模型本身导出的,并在预测时使用;另一种是我们可以根据需要控制和更改的参数。
现在的工作是获得最适合数据和模型的参数组合,以获得一个非常精确的模型;众所周知,有时可能会发生这种情况:在调整一个参数时,另一个参数的值并不适合模型,并影响模型的整体准确性,因此选择最佳参数组合至关重要。
超参数空间是一个平台,它帮助我们对模型进行超参数调整;在这里,我们为它提供算法的范围和组合,它尝试所有可能的指定参数组合,并返回最适合模型及其准确性的组合。
为了在超参数空间中搜索,主要有两种类型的库:GridSearchCV 和 RandomSearchCV。这里的 Cv 代表交叉验证,其中模型的准确性会被多次测量。
防止数据泄露
在模型的训练和超参数调整过程中,需要注意的一点是,数据应分为三类:训练集、测试集和验证集。一般来说,我们将数据分成两类,但在进行超参数调整时,建议将数据分成三类。
将数据再分成一类是为了防止数据泄露。如果在某些情况下发生数据泄露,那么模型在训练过程中将表现良好,但是当我们进入预测阶段,并且当模型获得实时数据进行预测时,它将失败;因此,为了验证数据和模型,将其分成三类是必不可少的。
使用 GridSearchCV
我们可以直接从 sklearn.model_selection 导入 GridSearchCv 并使用它,它将迭代模型的所有指定参数。它将返回最适合数据和模型的条件。
示例
from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score from sklearn.model_selection import GridSearchCV knnc = KNeighborsClassifier() knnc.fit(X_train, y_train) param_grid = {‘n_neighbors’: list(range(1,10)),’algorithm’: (‘auto’, ‘brute’) } gs = GridSearchCV(knnc,param_grid,cv=10) gs.fit(X_train, y_train) Gs.best_params_
正如我们在上面的代码中看到的,我们使用 KNN 分类器作为算法,并且为网格搜索 cv 提供了一个参数网格,在这里,GridSearchCV 将应用所有参数网格,并在运行时返回模型参数的最佳组合。
使用 RandomSearchCV
有时,当使用 GridSearchCv 时,计算复杂度会变得非常高,因为它会尝试模型参数的每种组合并进行计算。相反,RandomSearchCv 会随机搜索参数,并且模型会在随机的超参数和组合上进行训练。
from sklearn.model_selection import RandomizedSearchCV from sklearn.ensemble import RandomForestClassifier from scipy.stats import randint as sp_randint clf = RandomForestClassifier(n_estimators=100) param_dist = {"max_depth": [4, None], "max_features": sp_randint(1, 15), "min_samples_split": sp_randint(2, 11), "criterion": ["gini", "entropy"]} samples = 8 randomCV = RandomizedSearchCV(clf, param_distributions=param_dist, n_iter=samples,cv=5) randomCV.fit(X, y) print(randomCV.best_params_)
关键要点
超参数调整对于充分发挥模型的潜力至关重要。
我们可以将数据再分成一类称为验证集,以防止数据泄露。
GridSearchCV 比 RandomSearchCV 计算复杂度更高,因为它会在模型参数的每种组合上进行训练。
如果想要更快地获得具有最佳超参数组合的模型结果,可以使用 RandomSearchCV。
结论
在本文中,我们讨论了机器学习模型的超参数调整,其必要性,模型参数和超参数之间的区别,以及如何使用 GridSearchCV 和 RandomSearchCV 来实现这一点。这将帮助人们更好地理解超参数调整的概念,并帮助人们将其应用于任何数据和模型。