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

fitcoef_init 參數的中繼資料路由。

offset_initstr、True、False 或 None,預設值=sklearn.utils.metadata_routing.UNCHANGED

fitoffset_init 參數的中繼資料路由。

sample_weightstr、True、False 或 None,預設值=sklearn.utils.metadata_routing.UNCHANGED

fitsample_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_fitsample_weight 參數的中繼資料路由。

返回:
self物件

更新的物件。

sparsify()[原始碼]#

將係數矩陣轉換為稀疏格式。

coef_ 成員轉換為 scipy.sparse 矩陣,對於 L1 正規化的模型而言,這比一般的 numpy.ndarray 表示法更有效率地利用記憶體和儲存空間。

不會轉換 intercept_ 成員。

返回:
self

已擬合的估計器。

注意事項

對於非稀疏模型,也就是當 coef_ 中沒有很多零時,這實際上可能會增加記憶體使用量,因此請謹慎使用此方法。一個經驗法則是,零元素的數量(可以使用 (coef_ == 0).sum() 計算)必須超過 50%,才能提供顯著的效益。

調用此方法後,使用 partial_fit 方法(如果有的話)進行進一步擬合將無法運作,直到您調用 densify 為止。