什么是机器学习中的参数提取

machine learningpythondata science

您是否曾经想过机器学习模型如何发现数据中的隐藏模式并生成精确的预测?在后台,参数对于确定这些模型的行为至关重要。微调模型预测并使其适应各种情况的隐藏因素称为参数。它们充当可移动的刻度盘,设置模型的权重、偏差或系数,使其能够发展并做出明智的选择。问题是确定这些因素的最佳设置并不简单。参数提取在这里发挥作用。找到最大化模型性能的理想参数值的过程称为参数提取。我们可以通过仔细调整和微调这些参数来最大限度地提高机器学习模型的准确性、稳健性和泛化能力。我们将在这篇文章中详细研究机器学习中的参数提取。

机器学习中的参数

简单来说,参数是控制机器学习模型行为的杠杆。它们是定义模型如何吸收输入和进行预测的基本单元。参数的类型取决于所使用的算法。例如,尽管神经网络使用权重和偏差作为参数,但线性回归使用斜率和截距等参数。这些变量对于泛化和调整模型至关重要。我们可以定制模型的行为,提高其精度和适应性。参数决定了模型如何理解输入特征、优先考虑数据的各种元素,并最终预测结果。将参数视为我们可以转动以改变模型行为和预测能力的旋钮,使我们能够从复杂的数据集中获取有价值的见解。为了充分理解机器学习模型的内部工作原理并充分利用其潜力,必须了解参数的作用。

参数提取方法

梯度下降

使用称为梯度下降的迭代优化技术根据成本函数的梯度修改参数。实际值与预期值之间的差异被最小化。梯度下降的优点包括其收敛到局部最优值和处理大数据集的能力。例如,反向传播与梯度下降相结合,可在训练期间修改权重和偏差,以提高神经网络的性能。

示例

from sklearn.linear_model import SGDClassifier
from sklearn.datasets import load_iris

# 加载鸢尾花数据集
iris = load_iris()
X, y = iris.data, iris.target

# 创建分类器并使用梯度下降的 SGD 拟合模型
model = SGDClassifier(loss='log', max_iter=1000)
model.fit(X, y)

# 提取参数
coefficients = model.coef_
intercept = model.intercept_

# 打印提取的参数
print("Coefficients:", copulations)
print("Intercept:", intercept)

输出

Coefficients: [[  8.8591005   21.51105346 -33.43968497 -15.05090544]
 [ -0.96640468 -74.45577139  17.69863804 -74.57625742]
 [-84.030115   -85.87227256 146.12729041 158.22848237]]
Intercept: [   3.6828852   146.95544595 -136.37156349]

网格搜索

在网格搜索中,参数值在预定网格内进行详尽评估。这是一种蛮力方法。为了选择产生最佳性能的组合,它会有条不紊地搜索参数空间。网格搜索的易用性和探索整个参数空间的能力使其具有优势。但是,当处理较大的区域或评估措施需要大量时间时,计算成本可能会很高。

from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
from sklearn.datasets import load_iris

# 加载鸢尾花数据集
iris = load_iris()
X, y = iris.data, iris.target

# 为 SVM 分类器定义参数网格
param_grid = {
   'C': [0.1, 1, 10],
   'kernel': ['linear', 'rbf', 'poly'],
   'gamma': [0.1, 1, 10]
}

# 创建 SVM 分类器并执行网格搜索
model = SVC()
grid_search = GridSearchCV(model, param_grid)
grid_search.fit(X, y)

# 提取最佳参数
best_params = grid_search.best_params_

# 打印提取的参数
print("最佳参数:", best_params)

输出

最佳参数:{'C': 0.1, 'gamma': 0.1, 'kernel': 'poly'}

随机搜索

在随机搜索中,会随机抽取预定范围内的参数值。由于它比网格搜索更快地探索更大范围的值,因此它比网格搜索更具优势。当有关参数空间的先前信息很少时,随机搜索是合适的。例如,随机搜索可以在设置支持向量机的超参数时有效地检查许多可能性。

from sklearn.model_selection import RandomizedSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris

# 加载鸢尾花数据集
iris = load_iris()
X, y = iris.data, iris.target

# 定义随机搜索的参数分布
param_dist = {
   'n_estimators': [10, 50, 100],
   'max_depth': [None, 5, 10],
   'min_samples_split': [2, 5, 10],
   'min_samples_leaf': [1, 2, 4]
}

# 创建随机森林分类器并执行随机搜索
model = RandomForestClassifier()
random_search = RandomizedSearchCV(model, param_dist)
random_search.fit(X, y)

# 提取最佳参数
best_params = random_search.best_params_

# 打印提取的参数
print("最佳参数:", best_params)

输出

最佳参数:{'n_estimators': 100, 'min_samples_split': 5, 'min_samples_leaf': 1, 'max_depth': 10}

贝叶斯优化

贝叶斯优化是一种使用贝叶斯推理来指导理想参数搜索的高级方法。它创建目标函数的概率模型,并利用该模型决定下一步要考虑哪些参数值。在需要昂贵的函数评估的情况下,贝叶斯优化表现非常出色。通过在探索和利用之间取得平衡,可以达到最佳参数值集。例如,贝叶斯优化可以成功导航参数空间,同时调整梯度提升技术的超参数。

!pip install scikit-optimize
from skopt import BayesSearchCV
from sklearn.svm import SVC
from sklearn.datasets import load_iris

# 加载鸢尾花数据集
iris = load_iris()
X, y = iris.data, iris.target

# 定义贝叶斯优化的搜索空间
param_space = {
   'C': (0.1, 10.0, 'log-uniform'),
   'kernel': ['linear', 'rbf', 'poly'],
   'gamma': (0.1, 10.0, 'log-uniform')
}

# 创建 SVM 分类器并执行贝叶斯优化
model = SVC()
bayes_search = BayesSearchCV(model, param_space)
bayes_search.fit(X, y)

# 提取最佳参数
best_params = bayes_search.best_params_

# 打印提取的参数
print("最佳参数:", best_params)

输出

最佳参数:OrderedDict([('C', 1.643681008305286), ('gamma', 0.14544724939462852), ('kernel', 'linear')])

结论

为了让机器学习模型充分发挥其潜力,参数提取至关重要。这类似于寻找算法的宝藏。我们可以通过调整设置来释放这些模型的潜力,并看到它们惊人的威力。通过将模型的行为与数据的具体情况相匹配,参数提取可以实现精确的预测并揭示有洞察力的信息。


相关文章