Предвиђање цена кућа у САД

Predvidane Cena Kuca U Sad



Изградња куће је један од изазовних фактора у нашим животима. Пре изградње могуће је проценити цену ваше куће на основу цене претходне куће. Фактори који највише утичу на цену куће су укупан број соба (кревет, купатило и сл.) и површина земљишта. На основу овога можемо проценити потребан буџет за изградњу куће.

У овом водичу ћемо видети како да предвидимо цену америчких кућа користећи машинско учење преко Питхон-а. Прво, разговарамо о скупу података који користимо, а затим претходно обрадимо податке. Након тога, визуелизујемо атрибуте који су присутни у скупу података и примењујемо различите алгоритме машинског учења на скуп података за обуку (Сијетл, Вашингтон, август 2022 – децембар 2022). Коначно, завршавамо овај водич предвиђањем цене неких кућа које су присутне у скупу података за тестирање. Пре него што кренемо у имплементацију овог пројекта, морамо да разумемо терминологију машинског учења која се користи у овом пројекту.







Регресија

У машинском учењу, ако радите са нумеричким подацима, морате да разумете регресију. Регресија је техника надгледаног учења у машинском учењу која се користи за разумевање односа између независних атрибута и зависних атрибута (ознака класе/циљ). Машина предвиђа цену куће тако што ће научити сваки запис који је присутан у скупу података. Дакле, то је надгледано учење.



На пример, у нашем сценарију, независни атрибути су број кревета, број купатила, величина земљишта, поштански број, итд. На основу њих, можемо да предвидимо цену наше куће. Дакле, ово су независни атрибути који не зависе ни од чега. Цена је циљни атрибут или ознака класе која зависи од ових атрибута.



1. Линеарна регресија

Алгоритам линеарне регресије показује линеарну везу између променљивих зависног атрибута (И) и независног атрибута (Кс). Математички то можемо проценити на следећи начин:





И = аКс+б

Овде су „а“ и „б“ линеарни коефицијенти.

У Питхон-у, ЛинеарРегрессион() је доступан у модулу „склеарн.линеар_модел“. Видећемо како то прецизирати током реализације пројекта. Следи модел са параметрима:



2. Стабло одлучивања

У основи, стабло одлучивања је графички приказ за добијање свих могућих решења проблема на основу услова обезбеђених коришћењем чворова. Чвор Одлука се користи за доношење одлуке, а чвор Лист се односи на излаз одређене одлуке. Можемо предвидети цену наше куће помоћу Регресора стабла одлучивања.

У Питхон-у, ДецисионТрееРегрессор је доступан у модулу „склеарн.трее“. Видећемо како то прецизирати током реализације пројекта. Следи модел са параметрима:

3. Случајна шума

Рандом Форест обавља исту функцију која је слична стаблу одлучивања. Али потребна је шума (колекција стабала одлучивања) и комбиновање (средња вредност) свих излаза стабала одлучивања. На пример, величина случајне шуме је 3. Дакле, интерно, креирају се три стабла одлучивања и исход цене куће првог стабла одлучивања је 20000. Исход цене куће другог стабла одлучивања је 20000. А исход цене куће од последње стабло одлучивања је 10000. 16,666,666 је коначни исход ((20000+20000+10000)/3).

У Питхон-у, РандомФорестРегрессор је доступан у модулу „склеарн.енсембле“. Следи модел са параметрима. Можемо одредити број стабала у параметру „н_естиматорс“. Подразумевано је 100.

Имплементација

Брзо погледајте кораке који су укључени у предвиђање цене куће у САД. Разматрамо скуп података хоусес_траин (ЦСВ датотека) са записима из 2016. (који се користе за обуку модела машинског учења). Затим предвиђамо записе о цени куће (505) који су присутни у датотеци хоусе_тест.

1. Учитавање скупова података за обуку и тестирање

Пандас је доступан модул у Питхон-у који се користи за анализу података. Користимо овај модул за учитавање скупова података у Питхон окружење. Овде користимо Гоогле Цо као окружење кода. Ово је бесплатно. Потребан је само Гоогле налог.

Прво, морамо да учитамо датотеке са нашег локалног рачунара у Цолаб Енв. Преузмите скупове података са овде .

# Отпремите датотеке хоусес_траин.цсв и хоусе_тест.цсв у свој Гоогле Цолаб

# један за другим.

из гоогле. ЕТ АЛ увоз фајлови

фајлови. отпремити ( )

Реад_цсв() је функција која се користи за учитавање ЦСВ података у променљиву. Као параметар узима име датотеке.

увоз панде

# Учитајте хоусес_траин.цсв у променљиву траин_дата

траин_дата = панде. реад_цсв ( 'хоусес_траин.цсв' )

# Учитајте хоусе_тест.цсв у променљиву тест_дата

тест подаци = панде. реад_цсв ( 'хоусе_тест.цсв' )

# Сачувајте тест_дата у променљиву тест_дата1

тест_дата1 = тест подаци

Хајде да погледамо колоне и број записа који нису нулти у свакој колони. Пандас.ДатаФраме.инфо() се користи за добијање ових информација.

