SGDOneClassSVM#
- class sklearn.linear_model.SGDOneClassSVM(nu=0.5, fit_intercept=True, max_iter=1000, tol=0.001, shuffle=True, verbose=0, random_state=None, learning_rate='optimal', eta0=0.0, power_t=0.5, warm_start=False, average=False)[原始碼]#
使用隨機梯度下降法 (Stochastic Gradient Descent) 求解線性單類別 SVM。
此實作旨在搭配核函數近似技術 (例如
sklearn.kernel_approximation.Nystroem
) 使用,以獲得與sklearn.svm.OneClassSVM
相似的結果,後者預設使用高斯核函數。詳情請參閱使用者指南。
1.0 版本新增。
- 參數:
- nufloat,預設值=0.5
單類別 SVM 的 nu 參數:訓練誤差比例的上限和支持向量比例的下限。應在區間 (0, 1] 內。預設值為 0.5。
- fit_interceptbool,預設值=True
是否應估計截距。預設為 True。
- max_iterint,預設值=1000
訓練資料的最大傳遞次數(又稱 epoch)。它只會影響
fit
方法中的行為,而不會影響partial_fit
。預設值為 1000。值必須在範圍[1, inf)
內。- tolfloat 或 None,預設值=1e-3
停止條件。如果不是 None,則當 (loss > previous_loss - tol) 時,迭代將停止。預設值為 1e-3。值必須在範圍
[0.0, inf)
內。- shufflebool,預設值=True
是否應在每個 epoch 後對訓練資料進行洗牌。預設值為 True。
- verboseint,預設值=0
詳細程度。
- random_stateint,RandomState 實例或 None,預設值=None
洗牌資料時使用的虛擬隨機數產生器的種子。如果為 int,則 random_state 是隨機數產生器使用的種子;如果為 RandomState 實例,則 random_state 是隨機數產生器;如果為 None,則隨機數產生器是
np.random
使用的 RandomState 實例。- learning_rate{‘constant’, ‘optimal’, ‘invscaling’, ‘adaptive’},預設值=’optimal’
與
fit
一起使用的學習率排程。(如果使用partial_fit
,則必須直接控制學習率)。‘constant’:
eta = eta0
‘optimal’:
eta = 1.0 / (alpha * (t + t0))
,其中 t0 由 Leon Bottou 提出的啟發法選擇。‘invscaling’:
eta = eta0 / pow(t, power_t)
‘adaptive’:eta = eta0,只要訓練持續減少。每次 n_iter_no_change 個連續的 epoch 未能將訓練損失減少 tol,或者如果 early_stopping 為 True,則未能將驗證分數提高 tol,則將當前學習率除以 5。
- eta0float,預設值=0.0
用於 'constant'、'invscaling' 或 'adaptive' 排程的初始學習率。預設值為 0.0,因為預設排程 'optimal' 不使用 eta0。值必須在範圍
[0.0, inf)
內。- power_tfloat,預設值=0.5
反向縮放學習率的指數。值必須在範圍
(-inf, inf)
內。- warm_startbool,預設值=False
設定為 True 時,重用先前呼叫 fit 的解決方案作為初始化,否則,僅清除先前的解決方案。請參閱詞彙表。
當 warm_start 為 True 時,重複呼叫 fit 或 partial_fit 可能會導致與單次呼叫 fit 不同的解決方案,因為資料洗牌的方式。如果使用動態學習率,則學習率會根據已看到的樣本數量進行調整。呼叫
fit
會重設此計數器,而partial_fit
將導致增加現有計數器。- averagebool 或 int,預設值為 False
當設為 True 時,計算平均的 SGD 權重,並將結果儲存在
coef_
屬性中。如果設為大於 1 的整數,則在觀察到的樣本總數達到 average 值時,才會開始進行平均。因此,average=10
將在觀察到 10 個樣本後開始平均。
- 屬性:
- coef_形狀為 (1, n_features) 的 ndarray
分配給特徵的權重。
- offset_形狀為 (1,) 的 ndarray
用於從原始分數定義決策函數的偏移量。我們有以下關係:decision_function = score_samples - offset。
- n_iter_int
達到停止條件的實際迭代次數。
- t_int
訓練期間執行的權重更新次數。與
(n_iter_ * n_samples + 1)
相同。- n_features_in_int
在 fit 期間看到的特徵數量。
在 0.24 版本中新增。
- feature_names_in_形狀為 (
n_features_in_
,) 的 ndarray 在 fit 期間看到的特徵名稱。僅當
X
具有全部為字串的特徵名稱時定義。1.0 版本新增。
另請參閱
sklearn.svm.OneClassSVM
無監督異常值檢測。
注意事項
此估計器在訓練樣本數量上具有線性複雜度,因此比
sklearn.svm.OneClassSVM
實作更適合用於具有大量訓練樣本的數據集(例如 > 10,000)。範例
>>> import numpy as np >>> from sklearn import linear_model >>> X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]]) >>> clf = linear_model.SGDOneClassSVM(random_state=42) >>> clf.fit(X) SGDOneClassSVM(random_state=42)
>>> print(clf.predict([[4, 4]])) [1]
- decision_function(X)[原始碼]#
到分隔超平面的帶符號距離。
帶符號距離對於內點為正,對於異常值為負。
- 參數:
- X{類陣列, 稀疏矩陣},形狀為 (n_samples, n_features)
測試數據。
- 返回:
- dec類陣列,形狀為 (n_samples,)
樣本的決策函數值。
- densify()[原始碼]#
將係數矩陣轉換為密集陣列格式。
將
coef_
成員(返回)轉換為 numpy.ndarray。這是coef_
的預設格式,並且是擬合所必需的,因此僅在先前已稀疏化的模型上才需要調用此方法;否則,它是一個空操作。- 返回:
- self
已擬合的估計器。
- fit(X, y=None, coef_init=None, offset_init=None, sample_weight=None)[原始碼]#
使用隨機梯度下降擬合線性單類別 SVM。
這解決了單類別 SVM 原始最佳化問題的等效最佳化問題,並返回權重向量 w 和偏移量 rho,使得決策函數由 <w, x> - rho 給出。
- 參數:
- X{類陣列, 稀疏矩陣},形狀為 (n_samples, n_features)
訓練數據。
- y忽略
不使用,為 API 一致性而存在。
- coef_init陣列,形狀為 (n_classes, n_features)
用於熱啟動最佳化的初始係數。
- offset_init陣列,形狀為 (n_classes,)
用於熱啟動最佳化的初始偏移量。
- sample_weight類陣列,形狀為 (n_samples,),可選
應用於個別樣本的權重。如果未提供,則假設為均勻權重。如果指定了 class_weight,這些權重將與 class_weight(透過建構函式傳遞)相乘。
- 返回:
- self物件
返回 self 的已擬合實例。
- fit_predict(X, y=None, **kwargs)[原始碼]#
對 X 執行擬合並返回 X 的標籤。
對於異常值返回 -1,對於內點返回 1。
- 參數:
- X{類陣列,稀疏矩陣},形狀為 (n_samples, n_features)
輸入樣本。
- y忽略
不使用,為 API 一致性而存在。
- **kwargsdict
要傳遞給
fit
的參數。在 1.4 版本中新增。
- 返回:
- y形狀為 (n_samples,) 的 ndarray
內點為 1,異常值為 -1。
- get_metadata_routing()[原始碼]#
取得此物件的中繼資料路由。
請查看使用者指南,了解路由機制如何運作。
- 返回:
- routingMetadataRequest
一個封裝路由資訊的
MetadataRequest
。
- get_params(deep=True)[原始碼]#
取得此估計器的參數。
- 參數:
- deepbool,預設值為 True
如果為 True,則將傳回此估計器和包含的子物件(即估計器)的參數。
- 返回:
- paramsdict
對應至其值的參數名稱。
- partial_fit(X, y=None, sample_weight=None)[原始碼]#
使用隨機梯度下降擬合線性單類別 SVM。
- 參數:
- X{類陣列, 稀疏矩陣},形狀為 (n_samples, n_features)
訓練資料的子集。
- y忽略
不使用,為 API 一致性而存在。
- sample_weight類陣列,形狀為 (n_samples,),可選
應用於個別樣本的權重。如果未提供,則假設為均勻權重。
- 返回:
- self物件
返回 self 的已擬合實例。
- predict(X)[原始碼]#
回傳樣本的標籤(1 代表內部值,-1 代表離群值)。
- 參數:
- X{類陣列, 稀疏矩陣},形狀為 (n_samples, n_features)
測試數據。
- 返回:
- y陣列,形狀 (n_samples,)
樣本的標籤。
- score_samples(X)[原始碼]#
樣本的原始評分函數。
- 參數:
- X{類陣列, 稀疏矩陣},形狀為 (n_samples, n_features)
測試數據。
- 返回:
- score_samples類陣列,形狀 (n_samples,)
樣本的未平移評分函數值。
- set_fit_request(*, coef_init: bool | None | str = '$UNCHANGED$', offset_init: bool | None | str = '$UNCHANGED$', sample_weight: bool | None | str = '$UNCHANGED$') SGDOneClassSVM [原始碼]#
請求傳遞給
fit
方法的中繼資料。請注意,只有在
enable_metadata_routing=True
時,此方法才相關(請參閱sklearn.set_config
)。請參閱關於路由機制如何運作的使用者指南。每個參數的選項為
True
:請求中繼資料,如果已提供,則會傳遞給fit
。如果未提供中繼資料,則會忽略此請求。False
:不請求中繼資料,且元估算器不會將其傳遞給fit
。None
:不請求中繼資料,如果使用者提供,元估算器將會引發錯誤。str
:中繼資料應以指定的別名而非原始名稱傳遞給元估算器。
預設值(
sklearn.utils.metadata_routing.UNCHANGED
)會保留現有的請求。這可讓您變更某些參數的請求,而不是全部。在版本 1.3 中新增。
注意
只有在此估算器用作元估算器的子估算器時(例如,在
Pipeline
中使用),此方法才相關。否則,它沒有任何作用。- 參數:
- coef_initstr、True、False 或 None,預設值=sklearn.utils.metadata_routing.UNCHANGED
fit
中coef_init
參數的中繼資料路由。- offset_initstr、True、False 或 None,預設值=sklearn.utils.metadata_routing.UNCHANGED
fit
中offset_init
參數的中繼資料路由。- sample_weightstr、True、False 或 None,預設值=sklearn.utils.metadata_routing.UNCHANGED
fit
中sample_weight
參數的中繼資料路由。
- 返回:
- self物件
更新的物件。
- set_params(**params)[原始碼]#
設定此估算器的參數。
此方法適用於簡單的估算器以及巢狀物件(例如
Pipeline
)。後者具有<component>__<parameter>
形式的參數,因此可以更新巢狀物件的每個元件。- 參數:
- **params字典
估算器參數。
- 返回:
- self估算器實例
估算器實例。
- set_partial_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') SGDOneClassSVM [原始碼]#
請求傳遞至
partial_fit
方法的中繼資料。請注意,只有在
enable_metadata_routing=True
時,此方法才相關(請參閱sklearn.set_config
)。請參閱關於路由機制如何運作的使用者指南。每個參數的選項為
True
:請求中繼資料,並在提供時傳遞給partial_fit
。如果未提供中繼資料,則會忽略請求。False
:不請求中繼資料,並且 meta-estimator 將不會將其傳遞給partial_fit
。None
:不請求中繼資料,如果使用者提供,元估算器將會引發錯誤。str
:中繼資料應以指定的別名而非原始名稱傳遞給元估算器。
預設值(
sklearn.utils.metadata_routing.UNCHANGED
)會保留現有的請求。這可讓您變更某些參數的請求,而不是全部。在版本 1.3 中新增。
注意
只有在此估算器用作元估算器的子估算器時(例如,在
Pipeline
中使用),此方法才相關。否則,它沒有任何作用。- 參數:
- sample_weightstr、True、False 或 None,預設值=sklearn.utils.metadata_routing.UNCHANGED
partial_fit
中sample_weight
參數的中繼資料路由。
- 返回:
- self物件
更新的物件。
- sparsify()[原始碼]#
將係數矩陣轉換為稀疏格式。
將
coef_
成員轉換為 scipy.sparse 矩陣,對於 L1 正規化的模型而言,這比一般的 numpy.ndarray 表示法更有效率地利用記憶體和儲存空間。不會轉換
intercept_
成員。- 返回:
- self
已擬合的估計器。
注意事項
對於非稀疏模型,也就是當
coef_
中沒有很多零時,這實際上可能會增加記憶體使用量,因此請謹慎使用此方法。一個經驗法則是,零元素的數量(可以使用(coef_ == 0).sum()
計算)必須超過 50%,才能提供顯著的效益。調用此方法後,使用 partial_fit 方法(如果有的話)進行進一步擬合將無法運作,直到您調用 densify 為止。