Одна вещь, которую я обнаружил, пройдя курс "Введение в машинное обучение" от Udacity и 30-дневный курс машинного обучения Kaggle, заключается в том, что они, как правило, просматривают много одного и того же материала, в то время как я надеялся узнать что-то новое в каждом курсе. Частично это может быть связано с тем, что один из людей, который работает в Kaggle, также работает в Udacity, поэтому неизбежно, что многие материалы, используемые в Udacity, также будут использоваться в Kaggle. Однако причина, по которой я хожу на бесплатные онлайн-курсы, заключается в том, что я могу узнать что-то новое, а затем написать о нем.

Я должен сказать, что мне очень нравится sklearn, библиотека машинного обучения Python, содержащая всевозможные функции, используемые в этом жанре. В ожидании следующего задания по курсу Kaggle «30 дней машинного обучения» я решил поискать в sklearn с целью найти функцию, о которой никогда не слышал, научиться использовать, а затем опубликовать на носителе.

Одна из найденных мною таких функций, которую я считаю весьма уникальной, - это TransformedTargetRegressor из sklearn, которая представляет собой метаоценку, которая используется для регрессии преобразованной цели. Эта функция преобразует цель перед подгонкой регрессионной модели. Прогнозы отображаются обратно в исходное пространство с помощью обратного преобразования.

Поскольку я впервые увидел TransformedTargetRegressor, я могу считать, что он не часто используется или не часто используется в литературе, которую я читал. Эта функция предназначена для хорошей работы, когда точки данных в цели искажены, поэтому я решил попробовать эту функцию в наборе данных Ames House Price, который просто случайно имеет искаженную цель. Набор данных Ames House Price можно найти здесь: - https://www.kaggle.com/c/house-prices-advanced-regression-techniques

Постановка проблемы для конкурса Ames House Price, где можно найти набор данных, находится на снимке экрана ниже: -

Я создал программу, используя бесплатный онлайн-блокнот Jupyter от Kaggle. Самым замечательным в этом конкретном блокноте является то, что он хранится в том же репозитории, что и набор данных, что упрощает поиск.

Создав записную книжку Jupyter и присвоив ей имя, я импортировал библиотеки, которые потребуются мне для выполнения программы. Обычно я импортирую библиотеки по мере необходимости, но библиотеки, которые я использовал в этой программе, - это pandas, numpy, os, sklearn, matplotlib и seaborn. Pandas используется для создания фреймов данных и управления ими, numpy используется для выполнения алгебраических вычислений, os войдет в операционную систему и получит файлы, используемые в программе, sklearn содержит множество функций машинного обучения, необходимых для прогнозирования, а matplotlib и seaborn - это используется для графического построения точек данных в наборе данных или прогнозе: -

После того, как библиотеки были импортированы, я использовал os для извлечения трех файлов csv, которые будут использоваться в программе, которые называются поездом и тестом: -

Затем я считываю файлы поезда и тестирования в программу с помощью панд: -

Я проанализировал цель, и можно увидеть, что эта зависимая переменная искажена, что делает ее основным кандидатом на преобразование TransformedTargetRegressor в sklearn: -

Затем я создал тепловую карту, которая включала только числовые функции в наборе данных:

Затем я выбрал функции и в данном случае решил использовать только числовые функции:

После того, как цель была проанализирована и функции выбраны, я создал новый фрейм данных, X_tot, отбросив SalePrice из поезда и затем добавив тест для обучения: -

Затем я определил переменные X и y, которые являются независимыми и зависимыми соответственно. Переменная y - train.SalePrice, которая ранее была удалена из train для создания X_tot, а X_tot состоит из ранее выбранных функций:

Затем я проверил нулевые значения в X_tot: -

Когда я определил столбцы с нулевыми значениями, я использовал IterativeImputer sklearn для вменения этих нулевых значений. Поскольку X_tot состоит только из числовых значений, я смог вменять весь фрейм данных: -

Затем я решил стандартизировать фрейм данных. Стандартизация относится к смещению распределения каждого атрибута так, чтобы среднее значение было равно нулю, а стандартное отклонение равнялось единице (единичная дисперсия). Полезно стандартизировать атрибуты для модели, которая основана на распределении атрибутов, таких как гауссовские процессы.

Те люди, которые читали мои сообщения, знают, что я нормализовал данные, в результате чего каждая точка данных преобразуется в значение от 0 до 1.

На самом деле, что нужно сделать, так это сделать прогнозы со стандартизацией, а затем с нормализацией, выбрав тип масштабирования, обеспечивающий наибольшую точность:

После масштабирования данных я разделил X_tot на кадры данных для обучения и тестирования: -

Затем я разделил набор данных X_Train и y на наборы данных для обучения и проверки, используя функцию sklearn train_test_split: -

После того, как наборы данных были разделены, я выбрал модель, которую буду использовать для прогнозов. В этом случае я использовал TransdomedTargetRegressor и RidgeCV из sklearn. Когда я обучил и подогнал модель, я достиг точности 76,22%: -

Затем я сделал прогноз на наборе для проверки и достиг точности 90,20% и среднеквадратичного отклонения 26064: -

Я построил прогнозы на графике, который можно увидеть на скриншоте ниже: -

Затем я использовал модель, чтобы предсказать на тестовом наборе: -

Сделав прогнозы, я подготовил фрейм данных для отправки и преобразовал его в файл csv, который будет отправлен в Kaggle для оценки: -

Когда я отправил свою работу в Kaggle, я получил 0,18852 балла. Этот счет явно не был победным, но и не проигрышным:

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

Код этого сообщения можно полностью найти в моей личной учетной записи Kaggle, ссылка находится здесь: - https://www.kaggle.com/tracyporter/house-prices-transform-ridgecv?scriptVersionId=71396269