Heim >Backend-Entwicklung >Python-Tutorial >Logistische Regression, Klassifizierung: Überwachtes maschinelles Lernen
Klassifizierung ist eine überwachte Lerntechnik, die im maschinellen Lernen und in der Datenwissenschaft verwendet wird, um Daten in vordefinierte Klassen oder Bezeichnungen zu kategorisieren. Dabei wird ein Modell trainiert, um Eingabedatenpunkte basierend auf ihren Merkmalen einer von mehreren diskreten Kategorien zuzuordnen. Der Hauptzweck der Klassifizierung besteht darin, die Klasse oder Kategorie neuer, unsichtbarer Datenpunkte genau vorherzusagen.
1. Binäre Klassifizierung
2. Mehrklassenklassifizierung
Lineare Klassifikatoren sind eine Kategorie von Klassifizierungsalgorithmen, die eine lineare Entscheidungsgrenze verwenden, um verschiedene Klassen im Merkmalsraum zu trennen. Sie treffen Vorhersagen, indem sie die Eingabemerkmale durch eine lineare Gleichung kombinieren, die typischerweise die Beziehung zwischen den Merkmalen und den Zielklassenbezeichnungen darstellt. Der Hauptzweck linearer Klassifikatoren besteht darin, Datenpunkte effizient zu klassifizieren, indem sie eine Hyperebene finden, die den Merkmalsraum in verschiedene Klassen unterteilt.
Logistische Regression ist eine statistische Methode, die für binäre Klassifizierungsaufgaben im maschinellen Lernen und in der Datenwissenschaft verwendet wird. Es ist Teil von linearen Klassifikatoren und unterscheidet sich von der linearen Regression durch die Vorhersage der Eintrittswahrscheinlichkeit eines Ereignisses durch Anpassen der Daten an eine logistische Kurve.
1. Logistische Funktion (Sigmoidfunktion)
2. Logistische Regressionsgleichung
MLE wird verwendet, um die Parameter (Koeffizienten) des logistischen Regressionsmodells zu schätzen, indem die Wahrscheinlichkeit der Beobachtung der vom Modell gegebenen Daten maximiert wird.
Gleichung: Die Maximierung der Log-Likelihood-Funktion beinhaltet das Finden der Parameter, die die Wahrscheinlichkeit der Beobachtung der Daten maximieren.
Die Kostenfunktion in der logistischen Regression misst den Unterschied zwischen vorhergesagten Wahrscheinlichkeiten und tatsächlichen Klassenbezeichnungen. Ziel ist es, diese Funktion zu minimieren, um die Vorhersagegenauigkeit des Modells zu verbessern.
Protokollverlust (binäre Kreuzentropie):
Die Protokollverlustfunktion wird häufig in der logistischen Regression für binäre Klassifizierungsaufgaben verwendet.
Log-Verlust = -(1/n) * Σ [y * log(ŷ) + (1 - y) * log(1 - ŷ)]
wo:
Der Protokollverlust bestraft Vorhersagen, die weit von der tatsächlichen Klassenbezeichnung entfernt sind, und ermutigt das Modell, genaue Wahrscheinlichkeiten zu erzeugen.
Verlustminimierung bei der logistischen Regression beinhaltet das Finden der Werte der Modellparameter, die den Kostenfunktionswert minimieren. Dieser Prozess wird auch als Optimierung bezeichnet. Die gebräuchlichste Methode zur Verlustminimierung bei der logistischen Regression ist der Gradient Descent-Algorithmus.
Gradient Descent ist ein iterativer Optimierungsalgorithmus, der zur Minimierung der Kostenfunktion in der logistischen Regression verwendet wird. Es passt die Modellparameter in Richtung des steilsten Abfalls der Kostenfunktion an.
Schritte des Gradientenabstiegs:
Parameter initialisieren: Beginnen Sie mit Anfangswerten für die Modellparameter (z. B. Koeffizienten w0, w1, ..., wn).
Steigung berechnen: Berechnen Sie den Gradienten der Kostenfunktion in Bezug auf jeden Parameter. Der Gradient ist die partielle Ableitung der Kostenfunktion.
Parameter aktualisieren: Passen Sie die Parameter in die entgegengesetzte Richtung des Farbverlaufs an. Die Anpassung wird durch die Lernrate (α) gesteuert, die die Größe der Schritte in Richtung des Minimums bestimmt.
Wiederholen: Iterieren Sie den Prozess, bis die Kostenfunktion einem Mindestwert konvergiert (oder eine vordefinierte Anzahl von Iterationen erreicht ist).
Parameteraktualisierungsregel:
Für jeden Parameter wj:
wj = wj - α * (∂/∂wj) Protokollverlust
wo:
Die partielle Ableitung des logarithmischen Verlusts nach wj kann wie folgt berechnet werden:
(∂/∂wj) Log-Verlust = -(1/n) * Σ [ (yi - ŷi) * xij / (ŷi * (1 - ŷi)) ]
wo:
Logistische Regression ist eine Technik, die für binäre Klassifizierungsaufgaben verwendet wird und die Wahrscheinlichkeit modelliert, dass eine bestimmte Eingabe zu einer bestimmten Klasse gehört. Dieses Beispiel zeigt, wie man eine logistische Regression mithilfe synthetischer Daten implementiert, die Leistung des Modells bewertet und die Entscheidungsgrenze visualisiert.
1. Bibliotheken importieren
import numpy as np import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
Dieser Block importiert die notwendigen Bibliotheken für Datenmanipulation, Darstellung und maschinelles Lernen.
2. Beispieldaten generieren
np.random.seed(42) # For reproducibility X = np.random.randn(1000, 2) y = (X[:, 0] + X[:, 1] > 0).astype(int)
Dieser Block generiert Beispieldaten mit zwei Merkmalen, wobei die Zielvariable y basierend darauf definiert wird, ob die Summe der Merkmale größer als Null ist, wodurch ein binäres Klassifizierungsszenario simuliert wird.
3. Teilen Sie den Datensatz auf
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Dieser Block teilt den Datensatz zur Modellbewertung in Trainings- und Testsätze auf.
4. Erstellen und trainieren Sie das logistische Regressionsmodell
model = LogisticRegression(random_state=42) model.fit(X_train, y_train)
Dieser Block initialisiert das logistische Regressionsmodell und trainiert es mithilfe des Trainingsdatensatzes.
5. Machen Sie Vorhersagen
y_pred = model.predict(X_test)
Dieser Block verwendet das trainierte Modell, um Vorhersagen zum Testsatz zu treffen.
6. Bewerten Sie das Modell
accuracy = accuracy_score(y_test, y_pred) conf_matrix = confusion_matrix(y_test, y_pred) class_report = classification_report(y_test, y_pred) print(f"Accuracy: {accuracy:.4f}") print("\nConfusion Matrix:") print(conf_matrix) print("\nClassification Report:") print(class_report)
Ausgabe:
Accuracy: 0.9950 Confusion Matrix: [[ 92 0] [ 1 107]] Classification Report: precision recall f1-score support 0 0.99 1.00 0.99 92 1 1.00 0.99 1.00 108 accuracy 0.99 200 macro avg 0.99 1.00 0.99 200 weighted avg 1.00 0.99 1.00 200
Dieser Block berechnet und druckt die Genauigkeit, die Verwirrungsmatrix und den Klassifizierungsbericht und bietet Einblicke in die Leistung des Modells.
7. Visualisieren Sie die Entscheidungsgrenze
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1 y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1 xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1), np.arange(y_min, y_max, 0.1)) Z = model.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) plt.figure(figsize=(10, 8)) plt.contourf(xx, yy, Z, alpha=0.4) plt.scatter(X[:, 0], X[:, 1], c=y, alpha=0.8) plt.xlabel("Feature 1") plt.ylabel("Feature 2") plt.title("Logistic Regression Decision Boundary") plt.show()
Dieser Block visualisiert die vom logistischen Regressionsmodell erstellte Entscheidungsgrenze und veranschaulicht, wie das Modell die beiden Klassen im Merkmalsraum trennt.
Ausgabe:
Dieser strukturierte Ansatz zeigt, wie die logistische Regression implementiert und ausgewertet wird, und vermittelt ein klares Verständnis ihrer Fähigkeiten für binäre Klassifizierungsaufgaben. Die Visualisierung der Entscheidungsgrenze hilft bei der Interpretation der Modellvorhersagen.
Logistic regression can also be applied to multiclass classification tasks. This example demonstrates how to implement logistic regression using synthetic data, evaluate the model's performance, and visualize the decision boundary for three classes.
1. Import Libraries
import numpy as np import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
This block imports the necessary libraries for data manipulation, plotting, and machine learning.
2. Generate Sample Data with 3 Classes
np.random.seed(42) # For reproducibility n_samples = 999 # Total number of samples n_samples_per_class = 333 # Ensure this is exactly n_samples // 3 # Class 0: Top-left corner X0 = np.random.randn(n_samples_per_class, 2) * 0.5 + [-2, 2] # Class 1: Top-right corner X1 = np.random.randn(n_samples_per_class, 2) * 0.5 + [2, 2] # Class 2: Bottom center X2 = np.random.randn(n_samples_per_class, 2) * 0.5 + [0, -2] # Combine the data X = np.vstack([X0, X1, X2]) y = np.hstack([np.zeros(n_samples_per_class), np.ones(n_samples_per_class), np.full(n_samples_per_class, 2)]) # Shuffle the dataset shuffle_idx = np.random.permutation(n_samples) X, y = X[shuffle_idx], y[shuffle_idx]
This block generates synthetic data for three classes located in different regions of the feature space.
3. Split the Dataset
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
This block splits the dataset into training and testing sets for model evaluation.
4. Create and Train the Logistic Regression Model
model = LogisticRegression(random_state=42) model.fit(X_train, y_train)
This block initializes the logistic regression model and trains it using the training dataset.
5. Make Predictions
y_pred = model.predict(X_test)
This block uses the trained model to make predictions on the test set.
6. Evaluate the Model
accuracy = accuracy_score(y_test, y_pred) conf_matrix = confusion_matrix(y_test, y_pred) class_report = classification_report(y_test, y_pred) print(f"Accuracy: {accuracy:.4f}") print("\nConfusion Matrix:") print(conf_matrix) print("\nClassification Report:") print(class_report)
Output:
Accuracy: 1.0000 Confusion Matrix: [[54 0 0] [ 0 65 0] [ 0 0 81]] Classification Report: precision recall f1-score support 0.0 1.00 1.00 1.00 54 1.0 1.00 1.00 1.00 65 2.0 1.00 1.00 1.00 81 accuracy 1.00 200 macro avg 1.00 1.00 1.00 200 weighted avg 1.00 1.00 1.00 200
This block calculates and prints the accuracy, confusion matrix, and classification report, providing insights into the model's performance.
7. Visualize the Decision Boundary
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1 y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1 xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1), np.arange(y_min, y_max, 0.1)) Z = model.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) plt.figure(figsize=(10, 8)) plt.contourf(xx, yy, Z, alpha=0.4, cmap='RdYlBu') scatter = plt.scatter(X[:, 0], X[:, 1], c=y, cmap='RdYlBu', edgecolor='black') plt.xlabel("Feature 1") plt.ylabel("Feature 2") plt.title("Multiclass Logistic Regression Decision Boundary") plt.colorbar(scatter) plt.show()
This block visualizes the decision boundaries created by the logistic regression model, illustrating how the model separates the three classes in the feature space.
Output:
This structured approach demonstrates how to implement and evaluate logistic regression for multiclass classification tasks, providing a clear understanding of its capabilities and the effectiveness of visualizing decision boundaries.
Evaluating a logistic regression model involves assessing its performance in predicting binary or multiclass outcomes. Below are key methods for evaluation:
from sklearn.metrics import accuracy_score accuracy = accuracy_score(y_test, y_pred) print(f'Accuracy: {accuracy:.4f}')
from sklearn.metrics import confusion_matrix conf_matrix = confusion_matrix(y_test, y_pred) print("\nConfusion Matrix:") print(conf_matrix)
from sklearn.metrics import precision_score precision = precision_score(y_test, y_pred, average='weighted') print(f'Precision: {precision:.4f}')
from sklearn.metrics import recall_score recall = recall_score(y_test, y_pred, average='weighted') print(f'Recall: {recall:.4f}')
from sklearn.metrics import f1_score f1 = f1_score(y_test, y_pred, average='weighted') print(f'F1 Score: {f1:.4f}')
Cross-validation techniques provide a more reliable evaluation of model performance by assessing it across different subsets of the dataset.
from sklearn.model_selection import KFold, cross_val_score kf = KFold(n_splits=5, shuffle=True, random_state=42) scores = cross_val_score(model, X, y, cv=kf, scoring='accuracy') print(f'Cross-Validation Accuracy: {np.mean(scores):.4f}')
from sklearn.model_selection import StratifiedKFold skf = StratifiedKFold(n_splits=5) scores = cross_val_score(model, X, y, cv=skf, scoring='accuracy') print(f'Stratified K-Fold Cross-Validation Accuracy: {np.mean(scores):.4f}')
By utilizing these evaluation methods and cross-validation techniques, practitioners can gain insights into the effectiveness of their logistic regression model and its ability to generalize to unseen data.
Regularization helps mitigate overfitting in logistic regression by adding a penalty term to the loss function, encouraging simpler models. The two primary forms of regularization in logistic regression are L1 regularization (Lasso) and L2 regularization (Ridge).
Konzept: Die L2-Regularisierung fügt der Verlustfunktion eine Strafe hinzu, die dem Quadrat der Größe der Koeffizienten entspricht.
Verlustfunktion: Die modifizierte Verlustfunktion für die logistische Ridge-Regression wird ausgedrückt als:
Verlust = -Σ[yi * log(ŷi) + (1 - yi) * log(1 - ŷi)] + λ * Σ(wj^2)
Wo:
Effekte:
Konzept: Die L1-Regularisierung fügt der Verlustfunktion eine Strafe hinzu, die dem absoluten Wert der Größe der Koeffizienten entspricht.
Verlustfunktion: Die modifizierte Verlustfunktion für die Lasso-Logistik-Regression kann ausgedrückt werden als:
Verlust = -Σ[yi * log(ŷi) + (1 - yi) * log(1 - ŷi)] + λ * Σ|wj|
Wo:
Effekte:
Durch die Anwendung von Regularisierungstechniken in der logistischen Regression können Praktiker die Modellverallgemeinerung verbessern und den Kompromiss zwischen Bias und Varianz effektiv verwalten.
Das obige ist der detaillierte Inhalt vonLogistische Regression, Klassifizierung: Überwachtes maschinelles Lernen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!