logo

Множинна лінійна регресія

У попередній темі ми дізналися про просту лінійну регресію, де одна змінна Independent/Predictor(X) використовується для моделювання змінної відповіді (Y). Але можуть бути різні випадки, коли на змінну відповіді впливає більше однієї змінної предиктора; для таких випадків використовується алгоритм множинної лінійної регресії.

Крім того, множинна лінійна регресія є розширенням простої лінійної регресії, оскільки для прогнозування змінної відповіді потрібна більше ніж одна змінна предиктора. Ми можемо визначити це як:

Множинна лінійна регресія є одним із важливих алгоритмів регресії, який моделює лінійний зв’язок між однією залежною безперервною змінною та кількома незалежними змінними.

приклад:

Прогноз CO2викиди залежно від розміру двигуна та кількості циліндрів автомобіля.

Деякі ключові моменти про MLR:

  • Для MLR залежна або цільова змінна (Y) має бути безперервною/дійсною, але предиктор або незалежна змінна може мати безперервну або категориальну форму.
  • Кожна змінна ознаки повинна моделювати лінійний зв’язок із залежною змінною.
  • MLR намагається провести лінію регресії через багатовимірний простір точок даних.

Рівняння MLR:

У множинній лінійній регресії цільова змінна (Y) є лінійною комбінацією кількох змінних предиктора x1, х2, х3, ...,xп. Оскільки це вдосконалення простої лінійної регресії, тому те саме застосовується до рівняння множинної лінійної регресії, рівняння виглядає так:

 Y= b<sub>0</sub>+b<sub>1</sub>x<sub>1</sub>+ b<sub>2</sub>x<sub>2</sub>+ b<sub>3</sub>x<sub>3</sub>+...... bnxn ............... (a) 

Де,

Y = вихідна/відповідна змінна

топології мережі

b0, б1, б2, б3, бп....= Коефіцієнти моделі.

х1, х2, х3, х4,...= Різні Незалежні/функціональні змінні

Припущення для множинної лінійної регресії:

  • А лінійна залежність має існувати між змінними Target і предиктор.
  • Залишки регресії повинні бути нормально розподілені .
  • MLR передбачає мало або відсутність мультиколінеарності (кореляція між незалежною змінною) у даних.

Реалізація моделі множинної лінійної регресії за допомогою Python:

Щоб реалізувати MLR за допомогою Python, ми маємо наступну проблему:

Опис проблеми:

У нас є набір даних 50 стартап компаній . Цей набір даних містить п’ять основних відомостей: Витрати на НДДКР, адміністративні витрати, маркетингові витрати, держава та прибуток за фінансовий рік . Наша мета — створити модель, за допомогою якої можна легко визначити, яка компанія має максимальний прибуток, а який фактор найбільше впливає на прибуток компанії.

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

    Етапи попередньої обробки даних Припасування моделі MLR до навчального комплекту Прогнозування результату тестового набору

Крок 1: Етап попередньої обробки даних:

Найперший крокІмпорт бібліотек:Спочатку ми імпортуємо бібліотеку, яка допоможе у створенні моделі. Нижче наведено його код:

 # importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd 
    Імпорт набору даних:Тепер ми імпортуємо набір даних (50_CompList), який містить усі змінні. Нижче наведено його код:
 #importing datasets data_set= pd.read_csv(&apos;50_CompList.csv&apos;) 

Вихід: Ми отримаємо набір даних як:

Множинна лінійна регресія

У вихідних даних вище ми можемо чітко бачити, що є п’ять змінних, у яких чотири змінні є безперервними, а одна – категоріальною.

java лічильник
    Вилучення залежних і незалежних змінних:
 #Extracting Independent and dependent Variable x= data_set.iloc[:, :-1].values y= data_set.iloc[:, 4].values 

Вихід:

