机器学习中的超参数调控
简介
机器学习中的超参数调整是一种技术,我们通过调整或改变现有模型或算法的默认参数来实现更高的准确率和更好的性能。有时,当我们使用算法的默认参数时,它并不适合现有的数据,因为数据可以根据问题的陈述而变化。在这种情况下,超参数的调整就成了建立模型的一个重要部分,以提高模型的性能。
本文将讨论算法的超参数调整、优势和其他相关内容。这将有助于人们理解超参数调整的概念及其必要性,并帮助人们对任何类型的数据和模型进行调整。
超参数调整的必要性是什么
在机器学习中,每个数据的行为和模式都不可能是相同的,而且我们正在处理的问题陈述也是不同的。几乎所有的机器学习算法都有其默认参数,如果没有选择特定的参数,就会应用这些参数。
在每个案例或项目中,机器学习算法的默认参数不可能是最适合我们的解决方案;模型在默认参数下可能表现良好,但在某些情况下,通过调整这些参数仍可提高性能和可靠性。
我们可以根据我们的需要、数据的类型、数据的行为、数据模式以及我们想从模型中实现的目标来调整算法的参数。
模型参数与超参数
很有可能,你可能听说过模型参数和超参数这两个术语,你可能认为它们是一样的;虽然这两个术语的目的是一样的,但它们还是有一些区别。
模型参数是指模型通过对数据的训练得出的参数;在这里,模型对数据进行训练,观察其模式,进行决策,在训练结束后,模型根据对数据的学习情况设置一些参数。例如,线性回归从数据中学习,并根据数据行为及其模式得出斜率和Y截距的值。请注意,这些参数是模型得出的,我们不能控制它们。
而我们可以控制模型的超参数,我们可以根据我们对模型的需求,在定义模型时控制这些参数。
超参数空间
我们知道,与机器学习模型相关的参数有两种,一种是来自于模型本身,并在预测时使用相同的参数,另一种是我们可以控制并根据我们的需要改变的参数。
现在的工作是获得适合数据和模型的最佳参数组合,以获得一个非常准确的模型;我们知道,有时可能会发生在调整一个参数时,另一个参数的值不适合模型,并影响模型的整体准确性,所以选择最佳参数组合是至关重要的。
超参数空间是帮助我们对模型进行超参数调整的平台;在这里,我们为它提供了一个算法的范围和组合,它对指定的参数尝试了所有可能的组合,并返回最适合模型和其精度的组合。
为了在超参数空间进行搜索,主要有两种类型的库,GridSearchCV和RandomSearchCV。这里的Cv代表交叉验证,即对模型的准确性进行多次测量。
防止数据泄密
在模型的训练和超参数调整过程中,有一点需要注意,数据应该被分成三类:训练、测试和验证。一般来说,我们把数据分成两类,但在进行超参数调整时,把数据分成三类是明智的。
将数据分成多一个类别是为了防止数据泄露。如果数据泄漏在某些情况下发生,那么模型在训练时将表现良好,但当我们进入预测阶段,当模型得到实时数据进行预测时,它将失败;因此,为了验证数据和模型,必须将其分成三类。
使用GridSearchCV
我们可以直接使用GridSearchCv,从sklearn.model_selection中导入它,它将遍历模型的所有指定参数。它将返回数据和模型的最佳合适条件。
例子
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_)
主要收获
- Hyperparanmeytr的调整对于获得最佳的模型是至关重要的。
-
我们可以将数据分成更多的类别,称为验证性分割,以防止数据泄漏。
-
GridSearchCV在计算上比RandomSearchCV更复杂,因为它对模型的每个参数组合进行训练。
-
如果你想从具有最佳超参数组合的模型中获得更快的结果,就可以使用RandomSearchCV。
总结
在这篇文章中,我们讨论了机器学习模型的超参数调整,它的必要性,模型的参数和超参数之间有什么区别,以及如何使用GridSearchCV和RandomSearchCV来实现。这将有助于人们更好地理解超参数调整的概念,并帮助人们将其应用于任何数据和模型。