В тази статия ще разберем и приложим линейната регресия с помощта на sklearn върху набор от данни за цените на жилищата в Бостън

Какво е линейна регресия?

Линейната регресия е контролиран алгоритъм за машинно обучение. Предсказва линейна връзкамежду независима променлива (y) въз основа на дадените зависими променливи (x). Така, че независимата променлива (y) да има най-ниската цена.

Работа на линейната регресия

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

Сега, ако приложим линейна регресия към него, тогава той ще изчисли връзка/линиямежду данни, така че линиятада е най-близка до всички точки в данните. С други думи, той ще изчисли връзката между температурата (x)и продажбите на сладолед (y) и ще ни каже, че при какво Температурата продажбитеще бъдат по-големии при каква температураще бъдатпродажбитепо-малко.

Как да намерим тази линия/връзка между нашите данни?

Сега, преди да се потопим дълбоко в това, има някои терминологии, които първо трябва да разберем.

  • Представяне на хипотези
  • Функция на разходите
  • Градиентно спускане

Представяне на хипотеза

Представяне на хипотезата е уравнението на нашата линия, която използваме, за да представим връзкатамежду дадените данни.

Това уравнениев началото може да бъде объркващо и на някои може да им е трудно да си го представят катоуравнение на линия. Но ако разгледаме уравнението на правата, то е y = mx + c.

В уравнението на линията m съответства на наклона, x е променливата с някои стойност и c е константа.
При представяне на хипотеза θ1съответства на наклон strong>, xе променливата с някаква стойност, а θ0е константа.

Така че тук θ0& θ1 са и двата параметра и тяхната начална стойност е ръчно >зададено от нас, но след това се променя допълнително за линия, за да се зададе перфектно в данните.

Функция на разходите

Сега всеки път, когато за първи път начертаем нашите данни и изчислим линията/връзката, трябва да изберем някои параметри, като началната точка на тази линияи наклон на линията. Така че отначало не знаем стойностите на нито едно от тези неща и приемаме стойностите и на двата параметъраи след това прилагаме функцията разходина нашия данниза проверка за грешка (разстояние между точките и нашата линия).

Сега първо ще ви покажа математическата версия на нашата функция на разходите и след това ще я обясня по-долу.

Важни бележки:

  • mпредставлява общ брой примери за обучение
  • x(i) представлява входната променлива (x(1) означава първи пример за обучение)
  • y(i) представлява изходната променлива

Така че в тази функция на разходите терминът ( hθ(x ) — y)изважда предвидената стойност(x) по нашата зададена стойност (y) и по този начин намираме грешката (разстояние)между нашата линияи дадените точки. След това вземаме квадрата на нашия отговор, в случай че получената стойност е отрицателно число. След това сумирамевсички наши примери за обучение и ги умножавамес 1/2m, за да вземем средна стойностна нашата грешка в примери за обучение.

Изработване на 1 / 2м (по избор)

Това, което виждаме тук, е, че цялото това уравнение е умножено по 1/2m. mтук е да вземем средната/средна стойност на нашата грешка и 2 е тук, защото когато вземем производнатана функцията за разходи, която се използва при актуализиранена параметритепо време на градиентно спускане, че 2 в степента се анулира с 1/2 множителя, като по този начин извличането е по-чисто.

Градиентно спускане

Сега, когато имаме по-добро разбиране на Функцията на разходите & Представяне на хипотези, се придвижваме към третия член, Градиентно спускане.

И така, сега успешно внедрихме функцията за разходи и имаме някои разходи (грешка) ›› 0. За да намалим тази цена (грешка)ние прилагаме градиентно спускане, където актуализираместойностите на параметрите θ0& θ1в този случай и продължава да актуализираги, докато нашата цена (грешка) стане почти равна на0. И така, математическото уравнение за градиентно спускане е както следва

Важни бележки:

  • m представлява общ брой примери за обучение
  • α представлява алфанаричан още Степен на обучение
  • x(i) представлява входната променлива (x(1) означава първи пример за обучение)
  • y(i) представлява изходната променлива

