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 所有類的最大迭代次數。 |
另見:
支持向量機分類器使用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([[0, 0, 0, 0]]))
[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方法(如果需要使用該方法)。