Машинное обучение — множественная регрессия
Множественная регрессия
Множественная регрессия похожа на линейную регрессию , но с более чем одним независимым значением, что означает, что мы пытаемся предсказать значение на основе двух или более переменных.
Взгляните на набор данных ниже, он содержит некоторую информацию об автомобилях.
Машина | Модель | Объем | Масса | СО2 |
Тойота | Айго | 1000 | 790 | 99 |
Мицубиси | Космическая звезда | 1200 | 1160 | 95 |
Шкода | Ситиго | 1000 | 929 | 95 |
Фиат | 500 | 900 | 865 | 90 |
Мини | Купер | 1500 | 1140 | 105 |
Фольксваген | Вверх! | 1000 | 929 | 105 |
Шкода | Фабия | 1400 | 1109 | 90 |
Мерседес | Класс | 1500 | 1365 | 92 |
Форд | Фиеста | 1500 | 1112 | 98 |
Ауди | А1 | 1600 | 1150 | 99 |
Хендай | I20 | 1100 | 980 | 99 |
Сузуки | Быстрый | 1300 | 990 | 101 |
Форд | Фиеста | 1000 | 1112 | 99 |
Хонда | Гражданский | 1600 | 1252 | 94 |
Хендай | I30 | 1600 | 1326 | 97 |
Опель | Астра | 1600 | 1330 | 97 |
БМВ | 1 | 1600 | 1365 | 99 |
Мазда | 3 | 2200 | 1280 | 104 |
Шкода | Стремительный | 1600 | 1119 | 104 |
Форд | Фокус | 2000 г. | 1328 | 105 |
Форд | Мондео | 1600 | 1584 | 94 |
Опель | Знак отличия | 2000 г. | 1428 | 99 |
Мерседес | С-Класс | 2100 | 1365 | 99 |
Шкода | Октавия | 1600 | 1415 | 99 |
Вольво | S60 | 2000 г. | 1415 | 99 |
Мерседес | CLA | 1500 | 1465 | 102 |
Ауди | A4 | 2000 г. | 1490 | 104 |
Ауди | А6 | 2000 г. | 1725 | 114 |
Вольво | V70 | 1600 | 1523 | 109 |
БМВ | 5 | 2000 г. | 1705 г. | 114 |
Мерседес | Е-Класс | 2100 | 1605 | 115 |
Вольво | ХС70 | 2000 г. | 1746 | 117 |
Форд | B-макс. | 1600 | 1235 | 104 |
БМВ | 2 | 1600 | 1390 | 108 |
Опель | Зафира | 1600 | 1405 | 109 |
Мерседес | СЛК | 2500 | 1395 | 120 |
Мы можем предсказать выброс CO2 автомобиля на основе размера двигателя, но с помощью множественной регрессии мы можем добавить больше переменных, например вес автомобиля, чтобы сделать прогноз более точным.
Как это работает?
В Python у нас есть модули, которые сделают всю работу за нас. Начните с импорта модуля Pandas.
import pandas
Узнайте о модуле Pandas в нашем учебном пособии по Pandas .
Модуль Pandas позволяет нам читать CSV-файлы и возвращать объект DataFrame.
Файл предназначен только для тестирования, вы можете скачать его здесь: cars.csv
df = pandas.read_csv("cars.csv")
Затем составьте список независимых значений и вызовите эту переменную X
.
Поместите зависимые значения в переменную с именем y
.
X = df[['Weight', 'Volume']]
y = df['CO2']
Совет: Обычно список независимых значений обозначается буквой X в верхнем регистре, а список зависимых значений — буквой y в нижнем регистре.
Мы будем использовать некоторые методы из модуля sklearn, поэтому нам также придется импортировать этот модуль:
from sklearn import linear_model
Из модуля sklearn мы будем использовать LinearRegression()
метод для создания объекта линейной регрессии.
У этого объекта есть вызываемый метод fit()
, который принимает независимые и зависимые значения в качестве параметров и заполняет объект регрессии данными, описывающими взаимосвязь:
regr = linear_model.LinearRegression()
regr.fit(X, y)
Теперь у нас есть объект регрессии, который готов прогнозировать значения CO2 на основе веса и объема автомобиля:
#predict the CO2 emission of a car where the weight
is 2300kg, and the volume is 1300cm3:
predictedCO2 = regr.predict([[2300, 1300]])
Пример
Посмотрите весь пример в действии:
import pandas
from sklearn import linear_model
df = pandas.read_csv("cars.csv")
X = df[['Weight', 'Volume']]
y = df['CO2']
regr =
linear_model.LinearRegression()
regr.fit(X, y)
#predict the CO2
emission of a car where the weight is 2300kg, and the volume is 1300cm3:
predictedCO2 = regr.predict([[2300, 1300]])
print(predictedCO2)
Результат:
[107.2087328]
Мы предсказали, что автомобиль с 1,3-литровым двигателем и массой 2300 кг будет выделять примерно 107 граммов CO2 на каждый пройденный километр.
Коэффициент
Коэффициент – это фактор, описывающий связь с неизвестной переменной.
Пример: если x
переменная, то
2x
два x
раза. x
— неизвестная переменная, а число 2
— коэффициент.
В этом случае мы можем запросить значение коэффициента веса по отношению к СО2 и объема по отношению к СО2. Ответы, которые мы получаем, говорят нам, что произойдет, если мы увеличим или уменьшим одно из независимых значений.
Пример
Выведите значения коэффициентов объекта регрессии:
import pandas
from sklearn import linear_model
df = pandas.read_csv("cars.csv")
X = df[['Weight', 'Volume']]
y = df['CO2']
regr =
linear_model.LinearRegression()
regr.fit(X, y)
print(regr.coef_)
Результат:
[0.00755095 0.00780526]
Объяснение результата
Массив результатов представляет значения коэффициентов веса и объема.
Вес: 0,00755095
Объем: 0,00780526
Эти значения говорят нам о том, что при увеличении веса на 1 кг выбросы CO2 увеличиваются на 0,00755095 г.
А если объем двигателя (Объем) увеличить на 1 см 3 , выброс СО2 увеличится на 0,00780526 г.
Я думаю, что это справедливое предположение, но давайте проверим его!
Мы уже предсказывали, что если автомобиль с двигателем объемом 1300 см 3 весит 2300 кг, выброс CO2 составит примерно 107 г.
Что, если мы увеличим вес на 1000 кг?
Пример
Скопируйте предыдущий пример, но измените вес с 2300 на 3300:
import pandas
from sklearn import linear_model
df = pandas.read_csv("cars.csv")
X = df[['Weight', 'Volume']]
y = df['CO2']
regr =
linear_model.LinearRegression()
regr.fit(X, y)
predictedCO2 = regr.predict([[3300, 1300]])
print(predictedCO2)
Результат:
[114.75968007]
Мы предсказали, что автомобиль с 1,3-литровым двигателем и массой 3300 кг будет выделять примерно 115 граммов CO2 на каждый пройденный километр.
Что показывает, что коэффициент 0,00755095 правильный:
107,2087328 + (1000 * 0,00755095) = 114,75968