Closed Tulmot closed 7 years ago
Después de corregir la clase iba a probar el método, pero cuando quiero instanciar la clase: dn=DisturbingNeigbors()
Me sale el siguiente error: TypeError: 'module' object is not callable
La clase la tengo metida en el mismo sitio donde esta BaggingClassifier es decir que importo de la siguiente manera: from sklearn.ensemble import DisturbingNeigbors
He estado mirando a ver si consigo corregirlo y creo que puede ser que el método init haga algo mal pero no veo el que, si me podeis echar una mano a ver si vosotros veis que puede ser.
En la carpeta de notebooks he subido el que estoy probando para que lo veais.
Un saludo.
Luego en el despacho me lo descargo y lo echo un ojo. Supongo que es tema de cómo están los paquetes que has hecho, pero así de un primer vistazo no lo veo.
Un detalle, revisa la palabra neighbors (falta una "h").
Prueba a hacer una carpeta (que será el paquete) y ahí creas un init.py como tiene la clase ensembles de scikit-learn.
Echa un ojo a la documentación de aquí: http://pythoncentral.io/how-to-create-a-python-package/
A ver el problema que he visto es que a el le deja instanciar las clases que tiene dentro de bagging, es decir la clase bagging tampoco deja instanciarla, entonces nose si editar el bagging e introducir alli la clase hecha por mi.
He subido el init.py que he creado dentro de la carpeta donde también esta el disturbing_neighbors.
He subido un archivo python(.py) llamado Prueba_clase al inicio, que hecho en spyder me sale error al pasarle la semilla a la clase
TypeError: init() got an unexpected keyword argument 'random_state'
pero he estado mirando y el init de la clase pienso que es correcto no se si vosotros vereis algo que yo no veo
La clase que tienes subida a Github realmente no tiene en el constructor random_state... ¿no has subido la última versión?
def __init__(self,
base_estimator=DecisionTreeClassifier,
n_neighbors=10,
n_features=0.5):
self.base_estimator =base_estimator
self.n_neighbors=n_neighbors
self.n_features=n_features
self.rnd_dimensions
self.rnd_neighbors
Perdón por tardar en contestar, si que esta actualizado, es la clase que esta en sklearn/disturbing_neighbors/disturbing_neighbors.py `def init(self,
base_estimator=DecisionTreeClassifier,
n_neighbors=10,
n_features=0.5,
random_state=None):
self.base_estimator =base_estimator
self.n_neighbors=n_neighbors
self.n_features=n_features
self.random_state=random_state
self.rnd_dimensions
self.rnd_neighbors`
la que esta en el inicio es la antigua, la borro? era por tener los commits y las antiguas versiones
Lo normal es mover la clase que tenías previamente en un directorio, al paquete: de este modo no pierdes ningún commit. Lo que no podemos dejar es la misma clase en dos sitios distintos.
¿Por qué has metido todos los fuentes de scikit-learn en tu repositorio? No entiendo muy bien qué estas haciendo.
Yo lo que haría es:
Estas dos líneas en el constructor no deberían estar así, o le asignas un valor (none, por ejemplo), o lo quitas y ya se definirán automáticamente cuando lo utilices en la propia clase más abajo:
self.rnd_dimensions
self.rnd_neighbors
Una vez tengas esto funcionando, igual lo más fácil es renombrar tu carpeta sklearn a sklearn-ubu
Funciona correctamente
Probar la clase para ver que funciona correctamente