當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。