Добре, сега като се потопим в тази формула, можем да видим, че θ0& θ1постоянно се променят, докато функцията на разходите достигне своя минимална стойноста. Това означава, че ще продължим да променяместойностите на θ0& θ1 докато нашите параметридостигнат стойност, където cцената (грешка)ще бъде най-малката.

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

Тук умножаваме производната на нашата функция на разходите (функция на разходите на квадрат на грешка) с α и изваждаметова от текущата стойност на θпо това време, за да получите нова стойност на тета (θ).

Избор на стойността на α

Винаги избираме много малка стойностна α, защото промянатав стойностите на θ след всяка итерация зависи от стойността на α(както се вижда в уравнението). И така, като изберем много малка стойност на αнашата хипотезавърви много малки стъпкии достига своята най-ниска цената. Като използваме големи стойности на α, може да започнем да правим големи стъпки и може да пропуснемглобалните минимуми, където нашите цена (грешка)би била най-ниска.

Изясняване на x във второто уравнение

Сега някои може да се чудят, че във второто уравнение допълнително x(i) се умножавас нашето уравнение, докато в първото уравнениеняма нищо. Е, там присъства x(0), което е умноженос нашето уравнение, но ние не го записваме, защото това е пристрастието и винаги е равно на 1.

Работа с градиентно спускане

Сега това, което градиентното спускане прави, е, че прави малки бебешки стъпки и във всяка стъпка то сближава хипотеза (ред) към позициякъдето нашата цена (грешка)би била минимална.

Прочетете повече за Функцията на разходите и Градиентно спускане от тук.

Стъпки за прилагане на линейна регресия:

Сега имаме много добро разбиране за представяне на хипотези, функция на разходите и градиентно спускане. И така, нека приложим линейна регресия към нашия набор от данни.

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

  1. Начертайте нашите данни (x, y).
  2. Вземете произволни стойности на θ0& θ1 и инициализирайте нашата хипотеза.
  3. Приложете функция на разходите към нашата хипотезаи изчислете нейните цени.
  4. Ако нашата цена ››0, тогава приложете градиентно спускане и актуализирайтестойноститена нашите параметри θ0 & θ1.
  5. Продължете да изчислявате стъпки 3и 4докато нашата ценастане почти равна на 0или стане минимална.
  6. Ако нашата ценае достигнала своите глобални минимуми, тогава спираме да прилагаме както функция на разходите, така и градиентно спускане и сега ние успешно обучихме нашия алгоритъмза предвиждане на правилната връзкамежду нашите данни.

Сега, когато разбираме много добре как работи линейната регресия, нека я приложим към набор от данни, използвайки известната библиотека за машинно обучение на Python, Scikit-learn.

Какво е Scikit-learn?

Scikit-learn (известен също като sklearn) е библиотека за машинно обучение за Python. Той включва различни алгоритми за класификация, регресия,и групиранезаедно с машини за поддържащи вектори (SVM), произволни гори, усилване на градиента,k-означаваи DBSCAN и е проектиран да работи с библиотеките на Python като NumPy, Pandas,и SciPy.

Линейна регресия с помощта на Sklearn

Линейната регресия е много ясен и лесен за използване алгоритъм. Особено с помощта на тази Scikit learnбиблиотека, внедряването и използването й стана доста лесно. Сега нека започнем да използваме Sklearn.

Първо, имаме нужда от някои данни, за да приложим линейна регресия към него. Така че ще използваме набор от данни за цените на жилищата в Бостънот sklearn.

Импортиране на набор от данни от Бостън в Python

from sklearn.datasets import load_boston
boston = load_boston()

Импортиране на други библиотеки в Python

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

Проверка на съдържанието на нашия набор от данни

print(boston.keys())

