sklearn.svm.LinearSVC?

class sklearn.svm.LinearSVC(penalty='l2', loss='squared_hinge', *, dual=True, tol=0.0001, C=1.0, multi_class='ovr', fit_intercept=True, intercept_scaling=1, class_weight=None, verbose=0, random_state=None, max_iter=1000)

類似于參數kernel= linear的SVC,但是它是liblinear而不是libsvm實現的,所以它在懲罰函數和損失函數的選擇上更靈活,更適合大量樣本。這個類既支持稠密輸入又支持稀疏輸入,并且多類支持是根據一對多方案處理的。

用戶指南閱讀更多內容。

參數 說明
penalty {‘l1’, ‘l2’}, default=’l2’
指定懲罰中使用的規范。 SVC中使用的標準是“ l2”懲罰。 “ l1”會導致稀疏的coef_向量。
loss {‘hinge’, ‘squared_hinge’}, default=’squared_hinge’
指定損失函數。hinge是標準的SVM損失(如SVC類使用的),而squared_hinge是hinge損失的平方。
dual bool, default=True
選擇算法來解決對偶或原始優化問題。 當n_samples> n_features時,首選dual = False。
tol float, default=1e-4
設置停止的條件。
C float, default=1.0
正則化參數。 正則化的強度與C成反比。必須嚴格設置為正的
multi_class {‘ovr’, ‘crammer_singer’}, default=’ovr’
如果y包含兩個以上的類,則確定多類策略。 “ ovr”訓練n_class一對多的靜態分類器,而“ crammer_singer”則優化所有類別的聯合目標。 盡管從理論上講crammer_singer很有趣,因為它是一致的,但在實踐中很少使用它,因為它很少導致更好的準確性,并且計算成本更高。 如果選擇“ crammer_singer”,則選項損失,懲罰和雙重選擇將被忽略。
fit_intercept bool, default=True
是否計算此模型的截距。 如果設置為false,則在計算中將不使用截距(即,數據已中心化)。
intercept_scaling float, default=1
當self.fit_intercept為True時,實例向量x變為[x,self.intercept_scaling],即,將具有等于intercept_scaling的恒定值的“合成”特征附加到實例向量。 截距變為intercept_scaling*綜合特征權重
注意! 與所有其他特征一樣,合成特征權重也要經過l1 / l2正則化。 為了減輕正則化對合成特征權重(以及因此對截距)的影響,必須增加intercept_scaling。
class_weight dict or ‘balanced’, default=None
對于SVC,將類別i的參數C設置為class_weight [i] * C。 如果未給出,則所有類均應具有權重一。 “平衡”模式使用y的值自動將權重與輸入數據中的類頻率成反比地調整為n_samples /(n_classes * np.bincount(y))。
verbose int, default=0
啟用詳細輸出。 請注意,此設置利用liblinear中每個進程運行時設置的優勢,如果啟用該設置,則可能無法在多線程上下文中正常工作。
random_state int or RandomState instance, default=None
控制偽隨機數生成,以對雙坐標下降數據進行混洗(如果dual = True)。 當dual = False時,LinearSVC的基礎實現不是隨機的,random_state對結果沒有影響。 為多個函數調用傳遞可重復輸出的int值。 請參閱詞匯表
max_iter int, default=1000
要運行的最大迭代次數。
屬性 說明
coef_ ndarray of shape (1, n_features) if n_classes == 2 else (n_classes, n_features)
分配給要素的權重(原始問題的系數)。 僅在線性內核的情況下可用。coef_是從raw_coef_派生的只讀屬性,該屬性遵循liblinear的內部內存布局。
intercept_ ndarray of shape (1,) if n_classes == 2 else (n_classes,)
決策函數中的常數。
classes_ ndarray of shape (n_classes,)
唯一的類標簽。
n_iter_ int
所有類的最大迭代次數。

另見:

SVC

支持向量機分類器使用libsvm的實現:內核可以是非線性的,但其SMO算法不能像LinearSVC那樣擴展到大量樣本。 此外,SVC多類模式使用一種對一種方案實現,而LinearSVC使用一種對另一種方案。 通過使sklearn.multiclass.OneVsRestClassifier包裝器,可以用SVC來實現一個類和其他類。 最后,如果輸入是C連續的,則SVC可以適合密集數據而無需復制內存。 稀疏數據仍然會導致內存復制。

sklearn.linear_model.SGDClassifier

SGDClassifier可以通過調整損失和損失參數來優化與LinearSVC相同的成本函數。 另外,它需要更少的內存,允許增量(在線)學習,并實現各種損失函數和正則化機制。

注:

底層的C實現在擬合模型時使用隨機數生成器選擇特征。 因此,對于相同的輸入數據具有略有不同的結果并不罕見。 如果發生這種情況,請嘗試使用較小的tol參數。

基本的實現liblinear使用了稀疏的內部表示形式來表示將導致內存復制的數據。

在某些情況下,預測輸出可能與獨立liblinear的輸出不匹配。 在敘述性文檔中查看與liblinear的區別

