Я прочитал множество вопросов и ответов по названию темы; однако мне трудно понять, почему при использовании метода KNeighborsClassifier .fit возникает ошибка неоднозначного значения истинности. Код и данные, которые у меня есть, относительно просты:
Во-первых, я удаляю все значения nan по оси строк из кадра данных Opt_Data и присваиваю результаты переменной Training_Data.
Training_Data = Opt_Data.dropna(axis=0,how='any')
Скриншот примера набора данных
Затем я создаю два пустых массива из фрейма данных Training_Data. Массив X_Train состоит из данных из столбцов 1–10, а массив Y_Train состоит из данных из целевого столбца. В приведенном ниже коде имя переменной question — это имя столбца целевого столбца.
X_Train = np.array(Training_Data.loc[:,Training_Data.columns != question])
Y_Train = np.array(Training_Data[question])
После создания массивов я настроил функцию KNeighborsClassifier и передал результаты в переменную с именем knn. Переменная opt_neighbors представляет собой целое число (29). Когда я использую метод .fit для knn, я получаю вышеупомянутую ошибку значения «Истинное значение ряда неоднозначно».
knn = KNeighborsClassifier(n_neighbors=opt_neighbors,weights='distance',metric='hamming')
knn.fit(X_Train,Y_Train)
Форма фактического массива X_Train — (1783,10), а форма фактического массива Y_Train — (1783,).
Я прочитал блог, в котором говорилось, что причиной этой ошибки могут быть повторяющиеся строки. Однако, когда я использовал метод drop_duplicates в кадре данных Training_Data и выполнил тот же код, я получил то же сообщение об ошибке.
Я также читал, что «операторам python or и и требуются значения истинности. Для панд они считаются неоднозначными, поэтому вы должны использовать «побитовые» | (или) или & ( и) операции». Однако я не уверен, как это утверждение применимо, поскольку я не использую операторы или или и явно.
Я очень ценю любую помощь, которую кто-либо может предложить мне. Благодарю вас!
Traning_data.loc[:,Training_data.columns != 'Target column' ]
. не уверен, что вопрос = «Целевой столбец»? также, когда вы нарезаете по loc, это даст ndarray. вам не нужно превращать его в один. - person skrubber   schedule 04.01.2018