logo

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

В предишната тема научихме за простата линейна регресия, където една независима/предсказуема (X) променлива се използва за моделиране на променливата на отговора (Y). Но може да има различни случаи, в които променливата на отговора се влияе от повече от една предикторна променлива; за такива случаи се използва алгоритъмът за множествена линейна регресия.

Освен това, множествената линейна регресия е разширение на простата линейна регресия, тъй като са необходими повече от една предикторна променлива, за да се предвиди променливата на отговора. Можем да го определим като:

Множествената линейна регресия е един от важните алгоритми за регресия, който моделира линейната връзка между една зависима непрекъсната променлива и повече от една независима променлива.

Пример:

Прогноза за CO2емисии въз основа на размера на двигателя и броя на цилиндрите в автомобила.

Някои ключови точки за MLR:

  • За MLR зависимата или целевата променлива (Y) трябва да бъде непрекъсната/реална, но предикторът или независимата променлива може да бъде в непрекъсната или категорична форма.
  • Всяка променлива на характеристиката трябва да моделира линейната връзка със зависимата променлива.
  • MLR се опитва да напасне регресионна линия през многомерно пространство от точки от данни.

MLR уравнение:

При множествената линейна регресия целевата променлива (Y) е линейна комбинация от множество предикторни променливи x1, х2, х3, ...,хн. Тъй като това е подобрение на простата линейна регресия, така че същото се прилага за уравнението на множествената линейна регресия, уравнението става:

 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;) 

Изход: Ще получим набора от данни като:

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

В горния изход можем ясно да видим, че има пет променливи, в които четири променливи са непрекъснати и една е категорична променлива.

    Извличане на зависими и независими променливи:
 #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) 

Сега успешно обучихме нашия модел, използвайки набора от данни за обучение. В следващата стъпка ще тестваме производителността на модела, като използваме тестовия набор от данни.

Стъпка: 3- Прогнозиране на резултатите от тестовия набор:

Последната стъпка за нашия модел е проверка на производителността на модела. Ще го направим, като прогнозираме резултата от тестовия набор. За прогнозиране ще създадем a y_pred вектор. По-долу е кодът за него:

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

Чрез изпълнение на горните редове код ще бъде генериран нов вектор под опцията за изследване на променливи. Можем да тестваме нашия модел, като сравним прогнозираните стойности и стойностите на тестовия набор.

Изход:

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

В горния резултат имаме предвиден набор от резултати и набор от тестове. Можем да проверим ефективността на модела, като сравним тези две стойности индекс по индекс. Например, първият индекс има предвидена стойност от 103 015 долара печалба и тест/реална стойност на 103 282 долара печалба. Разликата е само в 7 , което е добра прогноза, така че най-накрая нашият модел е завършен тук.

  • Можем също да проверим резултата за набор от данни за обучение и набор от тестови данни. По-долу е кодът за него:
 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% точен с тестовия набор от данни.

как да разберете дали някой ви е блокирал на android

Забележка:В следващата тема ще видим как можем да подобрим производителността на модела с помощта наОбратно елиминиранепроцес.

Приложения на множествената линейна регресия:

Има основно две приложения на множествената линейна регресия:

  • Ефективност на независимата променлива върху прогнозата:
  • Прогнозиране на въздействието на промените: