LinearSVC#
- class sklearn.svm.LinearSVC(penalty='l2', loss='squared_hinge', *, dual='auto', 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)[Quelle]#
Lineare Support Vector Klassifizierung.
Ähnlich wie SVC mit dem Parameter kernel=’linear’, aber implementiert mit liblinear anstelle von libsvm, so dass es mehr Flexibilität bei der Wahl der Strafen und Verlustfunktionen bietet und besser auf große Stichprobenmengen skaliert.
Die Hauptunterschiede zwischen
LinearSVCundSVCliegen in der standardmäßig verwendeten Verlustfunktion und in der Handhabung der Intercept-Regularisierung zwischen diesen beiden Implementierungen.Diese Klasse unterstützt sowohl dichte als auch dünnbesetzte Eingaben und die Multiklassenunterstützung wird nach einem One-vs-the-Rest-Schema gehandhabt.
Lesen Sie mehr im Benutzerhandbuch.
- Parameter:
- penalty{‘l1’, ‘l2’}, Standardwert=’l2’
Gibt die bei der Bestrafung verwendete Norm an. Die ‚l2‘-Strafe ist die bei SVC verwendete Standardeinstellung. Die ‚l1‘-Strafe führt zu
coef_-Vektoren, die dünnbesetzt sind.- loss{‘hinge’, ‘squared_hinge’}, Standardwert=’squared_hinge’
Gibt die Verlustfunktion an. ‚hinge‘ ist der Standard-SVM-Verlust (z. B. von der SVC-Klasse verwendet), während ‚squared_hinge‘ das Quadrat des Hinge-Verlusts ist. Die Kombination von
penalty='l1'undloss='hinge'wird nicht unterstützt.- dual“auto” oder bool, Standardwert=”auto”
Wählt den Algorithmus zur Lösung des dualen oder primären Optimierungsproblems. Bevorzugen Sie dual=False, wenn n_samples > n_features.
dual="auto"wählt den Wert des Parameters automatisch basierend auf den Werten vonn_samples,n_features,loss,multi_classundpenalty. Wennn_samples<n_featuresund der Optimierer den gewähltenloss,multi_classundpenaltyunterstützt, wird dual auf True gesetzt, andernfalls auf False.Geändert in Version 1.3: Die Option
"auto"wurde in Version 1.3 hinzugefügt und wird in Version 1.5 der Standard sein.- tolfloat, Standard=1e-4
Toleranz für die Abbruchkriterien.
- Cfloat, Standardwert=1.0
Regularisierungsparameter. Die Stärke der Regularisierung ist umgekehrt proportional zu C. Muss strikt positiv sein. Eine anschauliche Visualisierung der Effekte der Skalierung des Regularisierungsparameters C finden Sie unter Skalierung des Regularisierungsparameters für SVCs.
- multi_class{‘ovr’, ‘crammer_singer’}, Standardwert=’ovr’
Bestimmt die Multiklassenstrategie, wenn
ymehr als zwei Klassen enthält."ovr"trainiert n_classes One-vs-Rest-Klassifikatoren, während"crammer_singer"ein gemeinsames Zielfunktional über alle Klassen optimiert. Obwohlcrammer_singeraus theoretischer Sicht interessant ist, da es konsistent ist, wird es selten in der Praxis verwendet, da es selten zu einer besseren Genauigkeit führt und rechenintensiver ist. Wenn"crammer_singer"gewählt wird, werden die Optionen loss, penalty und dual ignoriert.- fit_interceptbool, Standardwert=True
Ob ein Intercept (Achsenabschnitt) angepasst werden soll oder nicht. Wenn auf True gesetzt, wird der Merkmalsvektor um einen Intercept-Term erweitert:
[x_1, ..., x_n, 1], wobei 1 dem Intercept entspricht. Wenn auf False gesetzt, wird kein Intercept für Berechnungen verwendet (d. h. es wird erwartet, dass die Daten bereits zentriert sind).- intercept_scalingfloat, Standardwert=1.0
Wenn
fit_interceptauf True gesetzt ist, wird der Instanzvektor x zu[x_1, ..., x_n, intercept_scaling], d. h. ein „synthetisches“ Merkmal mit einem konstanten Wert gleichintercept_scalingwird an den Instanzvektor angehängt. Der Intercept wird zu intercept_scaling * synthetisches Merkmalgewicht. Beachten Sie, dass liblinear intern den Intercept bestraft und ihn wie jeden anderen Term im Merkmalsvektor behandelt. Um die Auswirkung der Regularisierung auf den Intercept zu reduzieren, kann der Parameterintercept_scalingauf einen Wert größer als 1 gesetzt werden; je höher der Wert vonintercept_scaling, desto geringer die Auswirkung der Regularisierung darauf. Dann werden die Gewichte zu[w_x_1, ..., w_x_n, w_intercept*intercept_scaling], wobeiw_x_1, ..., w_x_ndie Merkmalsgewichte und das Intercept-Gewicht mitintercept_scalingskaliert werden. Diese Skalierung ermöglicht es dem Intercept-Term, ein anderes Regularisierungsverhalten als die anderen Merkmale zu haben.- class_weightdict oder ‘balanced’, Standard=None
Setzt den Parameter C der Klasse i auf
class_weight[i]*Cfür SVC. Wenn nicht angegeben, wird angenommen, dass alle Klassen das Gewicht eins haben. Der Modus „balanced“ verwendet die Werte von y, um die Gewichte automatisch umgekehrt proportional zur Klassenhäufigkeit in den Eingabedaten anzupassen alsn_samples / (n_classes * np.bincount(y)).- verboseint, default=0
Aktiviert die ausführliche Ausgabe. Beachten Sie, dass diese Einstellung eine prozessabhängige Laufzeiteinstellung in liblinear nutzt, die möglicherweise nicht ordnungsgemäß in einem Multithreaded-Kontext funktioniert, wenn sie aktiviert ist.
- random_stateint, RandomState-Instanz oder None, default=None
Steuert die Pseudo-Zufallszahlengenerierung zum Mischen der Daten für die duale Koordinatenabstiegsmethode (wenn
dual=True). Wenndual=Falseist, ist die zugrunde liegende Implementierung vonLinearSVCnicht zufällig undrandom_statehat keinen Einfluss auf die Ergebnisse. Übergeben Sie eine Ganzzahl für reproduzierbare Ergebnisse über mehrere Funktionsaufrufe hinweg. Siehe Glossar.- max_iterint, default=1000
Die maximale Anzahl von Iterationen, die ausgeführt werden sollen.
- Attribute:
- coef_ndarray von Form (1, n_features), wenn n_classes == 2, sonst (n_classes, n_features)
Gewichte, die den Merkmalen zugewiesen werden (Koeffizienten im primären Problem).
coef_ist eine schreibgeschützte Eigenschaft, die vonraw_coef_abgeleitet ist und dem internen Speicherlayout von liblinear folgt.- intercept_ndarray von Form (1,), wenn n_classes == 2, sonst (n_classes,)
Konstanten in der Entscheidungsfunktion.
- classes_ndarray der Form (n_classes,)
Die eindeutigen Klassennamen.
- n_features_in_int
Anzahl der während des fits gesehenen Merkmale.
Hinzugefügt in Version 0.24.
- feature_names_in_ndarray mit Form (
n_features_in_,) Namen der während fit gesehenen Merkmale. Nur definiert, wenn
XMerkmalnamen hat, die alle Zeichenketten sind.Hinzugefügt in Version 1.0.
- n_iter_int
Maximale Anzahl von Iterationen, die über alle Klassen ausgeführt werden.
Siehe auch
SVCImplementierung von Support Vector Machine-Klassifikatoren mit libsvm: Der Kernel kann nichtlinear sein, aber sein SMO-Algorithmus skaliert nicht für eine große Anzahl von Stichproben, wie es LinearSVC tut. Darüber hinaus ist der Multiklassenmodus von SVC nach einem One-vs-One-Schema implementiert, während LinearSVC One-vs-Rest verwendet. Es ist möglich, One-vs-Rest mit SVC mithilfe des Wrappers
OneVsRestClassifierzu implementieren. Schließlich kann SVC dichte Daten ohne Kopie des Speichers anpassen, wenn die Eingabe C-kontinuierlich ist. Dünnbesetzte Daten verursachen jedoch weiterhin eine Kopie des Speichers.sklearn.linear_model.SGDClassifierSGDClassifier kann die gleiche Kostenfunktion wie LinearSVC optimieren, indem die Parameter penalty und loss angepasst werden. Darüber hinaus benötigt es weniger Speicher, ermöglicht inkrementelles (Online-)Lernen und implementiert verschiedene Verlustfunktionen und Regularisierungsregime.
Anmerkungen
Die zugrunde liegende C-Implementierung verwendet einen Zufallszahlengenerator, um Merkmale bei der Anpassung des Modells auszuwählen. Es ist daher nicht ungewöhnlich, leicht unterschiedliche Ergebnisse für dieselben Eingabedaten zu erhalten. Wenn dies geschieht, versuchen Sie es mit einem kleineren
tol-Parameter.Die zugrunde liegende Implementierung, liblinear, verwendet eine dünnbesetzte interne Darstellung für die Daten, was zu einer Speichererstellung führt.
Die Vorhersageausgabe stimmt möglicherweise nicht in allen Fällen mit der von Standalone liblinear überein. Siehe Unterschiede zu liblinear in der textuellen Dokumentation.
Referenzen
LIBLINEAR: Eine Bibliothek für große lineare Klassifizierung
Beispiele
>>> 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(X)[Quelle]#
Konfidenz-Scores für Stichproben vorhersagen.
Der Konfidenz-Score für eine Stichprobe ist proportional zum vorzeichenbehafteten Abstand dieser Stichprobe zur Hyperebene.
- Parameter:
- X{array-like, sparse matrix} der Form (n_samples, n_features)
Die Datenmatrix, für die wir die Konfidenz-Scores erhalten möchten.
- Gibt zurück:
- scoresndarray der Form (n_samples,) oder (n_samples, n_classes)
Konfidenz-Scores pro
(n_samples, n_classes)-Kombination. Im binären Fall, Konfidenz-Score fürself.classes_[1], wobei >0 bedeutet, dass diese Klasse vorhergesagt würde.
- densify()[Quelle]#
Konvertiert die Koeffizientenmatrix in ein dichtes Array-Format.
Konvertiert das Mitglied
coef_(zurück) in ein numpy.ndarray. Dies ist das Standardformat voncoef_und wird für das Training benötigt, daher muss diese Methode nur auf Modellen aufgerufen werden, die zuvor verknappt wurden; andernfalls ist sie eine No-Op.- Gibt zurück:
- self
Angepasster Schätzer.
- fit(X, y, sample_weight=None)[Quelle]#
Trainiert das Modell anhand der gegebenen Trainingsdaten.
- Parameter:
- X{array-like, sparse matrix} der Form (n_samples, n_features)
Trainingsvektor, wobei
n_samplesdie Anzahl der Stichproben undn_featuresdie Anzahl der Merkmale ist.- yarray-like von Form (n_samples,)
Zielvektor relativ zu X.
- sample_weightarray-like der Form (n_samples,), Standardwert=None
Array von Gewichten, die einzelnen Stichproben zugeordnet sind. Wenn nicht bereitgestellt, erhält jede Stichprobe das Einheitsgewicht.
Hinzugefügt in Version 0.18.
- Gibt zurück:
- selfobject
Eine Instanz des Schätzers.
- get_metadata_routing()[Quelle]#
Holt das Metadaten-Routing dieses Objekts.
Bitte prüfen Sie im Benutzerhandbuch, wie der Routing-Mechanismus funktioniert.
- Gibt zurück:
- routingMetadataRequest
Ein
MetadataRequest, der Routing-Informationen kapselt.
- get_params(deep=True)[Quelle]#
Holt Parameter für diesen Schätzer.
- Parameter:
- deepbool, default=True
Wenn True, werden die Parameter für diesen Schätzer und die enthaltenen Unterobjekte, die Schätzer sind, zurückgegeben.
- Gibt zurück:
- paramsdict
Parameternamen, zugeordnet ihren Werten.
- predict(X)[Quelle]#
Vorhersagen von Klassenbezeichnungen für Stichproben in X.
- Parameter:
- X{array-like, sparse matrix} der Form (n_samples, n_features)
Die Datenmatrix, für die wir die Vorhersagen erhalten möchten.
- Gibt zurück:
- y_predndarray von Form (n_samples,)
Vektor, der die Klassenbezeichnungen für jede Stichprobe enthält.
- score(X, y, sample_weight=None)[Quelle]#
Gibt die Genauigkeit für die bereitgestellten Daten und Bezeichnungen zurück.
Bei der Multi-Label-Klassifizierung ist dies die Subset-Genauigkeit, eine strenge Metrik, da für jede Stichprobe verlangt wird, dass jede Label-Menge korrekt vorhergesagt wird.
- Parameter:
- Xarray-like der Form (n_samples, n_features)
Teststichproben.
- yarray-like der Form (n_samples,) oder (n_samples, n_outputs)
Wahre Bezeichnungen für
X.- sample_weightarray-like der Form (n_samples,), Standardwert=None
Stichprobengewichte.
- Gibt zurück:
- scorefloat
Mittlere Genauigkeit von
self.predict(X)in Bezug aufy.
- set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') LinearSVC[Quelle]#
Konfiguriert, ob Metadaten für die
fit-Methode angefordert werden sollen.Beachten Sie, dass diese Methode nur relevant ist, wenn dieser Schätzer als Unter-Schätzer innerhalb eines Meta-Schätzers verwendet wird und Metadaten-Routing mit
enable_metadata_routing=Trueaktiviert ist (siehesklearn.set_config). Bitte lesen Sie das Benutzerhandbuch, um zu erfahren, wie der Routing-Mechanismus funktioniert.Die Optionen für jeden Parameter sind
True: Metadaten werden angefordert und, falls vorhanden, anfitübergeben. Die Anforderung wird ignoriert, wenn keine Metadaten vorhanden sind.False: Metadaten werden nicht angefordert und der Meta-Schätzer übergibt sie nicht anfit.None: Metadaten werden nicht angefordert und der Meta-Schätzer löst einen Fehler aus, wenn der Benutzer sie bereitstellt.str: Metadaten sollten mit diesem Alias an den Meta-Schätzer übergeben werden und nicht mit dem ursprünglichen Namen.
Der Standardwert (
sklearn.utils.metadata_routing.UNCHANGED) behält die bestehende Anforderung bei. Dies ermöglicht es Ihnen, die Anforderung für einige Parameter zu ändern und für andere nicht.Hinzugefügt in Version 1.3.
- Parameter:
- sample_weightstr, True, False, oder None, Standardwert=sklearn.utils.metadata_routing.UNCHANGED
Metadaten-Routing für den Parameter
sample_weightinfit.
- Gibt zurück:
- selfobject
Das aktualisierte Objekt.
- set_params(**params)[Quelle]#
Setzt die Parameter dieses Schätzers.
Die Methode funktioniert sowohl bei einfachen Schätzern als auch bei verschachtelten Objekten (wie
Pipeline). Letztere haben Parameter der Form<component>__<parameter>, so dass es möglich ist, jede Komponente eines verschachtelten Objekts zu aktualisieren.- Parameter:
- **paramsdict
Schätzer-Parameter.
- Gibt zurück:
- selfestimator instance
Schätzer-Instanz.
- set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') LinearSVC[Quelle]#
Konfiguriert, ob Metadaten für die
score-Methode angefordert werden sollen.Beachten Sie, dass diese Methode nur relevant ist, wenn dieser Schätzer als Unter-Schätzer innerhalb eines Meta-Schätzers verwendet wird und Metadaten-Routing mit
enable_metadata_routing=Trueaktiviert ist (siehesklearn.set_config). Bitte lesen Sie das Benutzerhandbuch, um zu erfahren, wie der Routing-Mechanismus funktioniert.Die Optionen für jeden Parameter sind
True: Metadaten werden angefordert und, falls vorhanden, anscoreübergeben. Die Anforderung wird ignoriert, wenn keine Metadaten vorhanden sind.False: Metadaten werden nicht angefordert und der Meta-Schätzer übergibt sie nicht anscore.None: Metadaten werden nicht angefordert und der Meta-Schätzer löst einen Fehler aus, wenn der Benutzer sie bereitstellt.str: Metadaten sollten mit diesem Alias an den Meta-Schätzer übergeben werden und nicht mit dem ursprünglichen Namen.
Der Standardwert (
sklearn.utils.metadata_routing.UNCHANGED) behält die bestehende Anforderung bei. Dies ermöglicht es Ihnen, die Anforderung für einige Parameter zu ändern und für andere nicht.Hinzugefügt in Version 1.3.
- Parameter:
- sample_weightstr, True, False, oder None, Standardwert=sklearn.utils.metadata_routing.UNCHANGED
Metadaten-Routing für den Parameter
sample_weightinscore.
- Gibt zurück:
- selfobject
Das aktualisierte Objekt.
- sparsify()[Quelle]#
Koeffizientenmatrix in Sparse-Format konvertieren.
Konvertiert das
coef_-Mitglied in eine scipy.sparse-Matrix, die für Modelle mit L1-Regularisierung speicher- und speichereffizienter sein kann als die übliche numpy.ndarray-Darstellung.Das
intercept_-Mitglied wird nicht konvertiert.- Gibt zurück:
- self
Angepasster Schätzer.
Anmerkungen
Für nicht-sparse Modelle, d.h. wenn nicht viele Nullen in
coef_vorhanden sind, kann dies tatsächlich den Speicherverbrauch *erhöhen*, also verwenden Sie diese Methode mit Vorsicht. Eine Faustregel besagt, dass die Anzahl der Nullelemente, die mit(coef_ == 0).sum()berechnet werden kann, mehr als 50 % betragen muss, damit dies signifikante Vorteile bringt.Nach dem Aufruf dieser Methode funktioniert die weitere Anpassung mit der Methode
partial_fit(falls vorhanden) nicht mehr, bis Siedensifyaufrufen.
Galeriebeispiele#
Dimensionsreduktion auswählen mit Pipeline und GridSearchCV
Skalierbares Lernen mit Polynom-Kernel-Approximation
Verschiedene SVM-Klassifikatoren im Iris-Datensatz plotten
Skalierung des Regularisierungsparameters für SVCs
Klassifikation von Textdokumenten mit spärlichen Merkmalen