參考:

LIBLINEAR: A Library for Large Linear Classification

示例

>>>

>>> from sklearn.svm import LinearSVC
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.preprocessing import StandardScaler
>>> from sklearn.datasets import make_classification
>>> X, y = make_classification(n_features=4, random_state=0)
>>> clf = make_pipeline(StandardScaler(),
...                     LinearSVC(random_state=0, tol=1e-5))
>>> clf.fit(X, y)
Pipeline(steps=[('standardscaler', StandardScaler()),
                ('linearsvc', LinearSVC(random_state=0, tol=1e-05

>>>

>>> print(clf.named_steps['linearsvc'].coef_)
[[0.141...   0.526... 0.679... 0.493...]]

>>>

>>> print(clf.named_steps['linearsvc'].intercept_)
[0.1693...]
>>> print(clf.predict([[0000]]))
[1]

方法

方法 說明
decision_function(self,X) 預測樣本的置信度得分。
densify(self) 將系數矩陣轉換為數組格式。
fit(self, X, y[, sample_weight]) 根據給定的訓練數據擬合模型。
get_params(self[, deep]) 獲取這個估計器的參數。
predict(self, X) 預測X中樣本的類別標簽。
score(self, X, y[, sample_weight]) 返回給定測試數據和標簽上的平均準確度。
set_params(self, **params) 設置這個估計器的參數。
sparsify(self) 將系數矩陣轉換為稀疏格式。
 __init__(self, penalty='l2', loss='squared_hinge', *, dual=True, tol=0.0001, C=1.0, multi_class='ovr', fit_intercept=True, intercept_scaling=1, class_weight=None, verbose=0, random_state=None, max_iter=1000)

源碼

初始化self, 請參閱help(type(self))以獲得準確的說明

decision_function(self, X)

源碼

預測樣本的置信度得分。一個樣本的置信分數是該樣本到超平面的有符號距離。

參數 說明
X array_like or sparse matrix, shape (n_samples, n_features)
樣本
返回值 說明
result array, shape=(n_samples,) if n_classes == 2 else (n_samples, n_classes)
每個(樣本,班級)組合的置信度得分。在二進制情況下,得到self的置信度得分。其中,>0表示這個類將被預測。
densify(self)

源碼

將系數矩陣轉換為密集數組格式

將coef_成員(返回)轉換為numpy.ndarray。 這是coef_的默認格式,并且是擬合所需的格式,因此僅在以前稀疏的模型上才需要調用此方法。 否則,它是無操作的。

返回值 說明
self Fitted estimator
 fit(self, X, y, sample_weight=None)

源碼

根據給定的訓練數據擬合模型。

參數 說明
X {array-like, sparse matrix} of shape (n_samples, n_features)
訓練向量,其中n個樣本中的樣本個數和n個特征就是特征的個數。
y array-like of shape (n_samples,)
與X對應的目標向量。
sample_weight array-like of shape (n_samples,), default=None
分配給單個樣本的權重數組。如果沒有提供,則每個樣品都給予單位權重。
返回值 說明
self object
估計器的一個實例。
 get_params(self, deep=True)

源碼

獲取此估計的參數。

參數 說明
deep bool, default=True
如果為真,將返回此估計器的參數以及作為估計器所包含子對象的參數。
返回值 說明
params mapping of string to any
參數名稱映射到它們的值。
 predict(self, X)

源碼

預測X中樣本的類標簽。

參數 說明
X array_like or sparse matrix, shape (n_samples, n_features)
樣本
返回值 說明
C array, shape [n_samples]
每個樣本預測的類標簽。
score(self, X, y, sample_weight=None)

源碼

返回給定測試數據和標簽上的平均準確度。

在多標簽分類中,這是子集精度,這是一個嚴格的指標,因為您需要為每個樣本正確預測每個標簽集。

參數 說明
X array-like of shape (n_samples, n_features)
測試樣本
y array-like of shape (n_samples,) or (n_samples, n_outputs)
X的真實標簽
sample_weight array-like of shape (n_samples,), default=None
樣本權重
返回值 說明
score float
預測的平均準確度
set_params(self, **params)

源碼

設置此估算器的參數。

該方法適用于簡單的估計器以及嵌套對象(例如管道)。 后者的參數格式為<component> __ <parameter>,以便可以更新嵌套對象的每個組件。

參數 說明
**params dict
已估計的參數
返回值 說明
self object
估計實例
sparsify(self)

源碼

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

將coef_成員轉換為scipy.sparse矩陣,對于L1規范化的模型,該矩陣可以比通常的numpy.ndarray具有更高的內存和存儲效率。

Intercept_成員未轉換。

返回值 說明
self 擬合估計量

注意:

對于非稀疏模型,即當coef中沒有很多零時,這可能會增加內存的使用,所以要小心使用這種方法。經驗法則是,使用(coef == 0).sum()計算的零元素的數量必須大于50%,才能提供顯著的好處。 調用此方法后,在調用densify之前,無法進一步使用partial_fit方法(如果需要使用該方法)。