В предишната тема научихме за простата линейна регресия, където една независима/предсказуема (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:
Стъпка 1: Стъпка на предварителна обработка на данни:
Първата стъпка е
# importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd
#importing datasets data_set= pd.read_csv('50_CompList.csv')
Изход: Ще получим набора от данни като:
В горния изход можем ясно да видим, че има пет променливи, в които четири променливи са непрекъснати и една е категорична променлива.
#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, 'New York'], [162597.7, 151377.59, 443898.53, 'California'], [153441.51, 101145.55, 407934.54, 'Florida'], [144372.41, 118671.85, 383199.62, 'New York'], [142107.34, 91391.77, 366168.42, 'Florida'], [131876.9, 99814.71, 362861.36, 'New York'], [134615.46, 147198.87, 127716.82, 'California'], [130298.13, 145530.06, 323876.68, 'Florida'], [120542.52, 148718.95, 311613.29, 'New York'], [123334.88, 108679.17, 304981.62, 'California'], [101913.08, 110594.11, 229160.95, 'Florida'], [100671.96, 91790.61, 249744.55, 'California'], [93863.75, 127320.38, 249839.44, 'Florida'], [91992.39, 135495.07, 252664.93, 'California'], [119943.24, 156547.42, 256512.92, 'Florida'], [114523.61, 122616.84, 261776.23, 'New York'], [78013.11, 121597.55, 264346.06, 'California'], [94657.16, 145077.58, 282574.31, 'New York'], [91749.16, 114175.79, 294919.57, 'Florida'], [86419.7, 153514.11, 0.0, 'New York'], [76253.86, 113867.3, 298664.47, 'California'], [78389.47, 153773.43, 299737.29, 'New York'], [73994.56, 122782.75, 303319.26, 'Florida'], [67532.53, 105751.03, 304768.73, 'Florida'], [77044.01, 99281.34, 140574.81, 'New York'], [64664.71, 139553.16, 137962.62, 'California'], [75328.87, 144135.98, 134050.07, 'Florida'], [72107.6, 127864.55, 353183.81, 'New York'], [66051.52, 182645.56, 118148.2, 'Florida'], [65605.48, 153032.06, 107138.38, 'New York'], [61994.48, 115641.28, 91131.24, 'Florida'], [61136.38, 152701.92, 88218.23, 'New York'], [63408.86, 129219.61, 46085.25, 'California'], [55493.95, 103057.49, 214634.81, 'Florida'], [46426.07, 157693.92, 210797.67, 'California'], [46014.02, 85047.44, 205517.64, 'New York'], [28663.76, 127056.21, 201126.82, 'Florida'], [44069.95, 51283.14, 197029.42, 'California'], [20229.59, 65947.93, 185265.1, 'New York'], [38558.51, 82982.09, 174999.3, 'California'], [28754.33, 118546.05, 172795.67, 'California'], [27892.92, 84710.77, 164470.71, 'Florida'], [23640.93, 96189.63, 148001.11, 'California'], [15505.73, 127382.3, 35534.17, 'New York'], [22177.74, 154806.14, 28334.72, 'California'], [1000.23, 124153.04, 1903.93, 'New York'], [1315.46, 115816.21, 297114.46, 'Florida'], [0.0, 135426.92, 0.0, 'California'], [542.05, 51743.15, 0.0, 'New York'], [0.0, 116983.8, 45173.06, 'California']], 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('Train Score: ', regressor.score(x_train, y_train)) print('Test Score: ', regressor.score(x_test, y_test))
Изход: Резултатът е:
Train Score: 0.9501847627493607 Test Score: 0.9347068473282446
Горният резултат показва, че нашият модел е 95% точен с обучителния набор от данни и 93% точен с тестовия набор от данни.
как да разберете дали някой ви е блокирал на android
Забележка:В следващата тема ще видим как можем да подобрим производителността на модела с помощта наОбратно елиминиранепроцес.
Приложения на множествената линейна регресия:
Има основно две приложения на множествената линейна регресия:
- Ефективност на независимата променлива върху прогнозата:
- Прогнозиране на въздействието на промените: