K最近邻居的自定义指标中的收入值是什么意思?

时间:2016-10-23 16:56:25

标签: python machine-learning scikit-learn

我需要使用具有自定义指标的K最近邻居。我有一个适用于我的对象属性的公式。这意味着我有矩阵。此矩阵由向量组成,每个向量包含公式中使用的3个标量值。

我在库sklearn中找到了如何在类KNeighborsClassifier中使用自定义指标。它只是一个名为metric的参数,可以是字符串或可调用的。所以...我已经创建了函数,但是这个函数在第一次采用两个相同的数组包含10个标量值。我的意思是每个数组都包含10个值而不是3.在每个后续时间,该函数从我的矩阵中获取值。

我已经查看了调用堆栈,并且我已经看到该函数从类BallTree调用。我已经阅读过这个结构,但我无法理解它是如何转换我的数据或它第一次传递给我的指标的。

这两个第一个相同的数组是什么意思?

我通过此代码实例化分类器

clf = KNeighborsClassifier(n_jobs=4, metric=custom_metric)
clf.fit(X, Y)

X包含这样的值。

array([[2.400154, 0.07744107744107744, 96.80566400000001],
       [2.39325, 0.07744107744107744, 97.219544],
       [2.395162, 0.07744107744107744, 97.10519599999999],
       [3.101635, 0.009788768675940238, 65.88368],
       [3.09882, 0.009788768675940238, 65.97364499999999],
       [3.099576, 0.009788768675940238, 65.956018]], dtype=object)

custom_metric是我的功能。它现在什么都没有。

def custom_metric(x: np.ndarray, y: np.ndarray) -> float:
    pass

xy

的示例
array([ 0.02274535,  0.21161613,  0.41314247,  0.39046054,  0.1670481 ,
        0.15515555,  0.13329802,  0.59103014,  0.26246693,  0.7727967 ])

正如我上面写的那样,它们是相同的。

对不起,如果我的英语不清楚。

1 个答案:

答案 0 :(得分:0)

你提供的代码片段没有多大意义,knn metric永远不会作为一个参数来自不同的空间而不是你训练它的那个,最小的例子来展示它:

submit

按预期打印

$(function() {
  var form = $("form");
  form.on("submit", function(e) {
    e.preventDefault();
    var cloudName = $('input[name="cloud_name"]').val(),
      presetName = $('input[name="upload_preset"]').val(),
      URL = "https://api.cloudinary.com/v1_1/" + cloudName + "/image/upload",
      input = form.find("[name=file]");

    $.when.apply($, $.map(input[0].files, function(file, index) {
      var data = new FormData(form[0]);
      data.append("upload_preset", file, file.name);
      return $.ajax({
        type: 'post',
        url: URL,
        data: data,
        processData: false,
        contentType: false,
        cache: false
      });
    }))
    .then(function(response) {
      console.log(response)
    })
    .catch(function(err) {
      console.log(err)
    })
  })
})

因此在你的情况下,matric应该接受2个向量,每个3维,并返回它们之间的有效距离,这就是全部。

如果您传递给import numpy as np x = np.array(range(10)).reshape(5,-1) y = np.array(range(5)) from sklearn.neighbors import KNeighborsClassifier as KNN def foo(X, Y): print 'X', X, X.shape print 'Y', Y, Y.shape return 0 clf = KNN(metric=foo) clf.fit(x, y) clf.predict(x) 具有此类维度的内容,则只能获得10个维度。没有什么"魔法"隐藏在BallTree中,它必须在您的数据中。