Всем привет. Я новичок в сфере ML. Решил провести элементарный эксперимент, результаты которого хочу обсудить с вами.
Я создал датафрейм с 2 колонками: в 1 рандомные числа от 0 до 1000, во второй значения 0 или 1 в зависимости от того, четное число в первой колонке или нет.
Мне казалось, что с такой элементарной задачей, с которой справится и ребенок, алгоритм-то справится и подавно. А вот как вышло в действительности:
KNN Model Evaluation:
Accuracy for training set: 0.691
Accuracy for testing set: 0.495
F1 score for testing set: 0.495
Recall for testing set: 0.495
Precision for testing set: 0.495
Average cross-validation score: 0.51
Random Forest Model Evaluation:
Accuracy for training set: 1.000
Accuracy for testing set: 0.600
F1 score for testing set: 0.598
Recall for testing set: 0.600
Precision for testing set: 0.605
Average cross-validation score: 0.58
Алгоритмы не смогли поймать эту закономерность. При этом, если увеличить датасет с 1000 записей до 10000, то тогда уже делают это в легкую:
KNN Model Evaluation:
Accuracy for training set: 0.996
Accuracy for testing set: 0.980
F1 score for testing set: 0.980
Recall for testing set: 0.980
Precision for testing set: 0.980
Average cross-validation score: 0.96
Random Forest Model Evaluation:
Accuracy for training set: 1.000
Accuracy for testing set: 1.000
F1 score for testing set: 1.000
Recall for testing set: 1.000
Precision for testing set: 1.000
Подскажите, почему так? Разве алгоритмы не должны сами найти закономерность в данных и на этой основе сделать выводы? Почему 1000 случайных целых чисел для правильного вывода недостаточно (четное - нечетное, ничего же больше)
Вероятно, ответом будет, что инженер машинного обучения сам должен заметить подобную вещь в данных, на этой основе создать новую колонку четное-нечетное, и уже дальше всё получится. Но вопрос в другом: не должна ли сама модель сама увидеть эту закономерность в оригинальных данных и решить задачу?