Поскольку я близок к завершению изучения средства создания набора данных sklearn, я приступил к набору данных make_friedman1, который был описан в работе Дж. Фридмана под названием «Многомерные адаптивные регрессионные сплайны», The Annals of Statistics 19 (1), страницы 1–67, 1991.

Входные данные представляют собой независимые признаки этого набора данных, равномерно распределенные на интервале [0,1]. Зависимая метка y рассчитывается по следующей формуле:

y(X) = 10 * sin(pi * X[:, 0] * X[:, 1]) + 20 * (X[:, 2] — 0,5) ** 2 + 10 * X[: , 3] + 5 * X[:, 4] + шум * N(0, 1)

Когда я экспериментировал с этим набором данных, я обнаружил, что на нем очень сложно делать прогнозы. Я попробовал несколько оценщиков sklearn, в том числе LinearRegression, PolynomialFeatures, DecisionTree и GradientBoostingRegressor, и все они, по моему мнению, не дали удовлетворительных результатов. Я даже искал в Интернете код с использованием Friedman, который вдохновил меня на использование GradientBoostingRegressor, но код, который я нашел, по моему мнению, не был удовлетворительным, чтобы делать прогнозы.

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

Я написал программу в Google Colab, бесплатном онлайн-блокноте Jupyter, размещенном в Google. Google Colab и другие его бесплатные продукты хороши в использовании, потому что они портативны и к ним можно получить доступ на любом компьютере, имеющем доступ в Интернет и поисковую систему. Единственным недостатком этой программы является тот факт, что Google Colab не имеет функции отмены, поэтому необходимо соблюдать осторожность, чтобы не перезаписать или удалить ценный код, потому что, если это произойдет, он будет потерян навсегда.

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

Затем я использовал make_friedman1 от sklearn для создания набора данных с 1000 образцами, 5 функциями и 1 меткой:

Метка, представляющая собой переменную y, можно увидеть на снимке экрана ниже:

Один набор данных был создан для объединения 5 функций и метки, что можно увидеть на снимке экрана ниже:

Затем я использовал matplotlib для создания трехмерного графика точек данных трех столбцов фрейма данных и метки: -

Затем я определил независимую переменную X. Эта переменная содержит функции в фрейме данных.

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

После того, как предварительная обработка данных была завершена, я использовал набор данных sklearn train_test_split, чтобы разделить набор данных на обучающий и проверочный наборы:

Затем я использовал линейную регрессию sklearn для обучения и подбора модели. На скриншоте ниже видно, что хорошего результата добиться не удалось:

Затем я предсказал на проверочном наборе, и точность была немного лучше. Коэффициент ошибок можно увидеть на снимке экрана ниже, при этом среднеквадратическая ошибка составляет 181. Хотя коэффициент ошибок не идеален, он лучше, чем у трех других моделей, с которыми я экспериментировал:

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

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

Код для этого поста можно найти целиком в моей личной учетной записи Google Colab, ссылка здесь: https://colab.research.google.com/drive/1cBMtDc3ZnXORFmReglD3jkGGMo9BQHbO?usp=sharing.

Мой последний пост о наборе данных sklearn можно найти здесь: https://medium.com/geekculture/how-to-create-a-hastie-10-2-dataset-with-sklearn-5254381050ab