Линейная регрессия — один из самых известных алгоритмов в статистике и машинном обучении. В этой статье мы собираемся исследовать линейную регрессию с помощью набора данных Boston Housing.
В модели линейной регрессии мы пытаемся изучить взаимосвязь между входными переменными и выходной переменной (одной) в данном наборе данных. Если набор данных пытается продемонстрировать линейную тенденцию, мы можем решить ее с помощью линейной регрессии.
Итак, приступим.
Сначала мы импортируем все необходимые библиотеки и загрузим набор данных.
Далее мы исследуем набор данных:
boston.keys() ## output dict_keys(['data', 'target', 'feature_names', 'DESCR', 'filename'])
- data: содержит информацию о домах
- цель: цена данных
- feature_names: характеристики набора данных
- DESCR: описание данных
Проверьте функции набора данных по boston.feature_names
array(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD','TAX', 'PTRATIO', 'B', 'LSTAT'], dtype='<U7')
с помощью print(boston.DESCR)
мы можем получить больше информации о функциях набора данных. Есть 13 признаков и 506 наблюдений.
.. _boston_dataset: Boston house prices dataset --------------------------- **Data Set Characteristics:** Number of Instances: 506 Number of Attributes: 13 numeric/categorical predictive. Median Value (attribute 14) is usually the target. Attribute Information (in order): CRIM:per capita crime rate by town ZN:proportion of residential land zoned for lots over 25,000 sq.ft. INDUS:proportion of non-retail business acres per town CHAS:Charles River dummy variable (= 1 if tract bounds river; 0 otherwise) NOX:nitric oxides concentration (parts per 10 million) RM:average number of rooms per dwelling AGE:proportion of owner-occupied units built prior to 1940 DIS:weighted distances to five Boston employment centres RAD:index of accessibility to radial highways TAX:full-value property-tax rate per $10,000 PTRATIO:pupil-teacher ratio by town B:1000(Bk - 0.63)^2 where Bk is the proportion of blacks by town LSTAT:% lower status of the population MEDV:Median value of owner-occupied homes in $1000's Missing Attribute Values: None Creator: Harrison, D. and Rubinfeld, D.L. This is a copy of UCI ML housing dataset. https://archive.ics.uci.edu/ml/machine-learning-databases/housing/ This dataset was taken from the StatLib library which is maintained at Carnegie Mellon University. The Boston house-price data of Harrison, D. and Rubinfeld, D.L. 'Hedonic prices and the demand for clean air', J. Environ. Economics & Management, vol.5, 81-102, 1978. Used in Belsley, Kuh & Welsch, 'Regression diagnostics ...', Wiley, 1980. N.B. Various transformations are used in the table on pages 244-261 of the latter. The Boston house-price data has been used in many machine learning papers that address regression problems. .. topic:: References - Belsley, Kuh & Welsch, 'Regression diagnostics: Identifying Influential Data and Sources of Collinearity', Wiley, 1980. 244-261. - Quinlan,R. (1993). Combining Instance-Based and Model-Based Learning. In Proceedings on the Tenth International Conference of Machine Learning, 236-243, University of Massachusetts, Amherst. Morgan Kaufmann.
Теперь давайте создадим фрейм данных, используя pd.Dataframe.
Мы видим, что целевое значениеMEDV
отсутствует в наборе данных. Итак, мы добавляем новый столбец в набор данных для цели.
Теперь наш набор данных готов к предварительной обработке данных.
Предварительная обработка данных. При предварительной обработке данных мы проверяем, есть ли в наборе данных какое-либо значение NAN, нулевое значение или отсутствующее значение. Для этого мы посчитаем недостающее значение для каждой функции следующим образом:
Теперь перейдем к статистическому и графическому анализу данных. На этом этапе с помощью визуализации мы попытаемся изучить связь между целевой переменной и функциями.
Давайте сначала проверим, нормально ли распределены данные нашей целевой переменной?
Теперь мы можем ясно видеть, что наши данные нормально распределены, но имеют некоторые выбросы. Что такое выброс???
Википедия: В статистике выброс — это точка наблюдения, удаленная от других наблюдений.
По определению мы можем видеть, что есть некоторые данные, которые отделены от толпы.
Далее мы проверяем корреляцию между переменными с помощью матрицы корреляции. Эта матрица отображает корреляцию между всеми возможными парами значений в таблице. Его можно сформировать с помощью функции corr()
. Для построения корреляционной матрицы мы будем использовать функцию heatmap()
из библиотеки seaborn.
Коэффициент корреляции лежит в пределах от -1 до +1. Он количественно определяет силу и направление связи между двумя числовыми переменными. Если значение близко к 1, это просто означает, что существует сильная положительная корреляция между двумя переменными, а если значение близко к -1, переменные имеют сильную отрицательную корреляцию.
Глядя на корреляционную матрицу, мы можем наблюдать следующее:
- Функции значений
RAM
иMEDV
сильно коррелируют друг с другом, поэтому мы не можем выбрать обе функции вместе для обучения модели. - Признаки
AGE
иDIS
имеют отрицательную корреляцию со значением -0,75. RM
имеет сильную положительную корреляцию сMEDV
(0,7), аSTATS
имеет сильную отрицательную корреляцию сMEDV
(-0,74)
Наконец, мы выбираем две функции: RM
, STATS
. Теперь нарисуем точечный график с линейной моделью.
Подготовьте данные для обучения модели
Теперь подготовьте данные с двумя функциями.
Разделите данные на наборы для обучения и тестирования.
Здесь мы собираемся разделить набор данных на наборы для обучения и тестирования. Мы протестируем модель с 20% набора данных, а остальные будем использовать для обучения модели.
Тестирование и обучение модели
Мы будем использовать линейную регрессию для обучения модели.
Точность модели со статистикой R2
Точность модели будем проверять по R2 — баллу. Он обеспечивает меру соответствия. Это просто означает, насколько набор данных подходит для нашей модели.
The model performance for training set -------------------------------------- R2 score is 0.6300745149331701 The model performance for testing set -------------------------------------- R2 score is 0.6628996975186954
Спасибо за прочтение 🙏
Приятного обучения 😃
Вы можете оставить комментарий или поделиться этим сообщением. Подпишитесь на меня для будущих публикаций….