Вихід[5]:

 array([[165349.2, 136897.8, 471784.1, &apos;New York&apos;], [162597.7, 151377.59, 443898.53, &apos;California&apos;], [153441.51, 101145.55, 407934.54, &apos;Florida&apos;], [144372.41, 118671.85, 383199.62, &apos;New York&apos;], [142107.34, 91391.77, 366168.42, &apos;Florida&apos;], [131876.9, 99814.71, 362861.36, &apos;New York&apos;], [134615.46, 147198.87, 127716.82, &apos;California&apos;], [130298.13, 145530.06, 323876.68, &apos;Florida&apos;], [120542.52, 148718.95, 311613.29, &apos;New York&apos;], [123334.88, 108679.17, 304981.62, &apos;California&apos;], [101913.08, 110594.11, 229160.95, &apos;Florida&apos;], [100671.96, 91790.61, 249744.55, &apos;California&apos;], [93863.75, 127320.38, 249839.44, &apos;Florida&apos;], [91992.39, 135495.07, 252664.93, &apos;California&apos;], [119943.24, 156547.42, 256512.92, &apos;Florida&apos;], [114523.61, 122616.84, 261776.23, &apos;New York&apos;], [78013.11, 121597.55, 264346.06, &apos;California&apos;], [94657.16, 145077.58, 282574.31, &apos;New York&apos;], [91749.16, 114175.79, 294919.57, &apos;Florida&apos;], [86419.7, 153514.11, 0.0, &apos;New York&apos;], [76253.86, 113867.3, 298664.47, &apos;California&apos;], [78389.47, 153773.43, 299737.29, &apos;New York&apos;], [73994.56, 122782.75, 303319.26, &apos;Florida&apos;], [67532.53, 105751.03, 304768.73, &apos;Florida&apos;], [77044.01, 99281.34, 140574.81, &apos;New York&apos;], [64664.71, 139553.16, 137962.62, &apos;California&apos;], [75328.87, 144135.98, 134050.07, &apos;Florida&apos;], [72107.6, 127864.55, 353183.81, &apos;New York&apos;], [66051.52, 182645.56, 118148.2, &apos;Florida&apos;], [65605.48, 153032.06, 107138.38, &apos;New York&apos;], [61994.48, 115641.28, 91131.24, &apos;Florida&apos;], [61136.38, 152701.92, 88218.23, &apos;New York&apos;], [63408.86, 129219.61, 46085.25, &apos;California&apos;], [55493.95, 103057.49, 214634.81, &apos;Florida&apos;], [46426.07, 157693.92, 210797.67, &apos;California&apos;], [46014.02, 85047.44, 205517.64, &apos;New York&apos;], [28663.76, 127056.21, 201126.82, &apos;Florida&apos;], [44069.95, 51283.14, 197029.42, &apos;California&apos;], [20229.59, 65947.93, 185265.1, &apos;New York&apos;], [38558.51, 82982.09, 174999.3, &apos;California&apos;], [28754.33, 118546.05, 172795.67, &apos;California&apos;], [27892.92, 84710.77, 164470.71, &apos;Florida&apos;], [23640.93, 96189.63, 148001.11, &apos;California&apos;], [15505.73, 127382.3, 35534.17, &apos;New York&apos;], [22177.74, 154806.14, 28334.72, &apos;California&apos;], [1000.23, 124153.04, 1903.93, &apos;New York&apos;], [1315.46, 115816.21, 297114.46, &apos;Florida&apos;], [0.0, 135426.92, 0.0, &apos;California&apos;], [542.05, 51743.15, 0.0, &apos;New York&apos;], [0.0, 116983.8, 45173.06, &apos;California&apos;]], dtype=object) 

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

Кодування фіктивних змінних:

Оскільки у нас є одна категоріальна змінна (State), яку не можна безпосередньо застосувати до моделі, ми її закодуємо. Щоб закодувати категоріальну змінну в числа, ми будемо використовувати LabelEncoder клас. Але цього недостатньо, оскільки він все ще має певний порядок відносин, який може створити неправильну модель. Отже, щоб усунути цю проблему, ми будемо використовувати OneHotEncoder , який створить фіктивні змінні. Нижче наведено його код:

 #Catgorical data from sklearn.preprocessing import LabelEncoder, OneHotEncoder labelencoder_x= LabelEncoder() x[:, 3]= labelencoder_x.fit_transform(x[:,3]) onehotencoder= OneHotEncoder(categorical_features= [3]) x= onehotencoder.fit_transform(x).toarray() 

Тут ми кодуємо лише одну незалежну змінну, яка є станом, оскільки інші змінні неперервні.

Вихід:

Множинна лінійна регресія

