Predikcia cien domu v USA

Predikcia Cien Domu V Usa



Stavba domu je jedným z náročných faktorov v našom živote. Pred stavbou je možné odhadnúť cenu Vášho domu na základe ceny predchádzajúceho domu. Medzi faktory, ktoré zásadne ovplyvňujú cenu domu, patrí celkový počet izieb (posteľ, kúpeľňa a pod.) a rozloha pozemku. Podľa toho vieme odhadnúť potrebný rozpočet na stavbu domu.

V tejto príručke uvidíme, ako predpovedať cenu amerických domov pomocou strojového učenia prostredníctvom Pythonu. Najprv diskutujeme o súbore údajov, ktorý používame, a potom údaje predspracujeme. Potom vizualizujeme atribúty, ktoré sú prítomné v množine údajov, a aplikujeme rôzne algoritmy strojového učenia na množinu trénovacích údajov (Seattle, Washington, august 2022 – december 2022). Nakoniec túto príručku ukončíme predpovedaním ceny niektorých domov, ktoré sú prítomné v súbore údajov Test. Pred implementáciou tohto projektu musíme pochopiť terminológiu strojového učenia, ktorá sa používa v tomto projekte.







Regresia

Ak v strojovom učení pracujete s číselnými údajmi, musíte porozumieť regresii. Regresia je technika riadeného učenia v strojovom učení, ktorá sa používa na pochopenie vzťahu medzi nezávislými atribútmi a závislými atribútmi (označenie triedy/cieľ). Stroj predpovedá cenu domu tým, že sa naučí každý záznam, ktorý je prítomný v súbore údajov. Ide teda o učenie pod dohľadom.



Napríklad v našom scenári sú nezávislými atribútmi počet lôžok, počet kúpeľov, veľkosť pozemku, PSČ atď. Na základe toho sme schopní predpovedať cenu nášho domu. Toto sú teda nezávislé atribúty, ktoré na ničom nezávisia. Cena je cieľový atribút alebo označenie triedy, ktoré závisí od týchto atribútov.



1. Lineárna regresia

Algoritmus lineárnej regresie ukazuje lineárny vzťah medzi premennými závislých atribútov (Y) a nezávislých atribútov (X). Matematicky to môžeme vyhodnotiť takto:





A = aX+b

Tu sú „a“ a „b“ lineárne koeficienty.

V Pythone je LinearRegression() k dispozícii v module „sklearn.linear_model“. Uvidíme, ako to špecifikovať pri realizácii projektu. Nasleduje model s parametrami:



2. Rozhodovací strom

Rozhodovací strom je v podstate grafické znázornenie na získanie všetkých možných riešení problému na základe podmienok poskytnutých pomocou uzlov. Uzol Rozhodnutie sa používa na prijatie rozhodnutia a uzol List odkazuje na výstup konkrétneho rozhodnutia. Cenu nášho domu vieme predpovedať pomocou Regresora rozhodovacieho stromu.

V Pythone je DecisionTreeRegressor dostupný v module „sklearn.tree“. Uvidíme, ako to špecifikovať pri realizácii projektu. Nasleduje model s parametrami:

3. Náhodný les

Náhodný les vykonáva rovnakú funkciu, ktorá je podobná stromu rozhodnutí. Vyžaduje to však les (kolekciu rozhodovacích stromov) a skombinovať (priemerná hodnota) všetky výstupy rozhodovacích stromov. Napríklad veľkosť náhodného lesa je 3. Takže interne sa vytvoria tri rozhodovacie stromy a výsledok ceny domu prvého rozhodovacieho stromu je 20 000. Výsledok ceny domu druhého rozhodovacieho stromu je 20 000. posledný rozhodovací strom je 10000. 16 666,666 je konečný výsledok ((20000+20000+10000)/3).

V Pythone je RandomForestRegressor dostupný v module „sklearn.ensemble“. Nasleduje model s parametrami. Počet stromov môžeme špecifikovať v parametri „n_estimators“. Štandardne je to 100.

Implementácia

Rýchlo si pozrite kroky spojené s predpovedaním ceny domu v USA. Berieme do úvahy súbor údajov houses_train (súbor CSV) so záznamami z roku 2016 (používaný na trénovanie modelu strojového učenia). Potom predpovedáme záznamy o cene domu (505), ktoré sa nachádzajú v súbore house_test.

1. Načítanie dátových sád vlaku a testu

Pandas je dostupný modul v Pythone, ktorý sa používa na analýzu údajov. Tento modul používame na načítanie množín údajov do prostredia Python. Tu používame Google Co ako prostredie kódexu. Toto je k dispozícii zadarmo. Vyžaduje sa iba účet Google.

Najprv musíme načítať súbory z miestneho počítača do súboru Colab Env. Stiahnite si súbory údajov z tu .

# Nahrajte súbory houses_train.csv a house_test.csv do svojej služby Google Colab

# jeden po druhom.

od google. ET AL importovať súbory

súbory. nahrať ( )

Read_csv() je funkcia, ktorá sa používa na načítanie údajov CSV do premennej. Ako parameter berie názov súboru.

importovať pandy

# Načítajte súbor houses_train.csv do premennej train_data

údaje o vlaku = pandy. read_csv ( 'houses_train.csv' )

# Načítajte súbor house_test.csv do premennej test_data

test_data = pandy. read_csv ( 'test_domu.csv' )

# Uložte test_data do premennej test_data1

test_data1 = test_data

Pozrime sa na počet stĺpcov a nenulových záznamov v každom stĺpci. Na získanie týchto informácií sa používa Pandas.DataFrame.info().

vytlačiť ( údaje o vlaku. Info ( ) )

vytlačiť ( test_data1. Info ( ) )

Výkon:

2. Predspracovanie údajov

V oboch množinách údajov obsahuje stĺpec „lot_size“ hodnoty so sqft a acre (odchýlku nájdete v riadkoch v stĺpci „lot_size_unit’s“). Ale formát by mal byť v štvorcových stopách. Musíme teda previesť hodnoty v stĺpci „veľkosť_lot“ z akrov na štvorcových. Podobne to treba urobiť pre „test_data1“.

DataFrame.loc[] sa tu používa na nájdenie „lot_size_units“ s „acre“ a vynásobenie hodnoty, ktorá je prítomná v „lot_size“ s 43560.

# Preveďte hodnoty lot_size acre na Square feet v train_data

údaje o vlaku. miesto [ ( údaje o vlaku [ 'lot_size_units' ] == 'aker' ) , 'veľkosť_položky' ] = údaje o vlaku [ 'veľkosť_položky' ] * 43560

# Preveďte hodnoty lot_size acre na Square feet v test_data1

test_data1. miesto [ ( test_data1 [ 'lot_size_units' ] == 'aker' ) , 'veľkosť_položky' ] = test_data1 [ 'veľkosť_položky' ] * 43560

vytlačiť ( údaje o vlaku. hlavu ( ) )

vytlačiť ( test_data1. hlavu ( ) )

Výkon:

Teraz uvidíte, že všetky hodnoty v stĺpci „lot_size“ sú hodnoty sqft.

V tomto stĺpci vidíte niektoré chýbajúce hodnoty. Nahraďte hodnoty NaN, ktoré sa nachádzajú v stĺpcoch, strednou hodnotou toho istého stĺpca v oboch množinách údajov.

DataFrame[‘názov_stĺpca’].fillna() sa používa na doplnenie chýbajúcich hodnôt strednou hodnotou pomocou funkcie mean(). DataFrame[‘názov_stĺpca’].mean() sa odovzdá ako parameter funkcii finna(). Ukážme si priemer a teraz počet:

# Doplňte chýbajúce hodnoty v stĺpci lot_size priemerom existujúcich hodnôt

údaje o vlaku [ 'lot_size' ] = údaje o vlaku [ 'lot_size' ] . cítiť ( údaje o vlaku [ 'lot_size' ] . priemerný ( ) )

# Zobraziť priemer

vytlačiť ( 'Priemerná hodnota údajov o vlaku: ' , údaje o vlaku [ 'lot_size' ] . priemerný ( ) )

vytlačiť ( len ( údaje o vlaku [ 'lot_size' ] ) )

# Doplňte chýbajúce hodnoty v stĺpci lot_size priemerom existujúcich hodnôt

test_data1 [ 'lot_size' ] = test_data1 [ 'lot_size' ] . cítiť ( test_data1 [ 'lot_size' ] . priemerný ( ) )

# Zobraziť priemer

vytlačiť ( 'Priemerná hodnota testovacích údajov: ' , test_data1 [ 'lot_size' ] . priemerný ( ) )

vytlačiť ( len ( test_data1 [ 'lot_size' ] ) )

Výkon:

Chýbajúce hodnoty, ktoré sú prítomné v stĺpci „lot_size“ Train Dataset, sú nahradené strednou hodnotou 18789,95194 a chýbajúce hodnoty, ktoré sú prítomné v „lot_size“ stĺpci Test Dataset sú nahradené strednou hodnotou 8961.0

3. Čistenie dát

Počas trénovania modelu existujú niektoré nepotrebné atribúty, ktoré nie sú potrebné na predpovedanie výsledku. V našom prípade existujú tri atribúty, ktorými sú „lot_size_units“, „zip_code“ a „size_units“, ktoré sa majú odstrániť z oboch množín údajov. Pandas.DataFrame.drop() sa používa na odstránenie týchto troch stĺpcov z oboch množín údajov.

údaje o vlaku = údaje o vlaku. pokles ( [ 'lot_size_units' , 'PSČ' , 'size_units' ] , os = 1 )

test_data1 = test_data1. pokles ( [ 'lot_size_units' , 'PSČ' , 'size_units' ] , os = 1 )

vytlačiť ( údaje o vlaku. Info ( ) )

vytlačiť ( test_data1. Info ( ) )

Výkon:

Teraz sú súbory údajov v dobrom stave. Nepotrebné stĺpce sú odstránené a chýbajúce hodnoty neexistujú.

4. Vizualizácia dát

Vytvorme histogram pre stĺpce údajov vlaku. Funkcia pandas.DataFrame.hist() sa používa na generovanie histogramov pre všetky atribúty.

údaje o vlaku. hist ( veľkosť figy = ( 4 , 9 ) )

Výkon:

Histogram sa generuje pre stĺpce lôžok, kúpeľní, veľkosti, veľkosti šarže a ceny pre údaje vlaku.

Vytvorme koreláciu pre všetky polia vzhľadom na seba. Na vykreslenie korelovaných hodnôt sa používa modul Plotly.express.

importovať zápletka. expresné

kor = údaje o vlaku. kor ( )

# Nakreslite korelované údaje

zobraziť_obr = zápletka. expresné . imshow ( kor , text_auto = Pravda )

# Displej

zobraziť_obr. šou ( )

Výkon:

  1. Postele korelujú 0,2935 s cenou, -0,059 koreluje s veľkosťou šarže, 0,77 koreluje s veľkosťou a 0,65 koreluje s kúpeľmi.
  2. Vaňa koreluje 0,3173 s cenou, -0,054 koreluje s veľkosťou šarže, 0,667 koreluje s kúpeľmi a 0,771 koreluje s lôžkami.
  3. Veľkosť koreluje 0,444 s cenou, -0,044 koreluje s veľkosťou šarže, 0,667 koreluje s veľkosťou a 0,652 koreluje s posteľami.

5. Príprava modelu

Cenu musíme nastaviť ako cieľovú tak, že ju odstránime z údajov o vlaku. Uistite sa, že atribúty, ktoré sú prítomné v údajoch vlaku a testu, by mali byť v tejto fáze rovnaké.

cieľ = údaje o vlaku [ 'cena' ]

údaje o vlaku = údaje o vlaku. pokles ( [ 'cena' ] , os = 1 )

vytlačiť ( údaje o vlaku. Info ( ) )

vytlačiť ( test_data1. Info ( ) )

Výkon:

Teraz existujú štyri nezávislé atribúty (postele, vane, veľkosť a veľkosť_lodky) a cena je závislým atribútom, ktorý závisí od týchto štyroch atribútov.

6. Školenie modelu

Najprv použijeme algoritmus RandomForestRegressor. Importujte ho z balíka „sklearn.ensemble“. Je to technika zostavovania.

  1. Vytvorte model z RandomForestRegressor(). Tomuto modelu neodovzdávame žiadny parameter. Počet rozhodovacích stromov je teda štandardne 100.
  2. Na prispôsobenie modelu použite metódu fit(). Vyžaduje si to dva parametre. Prvým parametrom sú závislé atribúty a druhým parametrom je označenie triedy/cieľ.
  3. Ak chcete zobraziť presnosť modelu, použite metódu score(). Má tiež rovnaké parametre ako metóda fit().
od Učil sa súbor importovať RandomForestRegressor

# Definujte model

model1 = RandomForestRegressor ( )

# Prispôsobte sa modelu

model1. fit ( údaje o vlaku , cieľ )

# Presnosť modelu

vytlačiť ( model1. skóre ( údaje o vlaku , cieľ ) * 100 )

Výkon:

86,08400889419033

7. Otestujte model a uložte výsledky

Toto je posledný krok, kde musíme predpovedať výsledok a uložiť ich.

  1. Metóda predikcie () sa používa na predpovedanie údajov testu. Používa sa s modelom a preberá vnorený zoznam hodnôt/DataFrame.
  2. Na uloženie výsledkov do súboru CSV použite metódu to_csv().
  3. Stiahnite si súbor z prostredia Pythonu (Google Colab).
# Predpovedajte test_data1 pomocou modelu1.

test_data [ 'Cena' ] = model1. predpovedať ( test_data1 )

# Uložte test_data do súboru test_results.csv

test_data. do_csv ( 'test_results.csv' )

# Stiahnite si tento súbor zo služby Colab

súbory. Stiahnuť ▼ ( 'test_results.csv' )

Výkon:

Ukážme 20 záznamov z 505 záznamov. Môžete vidieť, že stĺpec Cena obsahuje predpokladané hodnoty pre každý dom.

Iné modely

Predpovedáme domy pomocou DecisionTreeRegressor. Môžete ho importovať z modulu „sklearn.tree“.

od Učil sa strom importovať DecisionTreeRegressor

# Definujte model

model2 = DecisionTreeRegressor ( )

# Prispôsobte sa modelu

model2. fit ( údaje o vlaku , cieľ )

# Presnosť modelu

vytlačiť ( model2. skóre ( údaje o vlaku , cieľ ) * 100 )

# Predpovedajte test_data1 pomocou modelu1.

test_data [ 'Cena' ] = model2. predpovedať ( test_data1 )

# Uložte test_data do súboru test_results.csv

test_data. do_csv ( 'test_results.csv' )

# Stiahnite si tento súbor zo služby Colab

súbory. Stiahnuť ▼ ( 'test_results.csv' )

Výkon:

99,94183165335028

Predpovedaný výsledok si môžete pozrieť tu:

Predpovedajme domy pomocou lineárnej regresie. Importujte model z modulu „sklearn.linear_model“.

od Učil sa lineárny_model importovať Lineárna regresia

# Definujte model

model3 = Lineárna regresia ( )

# Prispôsobte sa modelu

model3. fit ( údaje o vlaku , cieľ )

# Predpovedajte test_data1 pomocou modelu1.

test_data [ 'Cena' ] = model3. predpovedať ( test_data1 )

# Uložte test_data do súboru test_results.csv

test_data. do_csv ( 'test_results.csv' )

# Stiahnite si tento súbor zo služby Colab

súbory. Stiahnuť ▼ ( 'test_results.csv' )

Predpovedaný výsledok si môžete pozrieť tu:

Záver

Teraz môžete predpovedať cenu svojho domu na základe atribútov, ako je počet izieb, plocha vášho pozemku atď. V tejto príručke sme brali do úvahy skutočné údaje o dome zo Seattlu, Washington. Pomocou regresných techník, ako je lineárna regresia, rozhodovací strom a náhodný les, sme predpovedali cenu 505 domov. Všetky kroky (predspracovanie údajov, čistenie údajov a vizualizácia údajov), ktoré je potrebné vykonať pred trénovaním modelu, sú vysvetlené krok za krokom s útržkami kódu a výstupmi.