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,基本上在这个程序中,我试图找到从一个测试点到给定数据集中每个点的欧几里得距离,然后在排序后,试图获得距离最小的邻居。
发布于 2018-04-26 02:32:32
错误提示您正在尝试从字符串中减去一个字符串( euclidianDistance函数中的第22行)
您需要将这两个坐标解析为数字才能减去它们。float函数将能够做到这一点。
示例-您使用的是instance1[9],它是一个表示浮点数的字符串,因此float(instance1[9])应该给您一个数字。
如果你还在努力,请留下评论,我会向你展示你需要进行的更新。
https://stackoverflow.com/questions/50029031
复制相似问题