принт ( траин_дата. инфо ( ) )

принт ( тест_дата1. инфо ( ) )

Излаз:

2. Предобрада података

У оба скупа података, колона „лот_сизе“ садржи вредности са скфт и ацре (Варијансу ћете пронаћи тако што ћете видети редове у колони „лот_сизе_унит’с“). Али формат треба да буде у скфт. Дакле, треба да конвертујемо вредности у колони „лот_сизе“ из ацре у скфт. Слично, ово треба урадити за „тест_дата1“.

ДатаФраме.лоц[] се овде користи да пронађе „лот_сизе_унитс“ са „ацре“ и помножи вредност која је присутна у „лот_сизе“ са 43560.

# Конвертујте вредности лот_сизе ацре у квадратне стопе у траин_дата

траин_дата. место [ ( траин_дата [ 'лот_сизе_унитс' ] == 'акр' ) , 'величина плаца' ] = траин_дата [ 'величина плаца' ] * 43560

# Конвертујте вредности лот_сизе ацре у квадратне стопе у тест_дата1

тест_дата1. место [ ( тест_дата1 [ 'лот_сизе_унитс' ] == 'акр' ) , 'величина плаца' ] = тест_дата1 [ 'величина плаца' ] * 43560

принт ( траин_дата. глава ( ) )

принт ( тест_дата1. глава ( ) )

Излаз:

Сада ћете видети да су све вредности у колони „величина_лота“ скфт вредности.

У овој колони видите неке вредности које недостају. Заменимо НаН вредности које су присутне у колонама средњом вредности исте колоне у оба скупа података.

ДатаФраме[‘цолумн_наме’].филлна() се користи за попуњавање вредности које недостају средњом вредношћу помоћу функције меан(). ДатаФраме[‘цолумн_наме’].меан() се прослеђује као параметар функцији финна(). Хајде да прикажемо средњу вредност и видимо сада број:

# Попуните недостајуће вредности присутне у колони лот_сизе са средњом вредности постојећих вредности

траин_дата [ 'величина плаца' ] = траин_дата [ 'величина плаца' ] . осетити ( траин_дата [ 'величина плаца' ] . значити ( ) )

# Прикажи средњу вредност

принт ( „Средња вредност података о возу:“ , траин_дата [ 'величина плаца' ] . значити ( ) )

принт ( само ( траин_дата [ 'величина плаца' ] ) )

# Попуните недостајуће вредности присутне у колони лот_сизе са средњом вредности постојећих вредности

тест_дата1 [ 'величина плаца' ] = тест_дата1 [ 'величина плаца' ] . осетити ( тест_дата1 [ 'величина плаца' ] . значити ( ) )

# Прикажи средњу вредност

принт ( „Средња вредност тестних података:“ , тест_дата1 [ 'величина плаца' ] . значити ( ) )

принт ( само ( тест_дата1 [ 'величина плаца' ] ) )

Излаз:

Вредности које недостају које су присутне у колони „лот_сизе“ Скуп података о возу замењене су средњом вредношћу од 18789,95194, а вредности које недостају које су присутне у колони „лот_сизе“ скуп података теста су замењене средњом вредношћу од 8961,0

3. Чишћење података

Док обучавате модел, постоје неки непотребни атрибути који нису потребни за предвиђање исхода. У нашем случају постоје три атрибута који су „лот_сизе_унитс“, „зип_цоде“ и „сизе_унитс“ које треба уклонити из оба скупа података. Пандас.ДатаФраме.дроп() се користи за уклањање ове три колоне из оба скупа података.

траин_дата = траин_дата. кап ( [ 'лот_сизе_унитс' , 'поштански број' , 'јединице_величине' ] , осовина = 1 )

тест_дата1 = тест_дата1. кап ( [ 'лот_сизе_унитс' , 'поштански број' , 'јединице_величине' ] , осовина = 1 )

принт ( траин_дата. инфо ( ) )

принт ( тест_дата1. инфо ( ) )

Излаз:

Сада су скупови података у добром стању. Непотребне колоне се уклањају и вредности које недостају не постоје.

4. Визуелизација података

Хајде да направимо хистограм за колоне података о возу. Функција пандас.ДатаФраме.хист() се користи за генерисање хистограма за све атрибуте.

траин_дата. хист ( фигсизе = ( 4 , 9 ) )

Излаз:

Хистограм се генерише за кревете, купатила, колоне величине, величине_лота и цене за податке о возу.

Хајде да направимо корелацију за сва поља једно у односу на друго. Модул Плотли.екпресс се користи за исцртавање корелираних вредности.

увоз плотли. изразити

испр = траин_дата. испр ( )

# Зацртајте корелиране податке

виев_фиг = плотли. изразити . имсхов ( испр , тект_ауто = Истина )

# Приказ

виев_фиг. Прикажи ( )

