用法:
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) 內存。
- handle:cuml.Handle
指定 cuml.handle 保存用於此模型中計算的內部 CUDA 狀態。最重要的是,這指定了將用於模型計算的 CUDA 流,因此用戶可以通過在多個流中創建句柄在不同的流中同時運行不同的模型。如果為 None,則創建一個新的。
- verbose:int 或布爾值,默認=False
設置日誌記錄級別。它必須是
cuml.common.logger.level_*
之一。有關詳細信息,請參閱詳細級別。- output_type:{‘input’, ‘cudf’, ‘cupy’, ‘numpy’, ‘numba’},默認=無
用於控製估計器的結果和屬性的輸出類型的變量。如果為 None,它將繼承在模塊級別設置的輸出類型
cuml.global_settings.output_type
。有關詳細信息,請參閱輸出數據類型配置。- warm_start:布爾,默認=假
當設置為 True 時,重用之前調用的解決方案作為初始化,否則,隻需擦除之前的解決方案。
參數:
注意:
此類包含兩個流行的Quasi-Newton 方法的實現:
Limited-memory Broyden Fletcher Goldfarb Shanno (L-BFGS) [Nocedal, Wright - 數值優化 (1999)]
Orthant-wise limited-memory quasi-newton (OWL-QN) [Andrew, Gao - ICML 2007]
例子:
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。
屬性:
相關用法
- Python cuml.metrics.pairwise_distances.pairwise_distances用法及代碼示例
- Python cuml.neighbors.KNeighborsClassifier用法及代碼示例
- Python cuml.ensemble.RandomForestRegressor用法及代碼示例
- Python cuml.svm.SVC用法及代碼示例
- Python cuml.svm.SVR用法及代碼示例
- Python cuml.Lasso用法及代碼示例
- Python cuml.tsa.ARIMA.predict用法及代碼示例
- Python cuml.multiclass.OneVsRestClassifier用法及代碼示例
- Python cuml.preprocessing.LabelBinarizer用法及代碼示例
- Python cuml.random_projection.GaussianRandomProjection用法及代碼示例
- Python cuml.MBSGDRegressor用法及代碼示例
- Python cuml.experimental.preprocessing.PolynomialFeatures用法及代碼示例
- Python cuml.PCA用法及代碼示例
- Python cuml.feature_extraction.text.HashingVectorizer用法及代碼示例
- Python cuml.DBSCAN用法及代碼示例
- Python cuml.dask.feature_extraction.text.TfidfTransformer用法及代碼示例
- Python cuml.TruncatedSVD用法及代碼示例
- Python cuml.common.memory_utils.using_output_type用法及代碼示例
- Python cuml.preprocessing.text.stem.PorterStemmer用法及代碼示例
- Python cuml.experimental.preprocessing.add_dummy_feature用法及代碼示例
注:本文由純淨天空篩選整理自rapids.ai大神的英文原創作品 cuml.QN。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。