Тези ключове в dict_keys() всеки от тях съдържа много информация и данни в тях.

  • Ключът ‘ data’ съдържа нашите данни, които ще предоставим на нашия модел, може също да се приеме като входна (x) променлива. Той може да бъде достъпен с помощта на boston.data код.
  • Ключът ‘ target’ съдържа нашите изходни данни (y), които нашият модел трябва да предвиди. Той може да бъде достъпен чрез boston.target код.
  • Ключът ‘feature_names’ съдържа имената на колони/характеристики на нашите данни. Те също могат да бъдат достъпни чрез кода boston.feature_names.
  • Ключът ‘ DESCR’ ще ни даде цялата информация за набора от данни, броя на колоните в него и дори детайлите/описанието на всяка колона. Имаме достъп до тази информация с помощта на код print(boston['DESCR']).
  • Ключът ‘ filename’ ни дава местоположението на този файл (цена на жилища в Бостън). Можем да получим местоположението с помощта на код print(boston['filename']).

Създаване на DataFrame

Сега, за да продължим напред и да видим данните си организирани и работещи, ще създадем рамка с данни с помощта на Pandas.

bostondf = pd.DataFrame(boston.data, columns=boston.feature_names)

След като нашата DataFrame е създадена и нашите данни са организирани. Ние проверяваме главата на нашия набор от данни, използвайки bostondf.head(). Това ни дава цялостна яснота/образ на набора от данни.

Сега, ако не разбираме какво представлява всяка колона, можем да използваме кода print(boston['DESCR']), който обсъдихме по-рано, за да проверим подробностите за всяка колона.

Сега, след като направихме известно инженерство на функции на нашите данни, когато почувстваме, че данните ни вече са в правилния формат за предаване към нашия модел, преминаваме към следващата стъпка.
ЗАБЕЛЕЖКА: Не се занимавам с инженерство на функции на този набор от данни.

Разделяне на нашия набор от данни на влак, тестови стойности

Сега, когато нашите данни са готови да бъдат предадени на нашия модел, нашата първа стъпка е да разделим нашия набор от данни на два набора, т.е. training_setи test_set.

from sklearn.model_selection import train_test_split
X = bostondf
y = boston['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

Тук Xв X = bostondf съдържа всичкихарактеристики/входни данни (x), които предоставяме на нашия модел за предсказванена цената на къщи (y)и y в y = boston['target']съдържа цената на къщите. Така че сега 67% от нашите данни принадлежат на training_set и 33% от принадлежат на test_setзащото test_size е зададено на 0,33.

Импортиране на LinearRegression( )

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

from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(X_train, y_train)
lr.score(X_test, y_test)

Добре, това, което направихме в тези няколко стъпки е, че импортирахме клас LinearRegression( ) и направихме обект на LinearRegression, наречен lr. След това приспособихменашите данни за обучение lr.fit(X_train, y_train) към модела, като му предоставихме както входните характеристики (X_train), така и изходните стойности (y_train). След като моделът се е обучилна нашите данни за обучение, след това проверяваме доколко моделът е съобразен с нашите данни за обучение, като използваме код lr.score(X_test, y_test)*100. Той ще предскажецените на къщите въз основа на характеристикипредоставени в X_test и след това ще извърши кръстосана проверка тези цени с реално дадените цени от y_test. След това ще ни даде плаваща стойност между 1–100, която ще ни каже точносттана нашия модел.

Точностната на този модел е72.45 %.

Важна забележка

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

ПОЗДРАВЛЕНИЯ! Успешно обучихме нашия модел на линейна регресияна набора от данни за цените на жилищата в Бостън.

Резултат от обучението

Досега научихме какво е Представяне на хипотези, Функция на разходите и Градиентно спусканеи как работят. Освен това научихме как да приложим Линейна регресия върху набор от данниот нулатаи как да изградим модел за машинно обучение използвайки Pythonизвестната библиотека за машинно обучениет.е.Scikit-learn.

Досега научихме какво е Представяне на хипотези, Функция на разходите и Градиентно спусканеи как работят. Освен това научихме как да приложим Линейна регресия върху набор от данниот нулатаи как да изградим модел за машинно обучение използвайки Pythonизвестната библиотека за машинно обучениет.е.Scikit-learn.