Estoy tratando de trazar la curva entrenada en matplotlib. Sin embargo, obtengo esto: ingrese la descripción de la imagen aquí

La dispersión funciona bien: ingrese la descripción de la imagen aquí

¿Cómo puedo crear la curva usando plot?

0
omar 5 oct. 2021 a las 10:54

3 respuestas

La mejor respuesta

Puede ser que el orden de los datos de X_train sea incorrecto. Trate de ordenarlos. Por ejemplo, si X_train es solo una lista de números, podría decir:

X_train.sort()
1
Neb 5 oct. 2021 a las 08:01

Puede trazar una curva de línea suave determinando primero los coeficientes de la curva spline usando scipy.interpolate.make_interp_spline():

import numpy as np
import numpy as np
from scipy.interpolate import make_interp_spline
import matplotlib.pyplot as plt
 
# Dataset
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([20, 30, 5, 12, 39, 48, 50, 3])
 
X_Y_Spline = make_interp_spline(x, y)
 
# Returns evenly spaced numbers
# over a specified interval.
X_ = np.linspace(x.min(), x.max(), 500)
Y_ = X_Y_Spline(X_)
 
# Plotting the Graph
plt.plot(X_, Y_)
plt.title("Plot Smooth Curve Using the scipy.interpolate.make_interp_spline() Class")
plt.xlabel("X")
plt.ylabel("Y")
plt.show()

Resultado:

enter image description here

1
BlackMath 5 oct. 2021 a las 07:59

Parece que tiene valores sin clasificar en X_train. Por ejemplo, si

In  [1]: X_train
Out [1]: array([30, 20, 50, 40])

Entonces

In  [2]: model.predict_proba(X_train)
Out [2]: array([0.2, 0.1, 0.8, 0.5])

Aquí, plt.plot intentará trazar líneas desde el punto [30, 0.2] al punto [20, 0.1], luego desde [20, 0.1] a [50, 0.8], luego desde [50, 0.8] a [40, 0.5].

Por lo tanto, la solución a su problema es ordenar X_train antes de graficar =)

import numpy as np
X_train_sorted = np.sort(X_train)
y_train_sorted = model.predict_proba(X_train_sorted)
plt.scatter(X_train_sorted, y_train_sorted)
plt.plot(X_train_sorted, y_train_sorted)
1
Максим Фалеев 5 oct. 2021 a las 08:09