Я пишу алгоритм, чтобы классифицировать твиты в моем наборе данных как положительные/отрицательные, и я хочу проверить его точность. Чтобы сделать это и найти наилучшее возможное решение, я хочу иметь базовый уровень (используя классические алгоритмы ML). После предварительной обработки твитов, вдохновленный соответствующей работой, я сначала изучил модель Bag-of-Words, и мне удалось успешно запустить код и рассчитать точность и Fscore. После некоторой предварительной обработки текста и разделения набора данных на набор поездов и набор тестов:
from sklearn.cross_validation import train_test_split
X_train, X_test1, y_train, y_test1 = train_test_split(X, y, test_size = 0.11, random_state = 0)
Я хочу иметь возможность исключить все твиты, помеченные как отрицательные, из тестового набора (оставив только положительные) и рассчитать точность, отзыв и Fscore алгоритма (а затем сделать то же самое для твитов, помеченных как положительные) . Я пытался сделать это так:
finRow = len(X_test1)
finCol = len(X_test1[0])
for o in range(0, finrow):
if y_test1[o]== 1:
del y_test1[o]
X_test1 = np.delete(X_test1, o, axis=0)
но я получаю эту ошибку:
Traceback (most recent call last):
File "<ipython-input-4-5ed18876a8b5>", line 2, in <module>
if y_test1[o]== 1:
IndexError: list index out of range
X_test1 содержит твиты и имеет размер 1102 x 564, а y_test1 содержит нули и единицы (твит положительный или отрицательный) и имеет размер 1102. Ошибка появляется в 774-я итерация, когда длина y_test1 уменьшается с 1102 до 774.
Теперь я попытался сделать это и так:
a = 1
for o in range(0, finrow):
if (y_test1[o] == 1 and o <= finrow - a):
del y_test1[o]
a = a + 1
X_test1 = np.delete(X_test1, o, axis=0)
но я все еще получаю ту же ошибку, и я не знаю, является ли это лучшим подходом к удалению строк матрицы и элементов списка, потому что, когда я проверяю значения y_test1 я остались некоторые (несколько, не все - как в начале) элементы, которые должны были быть удалены.
Я новичок в этом, и я понятия не имею, где моя ошибка.
del
составляете список, его размер меняется, а индексы путаются. Если вы должны перебирать список, аdel
элементов начинаются с конца и продвигаются к началу. Экспериментируйте с небольшими списками в интерактивном режиме, если вы не можете представить, что происходит. - person hpaulj   schedule 31.10.2018