Mit einer DBSCAN Instanz von Sklearn werden die cluster gebildet. Da DBSCAN selbst keine predickt methode hat habe ich eine KNeighborsClassifier von sklearn verwendet um die bereiche predicten zu können. Beide modelle werden nach dem fitten meiner funktion (siehe unten) übergeben. Damit sollen die unterschiedlichen Bereiche unterschiedlich gefärbt und die grenze der Bereiche eingezeichnet werden.
Die bereiche werden zwar richtig eingefärbt. Die Grenze, welche mit der Funktion "plt.contour" geplottet werden soll, scheint zwar die richtige form zu haben ist aber um 90 grad gedreht.
Könnte mir bitte jemand helfen?
Code: Alles auswählen
def plotte_datapoints_mit_hintergrund(cluster_model, dbscan_model, feature, x_label, y_label, achsen):
#1) zeichnet Datapoints
plt.figure(figsize = (15,10))
plt.xlabel(x_label, fontsize = 15)
plt.ylabel(y_label, fontsize = 15)
plot_dbscan(dbscan_model, feature) # eigene Methode welche die Datapoints plottet (für die Frage eher unwichtig)
#2) zeichne hintergrund
x_achse_wertebereich = np.linspace(achsen[0], achsen[1],200)
y_achse_wertebereich = np.linspace(achsen[2], achsen[3],200)
alle_punkte = np.asarray(np.meshgrid(x_achse_wertebereich, y_achse_wertebereich))
alle_punkte_reshapted = alle_punkte.T.reshape(-1,2)
bereiche = cluster_model.predict(alle_punkte_reshapted)
plt.scatter(alle_punkte_reshapted[:,0], alle_punkte_reshapted[:,1], c= bereiche, cmap = "Pastel1", alpha =0.1)
#3) zeichne grenze
# Z ist ein 2D Array, wobei die Zeilenanzahl entspricht länge x-achse, Spaltenanzahl entspricht länge y-achse
Z = bereiche.reshape(len(x_achse_wertebereich),len(y_achse_wertebereich))
plt.contour(Z, linewidths=1, extent = (achsen[0], achsen[1], achsen[2], achsen[3]))