Получение ошибки: ufunc 'subtract' не содержал цикл с типами соответствия сигнатуры dtype (' - PullRequest
0 голосов
/ 20 февраля 2019

Я получаю сообщение об ошибке, которое я указал в заголовке моего проекта машинного обучения.Я следую за гидом в интернете .Вот части, в которых я получаю сообщение об ошибке:

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

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

neighbors = getNeighbors(training_feature_list, test_feature_list, 3)
print(neighbors)

Я просмотрел этот вопрос в Интернете и заметил, что многие люди задавали этот вопрос раньше, но, как я понимаю, проблема возникает из-за попытки использоватьufunc на разные типы переменных.Но мои training_feature_list и test_feature_list похожи.

набор поездов идет как [['5.1' '0.2'] ['4.9' '0.2'] ... (30 строк)

набор испытаний идет как [['4.8' '0,2 '] [' 5,4 '' 0,4 '] ... (20 строк).

Я был бы очень рад, если бы кто-нибудь смог кратко объяснить, почему возникает эта проблема (потому что я, вероятно, плохо ее понимал) и как это исправить.

заранее спасибо

1 Ответ

0 голосов
/ 20 февраля 2019

Если ваши списки действительно выглядят как [['5.1' '0.2'] ['4.9' '0.2'] ..., то ошибка, вероятно, вызвана тем, что вы пытаетесь вычесть одну строку из другой как«5.1» - это строка, в то время как 5.1 (которую вы, вероятно, хотите) - это число с плавающей запятой.

Если это не так, чем другая возможная причина ошибки (хотя я и ожидал бы другой)что вы передаете списки вместо пустых массивов, что предпочтительно делать для вычислений, поскольку вы не можете просто вычесть один список из другого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...