Излаз:

  1. Кревети су 0,2935 у корелацији са ценом, -0,059 у корелацији са величином парцеле, 0,77 у корелацији са величином, а 0,65 у корелацији са купатилима.
  2. Купатила су 0,3173 у корелацији са ценом, -0,054 у корелацији са величином парцеле, 0,667 у корелацији са купатилима, а 0,771 у корелацији са креветима.
  3. Величина је 0,444 у корелацији са ценом, -0,044 у корелацији са лот_сизе, 0,667 у корелацији са величином, а 0,652 у корелацији са креветима.

5. Припрема модела

Морамо да поставимо цену као циљну тако што ћемо је уклонити из траин_дата. Уверите се да атрибути који су присутни у подацима о обуци и тесту треба да буду исти у овој фази.

циљ = траин_дата [ 'Цена' ]

траин_дата = траин_дата. кап ( [ 'Цена' ] , осовина = 1 )

принт ( траин_дата. инфо ( ) )

принт ( тест_дата1. инфо ( ) )

Излаз:

Сада постоје четири независна атрибута (кревети, купатила, величина и величина_лота) и цена је зависни атрибут који зависи од ова четири атрибута.

6. Обука модела

Прво, примењујемо алгоритам РандомФорестРегрессор. Увезите га из пакета „склеарн.енсембле“. То је техника ансамблирања.

  1. Креирајте модел из РандомФорестРегрессор(). Не преносимо ниједан параметар овом моделу. Дакле, број стабала одлучивања је подразумевано 100.
  2. Користите метод фит() да бисте уклопили модел. Потребна су два параметра. Први параметар су зависни атрибути, а други параметар је ознака/циљ класе.
  3. Користите метод сцоре() да видите тачност модела. Такође узима исте параметре сличне методи фит().
из научио ансамбл увоз РандомФорестРегрессор

# Дефинишите модел

модел1 = РандомФорестРегрессор ( )

# Поставите модел

модел1. фит ( траин_дата , циљ )

# Тачност модела

принт ( модел1. резултат ( траин_дата , циљ ) * 100 )

Излаз:

86.08400889419033

7. Тестирајте модел и сачувајте резултате

Ово је последњи корак где треба да предвидимо резултат и да их ускладиштимо.

  1. Метода предицт() се користи за предвиђање података теста. Користи се са моделом и узима угнежђену листу вредности/оквир података.
  2. Користите методу то_цсв() да бисте сачували резултате у ЦСВ датотеку.
  3. Преузмите датотеку из Питхон окружења (Гоогле Цолаб).
# Предвидите тест_дата1 са моделом1.

тест подаци [ 'Цена' ] = модел1. предвидети ( тест_дата1 )

# Сачувајте тест_дата у тест_ресултс.цсв

тест подаци. то_цсв ( 'тест_ресултс.цсв' )

# Преузмите ову датотеку са Цолаб-а

фајлови. преузимање ( 'тест_ресултс.цсв' )

Излаз:

Хајде да прикажемо 20 записа од 505 записа. Можете видети да колона Цена садржи предвиђене вредности за сваку кућу.

Други модели

Хајде да предвидимо куће користећи ДецисионТрееРегрессор. Можете га увести из модула “склеарн.трее”.

из научио дрво увоз ДецисионТрееРегрессор

# Дефинишите модел

модел2 = ДецисионТрееРегрессор ( )

# Поставите модел

модел2. фит ( траин_дата , циљ )

# Тачност модела

принт ( модел2. резултат ( траин_дата , циљ ) * 100 )

# Предвидите тест_дата1 са моделом1.

тест подаци [ 'Цена' ] = модел2. предвидети ( тест_дата1 )

# Сачувајте тест_дата у тест_ресултс.цсв

тест подаци. то_цсв ( 'тест_ресултс.цсв' )

# Преузмите ову датотеку са Цолаб-а

фајлови. преузимање ( 'тест_ресултс.цсв' )

Излаз:

99.94183165335028

Предвиђени резултат можете видети овде:

Хајде да предвидимо куће користећи ЛинеаррЕгрессион. Увезите модел из модула „склеарн.линеар_модел“.

из научио линеарни_модел увоз Линеарна регресија

# Дефинишите модел

модел3 = Линеарна регресија ( )

# Поставите модел

модел3. фит ( траин_дата , циљ )

# Предвидите тест_дата1 са моделом1.

тест подаци [ 'Цена' ] = модел3. предвидети ( тест_дата1 )

# Сачувајте тест_дата у тест_ресултс.цсв

тест подаци. то_цсв ( 'тест_ресултс.цсв' )

# Преузмите ову датотеку са Цолаб-а

фајлови. преузимање ( 'тест_ресултс.цсв' )

Предвиђени резултат можете видети овде:

Закључак

Сада сте у могућности да предвидите цену своје куће на основу атрибута као што су број соба, површина вашег земљишта, итд. У овом водичу смо размотрили стварне податке о кући из Сијетла, Вашингтон. Користећи технике регресије као што су линеарна регресија, стабло одлучивања и насумична шума, предвидели смо цену 505 кућа. Сви кораци (претходна обрада података, чишћење података и визуелизација података) који се морају урадити пре обучавања модела су објашњени корак по корак са исечцима кода и излазима.