【问题标题】:PYTHON kNN algorithm error why does it giving syntax errorPYTHON kNN算法错误为什么会给出语法错误
【发布时间】:2019-09-13 16:30:36
【问题描述】:

不执行编译

在 pycharm 上它不起作用编译错误

import csv
with open(r'C:\Users\Dell\Desktop\iris-data.csv') as csvfile:
    lines=csv.reader(csvfile)
    for row in lines:
        print(','.join(row))

import csv
import random
def loadDataset(filename, split, trainingSet=[], testSet=[]):
    with open(filename, 'r') as csvfile:
        lines = csv.reader(csvfile)
        dataset = list(lines)
        for x in range(len(dataset) - 1):
            for y in range(4):
                dataset[x][y] = float(dataset[x][y])
            if random.random() < split:
                trainingSet.append(dataset[x])
            else:
                testSet.append(dataset[x])

trainingSet=[]
testSet=[]
loadDataset(r'C:\Users\Dell\Desktop\iris-data.csv',0.66,trainingSet,testSet)
print('Train: ' + repr(len(trainingSet)))
print('Test: ' + repr(len(testSet)))

import math
def euclideanDistance(instance1,instance2,length):
    distance=0
    for x in range(length):
        distance+=pow((instance1[x]-instance2[x]),2)
    return math.sqrt(distance)

'''data1=[2,2,2,'a']
data2=[4,4,4,'b']
distance=euclideanDistance(data1,data2,3)
print('Distance:'+repr(distance))'''

import operator
def getNeighbours(trainingSet,testInstance,k):
    distance=[]
    length=len(testInstance)-1
    for x in range(len(trainingSet)):
        dist=euclideanDistance(testInstance,trainingSet[x],length)
        distance.append((trainingSet[x],dist))
    distance.sort(key=operator.itemgetter(1))
    neighbours=[]
    for x in range(k):
        neighbours.append(distance[x][0])
    return neighbours

'''trainSet=[[2,2,2,'a'],[4,4,4,'b']]
testInstance=[5,5,5]
k=1
neighbours=getNeighbours(trainSet,testInstance,1)
print(neighbours)'''

import operator
def getResponse(neighbours):
    classVotes={}
    for x in range(len(neighbours)):
        response=neighbours[x][-1]
        if response in classVotes:
            classVotes[response]+=1
        else:
            classVotes[response]=1
    sortedVotes=sorted(classVotes.iteritems(),key=operator.itemgetter(1),reverse=True)
    return sortedVotes[0][0]

def getAccuracy(testSet,prediction):
    correct=0
    for x in range(len(testSet)):
        if testSet[x][-1] is prediction[x]:
            correct+=1
    return(correct/float(len(testSet)))*100.0

'''testSet=[[1,1,1,'a'],[2,2,2,'a'],[3,3,3,'b']]
predictions=['a','a','a']
accuracy=getAccuracy(testSet,predictions)
print(accuracy)'''

def main():
    trainingSet=[]
    testSet=[]
    split = 0.67
    loadDataset(r'C:\Users\Dell\Desktop\iris-data.csv', split, trainingSet, testSet)
    print 'Train set: ' + repr(len(trainingSet))
    print 'Test set: ' + repr(len(testSet))
    predictions=[]
    k = 3
    for x in range(len(testSet)):
        neighbours = getNeighbours(trainingSet, testSet[x], k)
        result = getResponse(neighbours)
        predictions.append(result)
        print('> predicted=' + repr(result) + ', actual=' + repr(testSet[x][-1]))
    accuracy = getAccuracy(testSet, predictions)
    print ('Accuracy: ', accuracy)
main()

文件“C:/Users/Dell/PycharmProjects/regression/knnalgorithm.py”,第 87 行 print '训练集:' + repr(len(trainingSet)) ^ SyntaxError: 无效语法

文件“C:/Users/Dell/PycharmProjects/regression/knnalgorithm.py”,第 87 行 print '训练集:' + repr(len(trainingSet)) ^ SyntaxError: 无效语法

【问题讨论】:

    标签: python knn


    【解决方案1】:

    看起来您的代码(部分)是 Python 2 并且您在 Python 3 解释器下运行它。在 Python 3 中,print 是一个函数,所以它需要括号。

    print ('Train set: ' + repr(len(trainingSet)))
    print ('Test set: ' + repr(len(testSet)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-13
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多