Як ми бачимо у наведеному вище виході, стовпець стану було перетворено на фіктивні змінні (0 і 1). Тут кожен стовпець фіктивної змінної відповідає одному стану . Ми можемо перевірити, порівнявши його з вихідним набором даних. Перший стовпець відповідає Штат Каліфорнія , другий стовпець відповідає Штат Флорида , а третій стовпець відповідає Штат Нью-Йорк .

Примітка:Ми не повинні використовувати всі фіктивні змінні одночасно, тому воно повинно бути на 1 менше, ніж загальна кількість фіктивних змінних, інакше це створить перехоплення фіктивних змінних.

  • Тепер ми пишемо один рядок коду, щоб уникнути пастки фіктивної змінної:
 #avoiding the dummy variable trap: x = x[:, 1:] 

Якщо ми не видалимо першу фіктивну змінну, це може внести мультиколінеарність у модель.

Множинна лінійна регресія

Як ми бачимо на вихідному зображенні вище, перший стовпець було видалено.

  • Тепер ми розділимо набір даних на навчальний і тестовий. Код для цього наведено нижче:
 # Splitting the dataset into training and test set. from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test= train_test_split(x, y, test_size= 0.2, random_state=0) 

Наведений вище код розділить наш набір даних на набір для навчання та набір для тестування.

Вихід: Наведений вище код розділить набір даних на набір для навчання та набір для тестування. Ви можете перевірити результат, натиснувши опцію провідника змінних, надану в Spyder IDE. Тестовий набір і навчальний набір виглядатимуть, як показано на зображенні нижче:

Тестовий набір:

Множинна лінійна регресія

Навчальний набір:

Множинна лінійна регресія

Примітка:У MLR ми не будемо виконувати масштабування функцій, оскільки це виконується бібліотекою, тому нам не потрібно робити це вручну.

Крок: 2. Підгонка нашої моделі MLR до навчального набору:

Тепер ми добре підготували наш набір даних, щоб забезпечити навчання, а це означає, що ми адаптуємо нашу регресійну модель до навчального набору. Це буде схоже на те, що ми робили в Модель простої лінійної регресії. Код для цього буде:

 #Fitting the MLR model to the training set: from sklearn.linear_model import LinearRegression regressor= LinearRegression() regressor.fit(x_train, y_train) 

Вихід:

 Out[9]: LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False) 

Тепер ми успішно навчили нашу модель за допомогою навчального набору даних. На наступному кроці ми перевіримо продуктивність моделі за допомогою тестового набору даних.

що таке файлова система linux

Крок: 3- Прогнозування результатів тестового набору:

Останнім кроком для нашої моделі є перевірка продуктивності моделі. Ми зробимо це, спрогнозувавши результат набору тестів. Для прогнозування ми створимо a y_pred вектор. Нижче наведено його код:

 #Predicting the Test set result; y_pred= regressor.predict(x_test) 

Виконуючи наведені вище рядки коду, буде створено новий вектор під опцією провідника змінних. Ми можемо протестувати нашу модель, порівнюючи прогнозовані значення та значення тестового набору.

Вихід:

Множинна лінійна регресія

У наведеному вище виході ми передбачили набір результатів і набір тестів. Ми можемо перевірити продуктивність моделі, порівнюючи ці два значення індекс за індексом. Наприклад, перший індекс має прогнозоване значення 103015$ прибуток і тест/реальна вартість 103282$ прибуток. Різниця лише в 267 доларів США , що є хорошим прогнозом, тож нарешті наша модель тут завершена.

  • Ми також можемо перевірити оцінку для навчального набору даних і тестового набору даних. Нижче наведено його код:
 print(&apos;Train Score: &apos;, regressor.score(x_train, y_train)) print(&apos;Test Score: &apos;, regressor.score(x_test, y_test)) 

Вихід: Оцінка:

 Train Score: 0.9501847627493607 Test Score: 0.9347068473282446 

Наведена вище оцінка говорить про те, що наша модель точна на 95% з навчальним набором даних і на 93% з тестовим набором даних.

Примітка:У наступній темі ми побачимо, як ми можемо покращити продуктивність моделі за допомогоюЗворотне усуненняпроцес.

Застосування множинної лінійної регресії:

В основному є два застосування множинної лінійної регресії:

  • Ефективність незалежної змінної на прогноз:
  • Прогнозування впливу змін: