import csv
import random
import math
import operator
def loadDataset(filename,trainingSet=[],testSet=[]):
with open(filename, 'rt') as csvfile:
lines = csv.reader(csvfile)
dataset = list(lines)
z = len(dataset)-1
for x in range(len(dataset)-2):
for y in range(8,9):
dataset[x][y] = float (dataset[x][y])
trainingSet.append(dataset[x])
for y in range(8,9):
dataset[z][y] = float (dataset[z][y])
testSet.append(dataset[z])
def euclideanDistance(instance1, instance2):
distance = 0
X= (instance1[9] - instance2[9]) +(instance1[8] - instance2[8])
distance += pow(X, 2)
return math.sqrt(distance)
def getNeighbors(trainingSet, testInstance, k):
distances = []
for x in range(len(trainingSet)):
dist = euclideanDistance(testInstance, trainingSet[x])
distances.append((trainingSet[x], dist))
distances.sort(key=operator.itemgetter(1))
neighbors = []
for x in range(k):
neighbors.append(distances[x][0])
return neighbors
def main():
trainingSet=[]
testSet=[]
loadDataset('G:\ABCD.csv', trainingSet, testSet)
print ('Train set: ' + repr(len(trainingSet)))
print ('Test set: ' + repr(len(testSet)))
k = 4
neighbors = getNeighbors(trainingSet, testSet[0], k)
a=(neighbors[0][1])
print('Best Neighbor is: ' + a)
main()
Error I am getting Dataset Screenshot
我在执行代码时遇到TypeError基本上在这个程序中我试图找到从测试点到给定数据集中每个点的欧几里德距离,然后在排序后尝试获得距离最小的邻居。
答案 0 :(得分:1)
错误说您正在尝试从字符串中减去字符串(euclidianDistance
函数中的第22行)
您需要将两个坐标解析为数字才能减去它们。 float功能将能够做到这一点。
示例 - 您正在使用instance1[9]
这是一个表示浮点数的字符串,因此float(instance1[9])
应该为您提供一个数字。
如果您还在努力,请发表评论,我会向您展示您需要做的更新。