【问题标题】:Implement KNN to find nearest color?实施 KNN 以找到最接近的颜色?
【发布时间】:2019-11-23 02:37:59
【问题描述】:

我有一堆包含两列的数据:给定对象的标签,以及该对象的颜色(包含 [R, G, B] 的列表)值。有没有一种有效的方法来制作一个函数来告诉我与用户输入的颜色最相似的对象?这似乎是 KNN 的候选者。

我将如何在 Python 中执行此操作,最好使用 SciKit?我有大约 10,000 个观察值,有什么可以更有效地实施 KNN 的吗?

import pandas as pd

data = {
       "Object": ["A", "B", "C", "A"],
       "Color": [[100, 120, 120], [50, 75, 50], [60, 70, 100], [90, 150, 200]]
}


df = pd.DataFrame(data)

candidate = [50, 40, 90]

def nearest_match(df, candidate):
  # something

  return nearest_match

【问题讨论】:

    标签: pandas image machine-learning scikit-learn computer-vision


    【解决方案1】:
    X = [[100, 120, 120], [50, 75, 50], [60, 70, 100], [90, 150, 200]]
    y = ["A", "B", "C", "A"]
    from sklearn.neighbors import KNeighborsClassifier
    neigh = KNeighborsClassifier(n_neighbors=4)
    neigh.fit(X, y) 
    
    print(neigh.predict([[100, 100, 100]]))
    

    为了使其表现更好,您可以选择要用于距离的指标。另外,选择您要使用的算法。

    您也可以使用tutorial 从头开始​​实施它。开箱即用的库可能更好用,因为它们已经过优化。

    如果在 C 中实现是一种选择,您可以采用该方法。或者在你的实现中使用 Cythonsing 部分。

    附:可能值得微调邻居的数量。

    【讨论】:

    • 无论向 neigh.predict() 提供什么值,它总是返回 ['A']。你能说出原因吗?
    • 如果您将预测函数作为样本提供如下print(neigh.predict([[50, 75, 50]])),它将输出标签“B”。该模型在训练期间已经遇到过这样的标签。关键是,如果你给它足够的样本,就会准确地形成集群。稍后,当您尝试对新示例进行分类时,生成的标签将在训练期间属于已建立的类别之一。你也可以尝试给它[50, 70, 50]]。也许您需要对这个主题做更多的阅读。如果您觉得我的回答对您有用,请点赞。
    猜你喜欢
    • 1970-01-01
    • 2019-08-17
    • 2012-04-06
    • 2019-06-12
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多