es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Usando GridSearchCV, best_params_ arroja resultados pobres.

Estoy intentando ajustar los hiperparámetros para KNN en conjuntos de datos bastante pequeños (Kaggle Leaf, que tiene alrededor de 990 líneas):

def knnTuning(self, x_train, t_train):

    params = {
        'n_neighbors': [1, 2, 3, 4, 5, 7, 9],
        'weights': ['uniform', 'distance'],
        'leaf_size': [5,10, 15, 20]
    }
    grid = GridSearchCV(KNeighborsClassifier(), params)
    grid.fit(x_train, t_train)

    print(grid.best_params_)
    print(grid.best_score_)

    return knn.KNN(neighbors=grid.best_params_["n_neighbors"], 
                   weight = grid.best_params_["weights"],
                   leafSize = grid.best_params_["leaf_size"])

Imprime:
{‘leaf_size’: 5, ‘n_neighbors’: 1, ‘weights’: ‘uniform’}
0.9119999999999999

Y devuelvo este clasificador:

class KNN:

    def __init__(self, neighbors=1, weight='uniform', leafSize=10):

        self.clf = KNeighborsClassifier(n_neighbors=neighbors,
                                        weights=weight, leaf_size=leafSize)

    def train(self, X, t):
        self.clf.fit(X, t)

    def predict(self, x):
        return self.clf.predict(x)

    def global_accuracy(self, X, t):
        predicted = self.predict(X)
        accuracy = (predicted == t).mean()

        return accuracy

Ejecuto esto varias veces utilizando 700 líneas para el entrenamiento y 200 para la validación, que se eligen con una permutación aleatoria.

Luego obtengo resultados para la precisión global desde 0.01 (con frecuencia) hasta 0.4 (raramente).

Sé que no estoy comparando dos métricas iguales, pero aún no puedo entender la gran diferencia entre los resultados.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    La razón de la gran diferencia en los resultados podría deberse al tamaño pequeño del conjunto de datos y a la aleatoriedad involucrada en la selección de los conjuntos de entrenamiento y validación.

    Con un conjunto de datos tan pequeño, es posible que cada vez que se divida los datos en conjuntos de entrenamiento y validación, la distribución de los datos en cada conjunto sea diferente, lo que lleva a variaciones en las puntuaciones de precisión.

    Otra razón podría ser la distribución desequilibrada de las clases en el conjunto de datos. Si una clase tiene significativamente más puntos de datos que las demás, el clasificador podría tener sesgo hacia la predicción de esa clase con mayor frecuencia, lo que lleva a puntuaciones de precisión más bajas.

    Para abordar estos problemas, se pueden probar técnicas como el muestreo estratificado para asegurar que la distribución de las clases sea la misma en los conjuntos de entrenamiento y validación. Además, se pueden utilizar técnicas como el sobremuestreo, el submuestreo o los pesos de clase para equilibrar la distribución de las clases. Estas técnicas pueden ayudar a mejorar la precisión y consistencia del clasificador.

Comments are closed.