Herausforderung: Klassifizierung Untrennbarer Daten
Sie verwenden den folgenden Datensatz mit zwei Merkmalen:
1234import pandas as pd df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/circles.csv') print(df.head())
Wenn Sie den folgenden Code ausführen und das resultierende Streudiagramm betrachten, erkennen Sie, dass der Datensatz nicht linear trennbar ist:
123456import pandas as pd import matplotlib.pyplot as plt df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/circles.csv') plt.scatter(df['X1'], df['X2'], c=df['y']) plt.show()
Verwendung von Kreuzvalidierung zur Bewertung einer einfachen logistischen Regression auf diesen Daten:
123456789101112131415161718import pandas as pd import matplotlib.pyplot as plt from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression from sklearn.model_selection import cross_val_score df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/circles.csv') X = df[['X1', 'X2']] y = df['y'] X = StandardScaler().fit_transform(X) lr = LogisticRegression().fit(X, y) y_pred = lr.predict(X) plt.scatter(df['X1'], df['X2'], c=y_pred) plt.show() print(f'Cross-validation accuracy: {cross_val_score(lr, X, y).mean():.2f}')
Wie Sie sehen, ist die reguläre logistische Regression für diese Aufgabe nicht geeignet. Die Verwendung von polynomialer Regression kann die Modellleistung verbessern. Zusätzlich ermöglicht der Einsatz von GridSearchCV, den optimalen C-Parameter für eine höhere Genauigkeit zu finden.
Konstruktor:
GridSearchCV(estimator, param_grid, scoring, cv = 5)estimator— das Modellobjekt;param_grid— Wörterbuch mit den zu durchsuchenden Parameterwerten;scoring— die Metrik zur Bewertung beim Cross-Validation-Score;
cv— die Anzahl der Folds (standardmäßig 5);
Methoden:
fit(X, y)— Training der Modelle mit X, y;predict(X)— Vorhersage der Klasse für X;score(X, y)— gibt die Genauigkeit für das X, y-Set zurück;
Attribute:
best_estimator_— Objekt des Modells mit dem höchsten Score;best_score_— der Score desbest_estimator_.
In dieser Aufgabe wird auch die Klasse Pipeline verwendet. Sie können sie als Abfolge von Vorverarbeitungsschritten betrachten. Die Methode .fit_transform() wendet .fit_transform() nacheinander auf jeden Schritt in der Pipeline an.
Swipe to start coding
Ihnen wird ein Datensatz zur Verfügung gestellt, der als DataFrame in der Variablen df beschrieben ist.
- Erstellen Sie eine Pipeline, die die Polynomfeatures zweiten Grades von
Xenthält und skaliert wird. Speichern Sie die resultierende Pipeline in der Variablenpipe. - Erstellen Sie ein Dictionary
param_gridmit den Werten[0.01, 0.1, 1, 10, 100]für den HyperparameterC. - Initialisieren und trainieren Sie ein
GridSearchCV-Objekt und speichern Sie das trainierte Objekt in der Variablengrid_cv.
Lösung
Danke für Ihr Feedback!
single
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Großartig!
Completion Rate verbessert auf 3.33
Herausforderung: Klassifizierung Untrennbarer Daten
Swipe um das Menü anzuzeigen
Sie verwenden den folgenden Datensatz mit zwei Merkmalen:
1234import pandas as pd df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/circles.csv') print(df.head())
Wenn Sie den folgenden Code ausführen und das resultierende Streudiagramm betrachten, erkennen Sie, dass der Datensatz nicht linear trennbar ist:
123456import pandas as pd import matplotlib.pyplot as plt df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/circles.csv') plt.scatter(df['X1'], df['X2'], c=df['y']) plt.show()
Verwendung von Kreuzvalidierung zur Bewertung einer einfachen logistischen Regression auf diesen Daten:
123456789101112131415161718import pandas as pd import matplotlib.pyplot as plt from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression from sklearn.model_selection import cross_val_score df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/circles.csv') X = df[['X1', 'X2']] y = df['y'] X = StandardScaler().fit_transform(X) lr = LogisticRegression().fit(X, y) y_pred = lr.predict(X) plt.scatter(df['X1'], df['X2'], c=y_pred) plt.show() print(f'Cross-validation accuracy: {cross_val_score(lr, X, y).mean():.2f}')
Wie Sie sehen, ist die reguläre logistische Regression für diese Aufgabe nicht geeignet. Die Verwendung von polynomialer Regression kann die Modellleistung verbessern. Zusätzlich ermöglicht der Einsatz von GridSearchCV, den optimalen C-Parameter für eine höhere Genauigkeit zu finden.
Konstruktor:
GridSearchCV(estimator, param_grid, scoring, cv = 5)estimator— das Modellobjekt;param_grid— Wörterbuch mit den zu durchsuchenden Parameterwerten;scoring— die Metrik zur Bewertung beim Cross-Validation-Score;
cv— die Anzahl der Folds (standardmäßig 5);
Methoden:
fit(X, y)— Training der Modelle mit X, y;predict(X)— Vorhersage der Klasse für X;score(X, y)— gibt die Genauigkeit für das X, y-Set zurück;
Attribute:
best_estimator_— Objekt des Modells mit dem höchsten Score;best_score_— der Score desbest_estimator_.
In dieser Aufgabe wird auch die Klasse Pipeline verwendet. Sie können sie als Abfolge von Vorverarbeitungsschritten betrachten. Die Methode .fit_transform() wendet .fit_transform() nacheinander auf jeden Schritt in der Pipeline an.
Swipe to start coding
Ihnen wird ein Datensatz zur Verfügung gestellt, der als DataFrame in der Variablen df beschrieben ist.
- Erstellen Sie eine Pipeline, die die Polynomfeatures zweiten Grades von
Xenthält und skaliert wird. Speichern Sie die resultierende Pipeline in der Variablenpipe. - Erstellen Sie ein Dictionary
param_gridmit den Werten[0.01, 0.1, 1, 10, 100]für den HyperparameterC. - Initialisieren und trainieren Sie ein
GridSearchCV-Objekt und speichern Sie das trainierte Objekt in der Variablengrid_cv.
Lösung
Danke für Ihr Feedback!
single