【问题标题】:Nearest neighbour treatment of orthogonal vectors正交向量的最近邻处理
【发布时间】:2019-06-15 13:31:25
【问题描述】:

在文本分类中使用最近邻 (scikit) 时,有时与任何类都不相似。发生这种情况时,scikit 算法返回的距离为 1,并且似乎选择了一个看似随机的类(每次运行时都相同,但有时再次运行时会发生变化)。当向量正交时返回诸如 None 之类的特定内容会很有帮助。

    vec = CountVectorizer(strip_accents='ascii', stop_words = stopwords, ngram_range=(1, 3))
    bag_of_words = vec.fit_transform(list(map(str, Property))) #reference
    tfidf_transformer = TfidfTransformer()
    X_train_tfidf = tfidf_transformer.fit_transform(bag_of_words.minimum(1))

    neigh = NearestNeighbors(n_neighbors = neighbors) 
    neigh.fit(X_train_tfidf)

    X_test_counts = vec.transform(wines_strings).minimum(1)

    res = neigh.kneighbors(X_test_counts, return_distance = True)

【问题讨论】:

  • 你使用了什么样的算法,你能分享一些你的代码吗?邻居搜索算法的选择是通过关键字'algorithm'来控制的,它必须是['auto', 'ball_tree', 'kd_tree', 'brute']之一。当传递默认值“auto”时,算法会尝试从训练数据中确定最佳方法。
  • 我添加了我的代码,但认为它在这种情况下不会有帮助。这只是标准的东西。
  • 不知道是不是我把它改成Brute,每次运行它是否会导致至少在同一个类中,这至少可以被二次处理

标签: python scikit-learn nearest-neighbor


【解决方案1】:

我决定只添加一个计算来确定向量是否正交。当它们是正交的时,我会忽略最近邻居吐出的任何内容

    a = X_train_tfidf@X_test_counts.transpose()
    indicator = a.transpose()*np.ones(a.get_shape()[0])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-24
    • 2018-03-04
    • 2018-08-11
    • 1970-01-01
    • 2014-02-23
    • 2016-04-09
    • 2018-12-03
    • 1970-01-01
    相关资源
    最近更新 更多