【问题标题】:Why is my KNN algorithm built from scratch not working?为什么我从头开始构建的 KNN 算法不起作用?
【发布时间】:2018-12-10 14:39:15
【问题描述】:

我尝试从头开始创建 KNN 算法。我的数据集是一个熊猫数据框。该算法总是返回 1.0(预测总是与实际结果完全匹配),我担心出了点问题,虽然我不知道是什么。非常感谢您对识别的任何帮助。

这是我的代码:

def get_neighbors(train,row,n):
      distances=list()
      for i in range(len(test)):
        dist=euclidean_distance(row,train.iloc[i])
        distances.append((row,dist))
      distances.sort(key=lambda tup: tup[1])
      neighbors=list()
      for i in range(n):
        neighbors.append(distances[i][0])
      return neighbors

def predict_classification(train,row,n):
  neighbors=get_neighbors(train,row, n)
  output_values=[row.iloc[-1]for row in neighbors]
  prediction=max(set(output_values),key=output_values.count)
  return prediction
import math

def euclidean_distance(row1,row2):
  distance = 0.0
  for i in range((row1.shape[0])):
    distance+=(row1[i] -row2[i]) ** 2
  return math.sqrt(distance)

def k_nearest_neighbors(train,test,n):
  predictions=list()
  for i in range(len(test)):
    output=predict_classification(train,test.iloc[i],n)
    predictions.append(output)
  return(predictions)


train=dataset.iloc[0:500]
test=dataset.iloc[500:600]
df=po.DataFrame()
df["Actual"]=test["Outcome"]
df["Predicted"]=k_nearest_neighbors(train,test,5)

【问题讨论】:

  • 您确定您的数据不应该返回 100% 的预测。有些问题很容易解决!

标签: python pandas machine-learning knn


【解决方案1】:

我还没有彻底检查过您的代码,但这里有几个问题。其中一些是:

  1. 您没有使用任何标签。从您的代码中可以怀疑最后一列是标签,但您不应该使用它们来计算距离,例如在这里:dist=euclidean_distance(row,train.iloc[i])
  2. 您在此处附加相同的示例:distances.append((row,dist)) 不是您想要的。追加训练集的行(虽然效率不是很高)
  3. 由于您在此处没有任何标签,这很混乱:output_values=[row.iloc[-1]for row in neighbors]
  4. 效率问题。你为什么和熊猫一起工作?将 numpy 用于您的实际工作,并在完成后将其传递给 pandas。
  5. 您使用了太多函数来进行分类。只需遍历您的训练数据计算距离。获取检测到的n 邻居的索引(不是实际样本),并在投票后将其与您的基本事实进行比较。您无需将实际样本保存在某处(就像您所做的那样)。

【讨论】:

    猜你喜欢
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多