Мы находимся на последнем этапе подготовки нашего набора данных для начала настоящего веселья!
Если вы не читали сообщения до этого, я настоятельно рекомендую вам вернуться и проверить их, чтобы продолжить!
Разделение набора данных на обучающий набор и тестовый набор
Почему мы должны разделить наш набор данных на два?
Вот почему! Предположим, вам преподают какой-то материал курса в классе. Лучший способ изучить материал - пройти тест. Вы пишете ответы на вопросы и проверяете, правы ли вы. Если вы ошибаетесь, вы учитесь на своей ошибке, что делает вас лучшим учеником, чем вы были раньше.
Тот же метод применим к вашему алгоритму машинного обучения. Изначально он обучается с помощью обучающего набора и тестируется с помощью набора тестов.
Давайте посмотрим, как это сделать на Python и R.
Python:
#Spliting the dataset into the Training set and Test set from sklearn.cross_validation import train_test_split X_train, X_test, Y_train, Y_test = train_test_split(X, Y,test_size=0.2,random_state=0)
Как и раньше, мы импортируем train_test_split из sklearn.cross_validation. Как следует из названия, при этом набор данных разбивается на обучающий набор и набор тестов.
Вторая строка кода определяет массивы как X_train (обучающий набор матрицы X), Y_train (соответствующий обучающий набор вектора Y), X_test (тестовый набор X) и Y_test (соответствующий тестовый набор Y). Здесь переменная test_size - это в основном процент данных, которые будут использоваться для размера тестового набора. (0,2 = 2%) Обычно рекомендуется использовать 0,2, 0,25 или 0,3 для переменной тестового набора.
После выполнения этого кода вы можете заметить, что ваш набор данных теперь разделен на 4 следующим образом:
R :
#Splitting the dataset into Training set and Test Set install.packages(‘caTools’) library(caTools) set.seed(123) split=sample.split(dataset$Item.Purchased, SplitRatio = 0.8) training_set=subset(dataset,split==TRUE) test_set=subset(dataset,split==FALSE)
В R мы должны установить библиотеку под названием «caTools» для разделения. После установки этого пакета мы должны выбрать эту библиотеку. Это можно сделать вручную, щелкнув «caTools» в пакетах или выполнив код во второй строке. set.seed (123) гарантирует, что все, выполняющие этот код, получат одинаковый результат.
Затем мы выполняем четвертую строку кода. Здесь параметрами для функции разделения являются вектор «Y», который он «набор данных $ Item.Purchased» в R, и коэффициент разделения. Здесь коэффициент разделения предназначен для обучающего набора (а не для набора тестов), поэтому он установлен на 0,8.
Если вы введете split в консоли, вы увидите, что четвертая строка кода возвращает массив с TRUE и FALSE следующим образом:
Здесь строки, помеченные как TRUE, принадлежат обучающему набору, а строки, которые помечены как FALSE, принадлежат набору тестов, который может быть извлечен путем выполнения оставшихся строк кода. Выполните весь приведенный выше код и убедитесь, что это результат, который вы получили:
Масштабирование функций
В нашем наборе данных мы видим огромную разницу в значениях между столбцом зарплаты и столбцом возраста. Поскольку алгоритм машинного обучения не может определить истинное значение этих атрибутов, значения в столбце age будут преобладать над значениями в столбце Salary. Из-за этой проблемы мы применяем масштабирование функций, чтобы все эти функции были в одном масштабе.
Есть два способа масштабирования функций:
Давайте посмотрим, как это сделать в Python и R.
Python:
# Feature Scaling from sklearn.preprocessing import StandardScaler sc_X = StandardScaler() X_train = sc_X.fit_transform(X_train) X_test = sc_X.transform(X_test)
Как и раньше, мы должны импортировать соответствующие библиотеки и использовать их для масштабирования функций, как показано выше. Это гарантирует, что все данные находятся в диапазоне от -1 до +1 следующим образом:
Обратите внимание, что мы также выполнили масштабирование функций для фиктивного кодирования, однако мы воздерживаемся от масштабирования функций для нашего набора данных Y, поскольку он равен нулю и единице.
R :
#Feature Scaling training_set=scale(training_set) test_set=scale(test_set)
Приведенный выше код выполнит масштабирование функции за нас.
Ждать? Какие! Вы получили ошибку?
Да ладно, я тоже понял ...
Вот почему! В сообщении об ошибке указано, что «x» должно быть числовым, а под «x» это означает набор training_set и test_set. Вы можете подумать, что все они содержат числа, но в R функция множителя не считает их числовыми! Из-за этой проблемы мы воздерживаемся от применения масштабирования функций к фиктивным кодированным данным в R.
Попробуйте выполнить этот фрагмент кода!
#Feature Scaling training_set[,2:3]=scale(training_set[,2:3]) test_set[,2:3]=scale(test_set[,2:3])
Здесь мы указываем два столбца, которые действительно нуждаются в масштабировании функций. Ваш результат должен выглядеть примерно так:
И ВОЙЛА!
Вы официально закончили предварительную обработку данных. Используя эти знания, вы можете подготовить абсолютно любой набор данных, который вы получите!
Поздравляем, вы так далеко зашли! Увидимся в моем следующем сообщении в блоге, чтобы узнать о забавных аспектах машинного обучения!