Использование ошибки в качестве условия в операторе if / then - PullRequest
0 голосов
/ 28 октября 2019

Я работаю над функцией knn. Внутри него у меня уже есть функция, которая будет возвращать индексы k-ближайших соседей для данной точки данных, когда эта точка сравнивается с набором данных.

Теперь я пытаюсь заставить фактическую функцию классификатора работать, но у меня проблемы с оператором if / then. Нет никакого веса для ближайших соседей, так что это большинство голосов, и поэтому расчет режима должен сделать это.

Однако, поскольку «k» может быть четным числом, существует вероятность ничьей, и в этом случае ближайший сосед «выигрывает» голосование.

Так что я в основном пытаюсь кодировать следующее:

если режим существует / 'statistics.mode ()' не выдает ошибку, то документ будет классифицирован по режиму

В противном случае документ будет классифицирован ближайшим соседом.

TIA за любую помощь! Вот код, который у меня есть

 def getPrediction(indices_of_nearest_neighbors, training_labels):

    # get vector of "votes"
    nearest_Y = training_labels.iloc[indices_of_nearest_neighbors, 1].values     

    if statistics.mode(nearest_Y) ##does not throw an error:
        doc_classification=statistics.mode(nearest_Y)

    else doc_classification= training_labels.iloc[closest_neighbor,1]

    return doc_classification

Ответы [ 3 ]

2 голосов
/ 28 октября 2019

try/except используются для обработки ошибок.

try:
    doc_classification = statistics.mode(nearest_Y)
except StatisticsError:
    doc_classification = training_labels.iloc[closest_neighbor,1]

Обратите внимание, что это перестанет работать, если вы обновитесь до Python 3.8. Вам нужно будет использовать statistics.multimode() и явно проверить, возвращает ли он более одного результата.

mode = statistics.multimode(nearest_Y)
if len(mode) = 1:
    doc_classification = mode
else:
    doc_classification = training_labels.iloc[closest_neighbor,1]
0 голосов
/ 28 октября 2019

Вы хотите использовать try-except, чтобы поймать ошибку:

def getPrediction(indices_of_nearest_neighbors, training_labels):

    # get vector of "votes"
    nearest_Y = training_labels.iloc[indices_of_nearest_neighbors, 1].values     

    try:
        ##does not throw an error:
        doc_classification=statistics.mode(nearest_Y)
    except Exception:
        doc_classification= training_labels.iloc[closest_neighbor,1]

    return doc_classification

Вы захотите поймать конкретное исключение, выданное mode(), поэтому вам нужно будет изменить Exception на любое другоеis.

Обычно отлавливать общие исключения - это плохая практика, так как вы не сможете узнать, что на самом деле вызвало исключение, и оно останется незамеченным.

0 голосов
/ 28 октября 2019
def getPrediction(indices_of_nearest_neighbors, training_labels):
    nearest_Y = training_labels.iloc[indices_of_nearest_neighbors, 1].values     
    try:
        return statistics.mode(nearest_Y) 
    except:
        return training_labels.iloc[closest_neighbor,1]

Заменен оператор if на try ... кроме

...