首页 > 解决方案 > 使用 L1 的 KNN 预测(曼哈顿距离)

问题描述

我可以使用默认分类器(L2 - 欧几里得距离)运行 KNN 分类器:

def L2(trainx, trainy, testx):

    from sklearn.neighbors import KNeighborsClassifier
    # Create KNN Classifier
    knn = KNeighborsClassifier(n_neighbors=1)

    # Train the model using the training sets
    knn.fit(trainx, trainy)

    # Predict the response for test dataset
    y_pred = knn.predict(testx)
    return y_pred

但是,我想使用 L1(曼哈顿)距离作为我的距离函数。

以下内容无效(即使我认为我正在关注文档):

def L1(trainx, trainy, testx):

    from sklearn.neighbors import NearestNeighbors
    from sklearn.neighbors import DistanceMetric
    dist = DistanceMetric.get_metric('manhattan')
    # Create KNN Classifier
    knn = NearestNeighbors(n_neighbors=1, metric=dist)

    # Train the model using the training sets
    knn.fit(trainx, trainy)

    # Predict the response for test dataset
    y_pred = knn.predict(testx)
    return y_pred

NearestNeighbors 没有 predict(),而且我使用 metric=dist 也是错误的。

我想\需要使用带有曼哈顿距离函数的 KNN 进行预测。这可能吗?

标签: python-3.xscikit-learnknn

解决方案


指标必须作为字符串传递。

def L1(trainx, trainy, testx):

    from sklearn.neighbors import KNeighborsClassifier
    # Create KNN Classifier
    knn = KNeighborsClassifier(n_neighbors=1, metric='manhattan')

    # Train the model using the training sets
    knn.fit(trainx, trainy)

    # Predict the response for test dataset
    y_pred = knn.predict(testx)
    return y_pred

推荐阅读