当前位置: 首页>>编程示例 >>用法及示例精选 >>正文


Python cuml.QN用法及代码示例

用法:

class cuml.QN(*, loss='sigmoid', fit_intercept=True, l1_strength=0.0, l2_strength=0.0, max_iter=1000, tol=0.0001, delta=None, linesearch_max_iter=50, lbfgs_memory=5, verbose=False, handle=None, output_type=None, warm_start=False)

Quasi-Newton 方法用于查找函数的零点或局部最大值和最小值,并由此类用于优化成本函数。

在 cuML 的 QN 类下实现了两种算法,执行哪一种取决于以下规则:

  • Orthant-Wise 内存有限Quasi-Newton (OWL-QN) 如果有 l1 正则化

  • 否则,内存有限 BFGS (L-BFGS)。

cuML 的 QN 类可以采用 array-like 对象,在主机中作为 NumPy 数组或在设备中(作为 Numba 或 __cuda_array_interface__ 兼容)。

参数

loss: ‘sigmoid’, ‘softmax’, ‘squared_loss’ (default = ‘squared_loss’)

‘sigmoid’ 损失用于单类逻辑回归 ‘softmax’ 损失用于多类逻辑回归 ‘normal’ 用于正态/平方损失

fit_intercept: boolean (default = True)

如果为 True,模型会尝试校正 y 的全局平均值。如果为 False,则模型预计您已将数据居中。

l1_strength: float (default = 0.0)

l1 正则化强度(如果非零,将运行OWL-QN,否则运行L-BFGS)。请注意,与 Scikit-learn 一样,偏差不会被正则化。

l2_strength: float (default = 0.0)

l2 正则化强度。请注意,与 Scikit-learn 一样,偏差不会被正则化。

max_iter: int (default = 1000)

求解器收敛的最大迭代次数。

tol: float (default = 1e-4)

训练过程将停止,如果

norm(current_loss_grad, inf) <= tol * max(current_loss, tol).

这与 scipy.optimize.minimize(method=’L-BFGS-B’) 中的 gtol 控制的停止条件略有不同:

norm(current_loss_projected_grad, inf) <= gtol

请注意,sklearn.LogisticRegression() 使用输入数据上的 softmax/logistic 损失之和,而 cuML 使用平均值。因此,Scikit-learn 的损失通常是 cuML 的 sample_size 倍。为了解释差异,您可以将tol 除以样本大小;这将确保 cuML 求解器不会早于 Scikit-learn 求解器停止。

delta: Optional[float] (default = None)

训练过程将停止,如果

abs(current_loss - previous_loss) <= delta * max(current_loss, tol).

None 时,设置为 tol * 0.01 ;当 0 时,检查被禁用。给定当前步骤 k ,这里的参数 previous_loss 是步骤 k - p 的损失,其中 p 是内部设置的一个小的正整数。

请注意,此参数对应于 scipy.optimize.minimize(method=’L-BFGS-B’) 中的 ftol,默认情况下设置为很小的 2.2e-9 并且在 sklearn.LogisticRegression() 中不公开。此条件旨在保护求解器免于执行极小的线搜索步骤或锯齿形。您可以选择设置 delta = 0 以确保 cuML 求解器不会早于 Scikit-learn 求解器停止。

linesearch_max_iter: int (default = 50)

算法每次外部迭代的最大线搜索迭代次数。

lbfgs_memory: int (default = 5)

lbfgs inverse-Hessian 近似值的等级。方法将使用 O(lbfgs_memory * D) 内存。

handlecuml.Handle

指定 cuml.handle 保存用于此模型中计算的内部 CUDA 状态。最重要的是,这指定了将用于模型计算的 CUDA 流,因此用户可以通过在多个流中创建句柄在不同的流中同时运行不同的模型。如果为 None,则创建一个新的。

verboseint 或布尔值,默认=False

设置日志记录级别。它必须是 cuml.common.logger.level_* 之一。有关详细信息,请参阅详细级别。

output_type{‘input’, ‘cudf’, ‘cupy’, ‘numpy’, ‘numba’},默认=无

用于控制估计器的结果和属性的输出类型的变量。如果为 None,它将继承在模块级别设置的输出类型 cuml.global_settings.output_type 。有关详细信息,请参阅输出数据类型配置。

warm_start布尔,默认=假

当设置为 True 时,重用之前调用的解决方案作为初始化,否则,只需擦除之前的解决方案。

注意

此类包含两个流行的Quasi-Newton 方法的实现:

例子

import cudf
import numpy as np

# Both import methods supported
# from cuml import QN
from cuml.solvers import QN

X = cudf.DataFrame()
X['col1'] = np.array([1,1,2,2], dtype = np.float32)
X['col2'] = np.array([1,2,2,3], dtype = np.float32)
y = cudf.Series( np.array([0.0, 0.0, 1.0, 1.0], dtype = np.float32) )

solver = QN()
solver.fit(X,y)

# Note: for now, the coefficients also include the intercept in the
# last position if fit_intercept=True
print("Coefficients:")
print(solver.coef_)
print("Intercept:")
print(solver.intercept_)

X_new = cudf.DataFrame()
X_new['col1'] = np.array([1,5], dtype = np.float32)
X_new['col2'] = np.array([2,5], dtype = np.float32)

preds = solver.predict(X_new)

print("Predictions:")
print(preds)

输出:

Coefficients:
            10.647417
            0.3267412
            -17.158297
Intercept:
            -17.158297
Predictions:
            0    0.0
            1    1.0

属性

coef_数组,形状(n_classes,n_features)

QN.coef_(self)

intercept_数组(n_classes,1)

独立术语。如果 fit_intercept 为 False,则为 0。

相关用法


注:本文由纯净天空筛选整理自rapids.ai大神的英文原创作品 cuml.QN。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。