2017-07-06 12 views
0

Ich lerne den KNN-Algorithmus. Ich bin derzeit in der Phase, in der ich die nächsten Nachbarn meiner Test-Instanz durch Berechnung des Ähnlichkeitsmaßes wieder in jeder Instanz meines Trainings-Datensatzes erhalte. Das meiste, was ich online gefunden habe, vergleicht die Ähnlichkeiten zwischen der Reihenfolge von Strings oder Listen von Strings, was ich habe, sind Listen von Listen mit Strings und ganzen Zahlen. Wie kann ich die Ähnlichkeit Maß meiner testInstance gegen jede Instanz meiner Ausbildung DatasetDas Ähnlichkeitsmaß zwischen Listen von Listen erhalten

def getNeighbours(trainingSet,testInstance,K): 
distances = [] 
for x in range (len(trainingSet)): 
    dist = distance.levenshtein(testInstance,trainingSet) 
    distances.append((trainingSet[x],dist.ratio())) 
distances.sort(key = operator.itemgetter(1)) 
neighbors = [] 
for x in range(K): 
    neighbors.append(distances[x][0]) 
return neighbors 

trainSet = [['low', 'low', 4, 'more', 'med', 'high', 'vgood'],['low', 'low', '5more', 4, 'big', 'low', 'unacc'],['low', 'med', 3, 4, 'med', 'high', 'good']] 
test_Instance = ['low', 'med', 3, 4, 'med', 'high', 'good'] 

neigbors = getNeighbours(trainSet,test_Instance,1) 
print(neigbors) 

Antwort

0

Wenn Sie bereits wissen, wie Ähnlichkeit zwischen Sequenz von Strings zu berechnen, warum dann nicht Ihre ganze Zahlen in Strings konvertieren?

In Ihrem Fall ein Datenelement d bespannen Umwandlung wird mit

str(d) 

und Umwandlung erfolgt ein Datenelement d String oder Integer zurück kann erfolgen:

>>> f = lambda s: int(s) if s.isnumeric() else s 
    >>> f('3') 
    3 
    >>>> f('a') 
    'a'