Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我从头开始构建的KNN算法不起作用?_Python_Pandas_Machine Learning_Knn - Fatal编程技术网

Python 为什么我从头开始构建的KNN算法不起作用?

Python 为什么我从头开始构建的KNN算法不起作用?,python,pandas,machine-learning,knn,Python,Pandas,Machine Learning,Knn,我尝试从头开始创建KNN算法。我的数据集是一个数据帧。算法总是返回1.0(预测总是与实际结果完全匹配),我担心出了什么问题,尽管我不知道是什么。非常感谢您在识别过程中提供的任何帮助 这是我的密码: def get_neighbors(train,row,n): distances=list() for i in range(len(test)): dist=euclidean_distance(row,train.iloc[i]) dist

我尝试从头开始创建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)

我还没有彻底检查你的代码,但你有几个问题。其中包括:

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

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