USA majahinna ennustus

Usa Majahinna Ennustus



Maja ehitamine on üks väljakutseid meie elus. Enne ehitamist on võimalik hinnata oma maja hinda eelmise maja hinna alusel. Maja hinda oluliselt mõjutavad tegurid on tubade koguarv (voodi, vann jne) ja maa pindala. Selle järgi saame hinnata maja ehitamiseks vajalikku eelarvet.

Selles juhendis näeme, kuidas Pythoni kaudu masinõpet kasutades ennustada USA majade hinda. Esiteks arutame kasutatavat andmekogumit ja seejärel eeltöötleme andmeid. Pärast seda visualiseerime andmekogumis olevad atribuudid ja rakendame koolitusandmestikule erinevaid masinõppe algoritme (Seattle, Washington august 2022 – detsember 2022). Lõpuks lõpetame selle juhendi, ennustades mõne testiandmestikus sisalduva maja hinda. Enne selle projekti rakendamist peame mõistma selles projektis kasutatavaid masinõppe terminoloogiaid.







Regressioon

Masinõppes, kui töötate arvandmetega, peate mõistma regressiooni. Regressioon on masinõppes juhendatud õppetehnika, mida kasutatakse sõltumatute atribuutide ja sõltuvate atribuutide (klassi silt/sihtmärk) vahelise seose mõistmiseks. Masin ennustab maja hinda, õppides ära iga andmestikus sisalduva kirje. Seega on see juhendatud õpe.



Näiteks meie stsenaariumi kohaselt on sõltumatuteks atribuutideks voodikohtade arv, vannide arv, maa suurus, sihtnumber jne. Nende põhjal saame ennustada oma maja hinda. Niisiis, need on sõltumatud atribuudid, mis ei sõltu millestki. Hind on sihtatribuut või klassi silt, mis sõltub nendest atribuutidest.



1. Lineaarne regressioon

Lineaarse regressiooni algoritm näitab lineaarset seost sõltuva atribuudi (Y) ja sõltumatu atribuudi (X) muutujate vahel. Matemaatiliselt saame seda hinnata järgmiselt:





JA = aX+b

Siin on 'a' ja 'b' lineaarsed koefitsiendid.

Pythonis on LinearRegression() saadaval moodulis 'sklearn.linear_model'. Kuidas seda täpsustada, vaatame projekti elluviimisel. Järgmine on mudel koos parameetritega:



2. Otsuste puu

Põhimõtteliselt on otsustuspuu graafiline esitus, mis võimaldab saada probleemile kõik võimalikud lahendused, mis põhinevad sõlmede abil pakutavatel tingimustel. Otsuse sõlme kasutatakse otsuse tegemiseks ja sõlm Leaf viitab konkreetse otsuse väljundile. Oma maja hinda saame ennustada otsustuspuu regressoriga.

Pythonis on DecisionTreeRegressor saadaval moodulis 'sklearn.tree'. Kuidas seda täpsustada, vaatame projekti elluviimisel. Järgmine on mudel koos parameetritega:

3. Random Forest

Random Forest täidab samu funktsioone, mis on sarnased otsustuspuuga. Kuid selleks on vaja metsa (otsustuspuude kogu) ja kombineerida (keskväärtus) kõik otsustuspuude väljundid. Näiteks juhusliku metsa suurus on 3. Seega luuakse sisemiselt kolm otsustuspuud ja esimese otsustuspuu majahinna tulemus on 20000. Teise otsustuspuu majahinna tulemus on 20000. Ja majahinna tulemus viimane otsustuspuu on 10 000. 16 666 666 on lõpptulemus ((20000+20000+10000)/3).

Pythonis on RandomForestRegressor saadaval moodulis 'sklearn.ensemble'. Järgmine on mudel koos parameetritega. Puude arvu saame määrata parameetris “n_estimators”. Vaikimisi on see 100.

Rakendamine

Vaadake kiiresti USA majahinna ennustamise samme. Vaatleme andmestikku houses_train (CSV-fail) 2016. aasta kirjetega (kasutatakse masinõppe mudeli koolitamiseks). Seejärel ennustame maja hinna (505) kirjet, mis on failis house_test.

1. Rongide ja katsete andmekogumite laadimine

Pandas on Pythonis saadaolev moodul, mida kasutatakse andmete analüüsimiseks. Kasutame seda moodulit andmestike laadimiseks Pythoni keskkonda. Siin kasutame Google Co kui Code Environment. See on tasuta saadaval. Vaja on vaid Google'i kontot.

Esiteks peame failid kohalikust arvutist Colab Envi laadima. Laadige andmestikud alla aadressilt siin .

# Laadige oma Google Colabi üles failid houses_train.csv ja house_test.csv

# üksteise järel.

alates google. ET AL importida failid

failid. Laadi üles ( )

Read_csv() on funktsioon, mida kasutatakse CSV-andmete laadimiseks muutujasse. See võtab parameetrina faili nime.

importida pandad

# Laadige houses_train.csv muutujasse train_data

rongi_andmed = pandad. read_csv ( 'houses_train.csv' )

# Laadige house_test.csv muutujasse test_data

test_andmed = pandad. read_csv ( 'house_test.csv' )

# Salvestage test_data muutujasse test_data1

test_andmed1 = test_andmed

Vaatame veerge ja mitte-nullkirjete arvu igas veerus. Selle teabe hankimiseks kasutatakse faili Pandas.DataFrame.info().

printida ( rongi_andmed. info ( ) )

printida ( test_andmed1. info ( ) )

Väljund:

2. Andmete eeltöötlus

Mõlemas andmekogumis sisaldab veerg „lot_size” väärtusi ruutjalga ja aakriga (dispersiooni leiate, kui näete veerus „lot_size_unit’s” ridu). Kuid formaat peaks olema ruutjalgades. Seega peame veerus „lot_size” olevad väärtused teisendama aakrilt ruutjalgadeks. Samamoodi tuleb seda teha 'test_data1' jaoks.

Siin kasutatakse faili DataFrame.loc[], et leida üksus 'lot_size_units' väärtusega 'acre' ja korrutada lahtris 'lot_size' olev väärtus arvuga 43560.

# Teisendage lot_size acre väärtused ruutjalgadeks jaotises train_data

rongi_andmed. koht [ ( rongi_andmed [ 'partii_suuruse_ühikud' ] == 'aaker' ) , 'partii suurus' ] = rongi_andmed [ 'partii suurus' ] * 43560

# Teisendage lot_size acre väärtused ruutjalgadeks test_data1-s

test_andmed1. koht [ ( test_andmed1 [ 'partii_suuruse_ühikud' ] == 'aaker' ) , 'partii suurus' ] = test_andmed1 [ 'partii suurus' ] * 43560

printida ( rongi_andmed. pea ( ) )

printida ( test_andmed1. pea ( ) )

Väljund:

Nüüd näete, et kõik väärtused veerus lot_size on ruutjalga väärtused.

Selles veerus näete puuduvaid väärtusi. Asendame veergudes olevad NaN väärtused mõlema andmestiku sama veeru keskmisega.

DataFrame['veeru_nimi'].fillna() kasutatakse puuduvate väärtuste täitmiseks keskmisega, kasutades funktsiooni mean(). DataFrame['veeru_nimi'].mean() edastatakse parameetrina funktsioonile finna(). Kuvame keskmist ja vaatame nüüd arvu:

# Täitke veerus lot_size olevad puuduvad väärtused valikuga Olemasolevate väärtuste keskmine

rongi_andmed [ 'partii suurus' ] = rongi_andmed [ 'partii suurus' ] . tunda ( rongi_andmed [ 'partii suurus' ] . tähendab ( ) )

# Kuva keskmine

printida ( 'Rongi andmete keskmine väärtus: ' , rongi_andmed [ 'partii suurus' ] . tähendab ( ) )

printida ( ainult ( rongi_andmed [ 'partii suurus' ] ) )

# Täitke veerus lot_size olevad puuduvad väärtused valikuga Olemasolevate väärtuste keskmine

test_andmed1 [ 'partii suurus' ] = test_andmed1 [ 'partii suurus' ] . tunda ( test_andmed1 [ 'partii suurus' ] . tähendab ( ) )

# Kuva keskmine

printida ( 'Testi andmete keskmine väärtus:' , test_andmed1 [ 'partii suurus' ] . tähendab ( ) )

printida ( ainult ( test_andmed1 [ 'partii suurus' ] ) )

Väljund:

Veerus „lot_size” olevad puuduvad väärtused Rongi andmekogum asendatakse keskmise väärtusega 18789,95194 ja puuduvad väärtused, mis on veerus „partii suurus” Test Dataset asendatakse keskmise väärtusega 8961,0

3. Andmete puhastamine

Mudeli koolitamise ajal on mõned ebavajalikud atribuudid, mida tulemuse ennustamiseks pole vaja. Meie puhul on mõlemast andmekogumist eemaldatavad kolm atribuuti, milleks on 'lot_size_units', 'zip_code' ja 'size_units'. Pandas.DataFrame.drop() kasutatakse nende kolme veeru eemaldamiseks mõlemast andmekogumist.

rongi_andmed = rongi_andmed. tilk ( [ 'lot_size_units' , 'postiindeks' , 'suuruse_ühikud' ] , telg = 1 )

test_andmed1 = test_andmed1. tilk ( [ 'lot_size_units' , 'postiindeks' , 'suuruse_ühikud' ] , telg = 1 )

printida ( rongi_andmed. info ( ) )

printida ( test_andmed1. info ( ) )

Väljund:

Nüüd on andmestikud heas korras. Mittevajalikud veerud eemaldatakse ja puuduvad väärtused puuduvad.

4. Andmete visualiseerimine

Loome rongi andmete veergude jaoks histogrammi. Funktsiooni pandas.DataFrame.hist() kasutatakse kõigi atribuutide histogrammide genereerimiseks.

rongi_andmed. hist ( viigisuurus = ( 4 , 9 ) )

Väljund:

Histogramm luuakse rongi andmete voodite, vannide, suuruse, partii_suuruse ja hinna veergude jaoks.

Loome kõigi väljade jaoks üksteise suhtes korrelatsiooni. Korrelatsiooniväärtuste joonistamiseks kasutatakse moodulit Plotly.express.

importida süžeeliselt. väljendada

korr = rongi_andmed. korr ( )

# Joonistage korreleeritud andmed

vaade_joon = süžeeliselt. väljendada . imshow ( korr , text_auto = Tõsi )

# Ekraan

vaade_joon. näidata ( )

Väljund:

  1. Voodid on 0,2935 korrelatsioonis hinnaga, -0,059 korrelatsioonis lot_size, 0,77 korrelatsioonis suurusega ja 0,65 korrelatsioonis vannidega.
  2. Vannid on 0,3173 korrelatsioonis hinnaga, -0,054 korrelatsioonis lot_size, 0,667 korrelatsioonis vannidega ja 0,771 korrelatsioonis vooditega.
  3. Suurus on korrelatsioonis hinnaga 0,444, lot_size -0,044, suurusega 0,667 ja vooditega 0,652.

5. Mudeli ettevalmistamine

Peame määrama hinna sihtmärgiks, eemaldades selle rongi_andmete hulgast. Veenduge, et rongi ja katse andmetes olevad atribuudid peaksid selles faasis olema samad.

sihtmärk = rongi_andmed [ 'hind' ]

rongi_andmed = rongi_andmed. tilk ( [ 'hind' ] , telg = 1 )

printida ( rongi_andmed. info ( ) )

printida ( test_andmed1. info ( ) )

Väljund:

Nüüd on neli sõltumatut atribuuti (voodid, vannid, suurus ja lot_size) ning hind on sõltuv atribuut, mis sõltub neist neljast atribuudist.

6. Modelli koolitamine

Esiteks rakendame RandomForestRegressori algoritmi. Importige see paketist 'sklearn.ensemble'. See on komplekteerimistehnika.

  1. Looge RandomForestRegressor() abil mudel. Me ei edasta sellele mudelile ühtegi parameetrit. Seega on otsustuspuude arv vaikimisi 100.
  2. Kasutage mudeli sobitamiseks meetodit fit(). Selleks on vaja kahte parameetrit. Esimene parameeter on sõltuvad atribuudid ja teine ​​parameeter on klassi silt/sihtmärk.
  3. Mudeli täpsuse vaatamiseks kasutage meetodit score(). See võtab ka samu parameetreid, mis on sarnased meetodile fit().
alates õppinud ansambel importida RandomForestRegressor

# Määratlege mudel

mudel1 = RandomForestRegressor ( )

# Sobitage mudel

mudel1. sobima ( rongi_andmed , sihtmärk )

# Mudeli täpsus

printida ( mudel1. skoor ( rongi_andmed , sihtmärk ) * 100 )

Väljund:

86.08400889419033

7. Testige mudelit ja salvestage tulemused

See on viimane samm, kus peame tulemuse ennustama ja need salvestama.

  1. Testiandmete ennustamiseks kasutatakse meetodit ennustada(). Seda kasutatakse koos mudeliga ja see võtab pesastatud väärtuste loendi/DataFrame.
  2. Kasutage tulemuste CSV-faili salvestamiseks meetodit to_csv().
  3. Laadige fail alla Pythoni keskkonnast (Google Colab).
# Ennusta test_andmed1 mudeli1 abil.

test_andmed [ 'hind' ] = mudel1. ennustada ( test_andmed1 )

# Salvestage test_data faili test_results.csv

test_andmed. to_csv ( 'test_results.csv' )

# Laadige see fail alla Colabist

failid. lae alla ( 'test_results.csv' )

Väljund:

Näitame 20 kirjet 505st. Näete, et veerus Hind sisaldab iga maja prognoositud väärtusi.

Muud mudelid

Ennustagem maju, kasutades DecisionTreeRegressorit. Saate selle importida moodulist 'sklearn.tree'.

alates õppinud puu importida OtsusepuuRegressor

# Määratlege mudel

mudel2 = OtsusepuuRegressor ( )

# Sobitage mudel

mudel2. sobima ( rongi_andmed , sihtmärk )

# Mudeli täpsus

printida ( mudel2. skoor ( rongi_andmed , sihtmärk ) * 100 )

# Ennusta test_andmed1 mudeli1 abil.

test_andmed [ 'hind' ] = mudel2. ennustada ( test_andmed1 )

# Salvestage test_data faili test_results.csv

test_andmed. to_csv ( 'test_results.csv' )

# Laadige see fail alla Colabist

failid. lae alla ( 'test_results.csv' )

Väljund:

99.94183165335028

Prognoositavat tulemust näed siit:

Ennustame maju lineaarse agressiooni abil. Importige mudel moodulist 'sklearn.linear_model'.

alates õppinud lineaarne_mudel importida Lineaarne regressioon

# Määratlege mudel

mudel3 = Lineaarne regressioon ( )

# Sobitage mudel

mudel3. sobima ( rongi_andmed , sihtmärk )

# Ennusta test_andmed1 mudeli1 abil.

test_andmed [ 'hind' ] = mudel3. ennustada ( test_andmed1 )

# Salvestage test_data faili test_results.csv

test_andmed. to_csv ( 'test_results.csv' )

# Laadige see fail alla Colabist

failid. lae alla ( 'test_results.csv' )

Prognoositavat tulemust näed siit:

Järeldus

Nüüd saate ennustada oma maja hinda selliste atribuutide alusel nagu tubade arv, teie maa pindala jne. Selles juhendis käsitlesime tegelikke majaandmeid Seattle'ist, Washingtonist. Kasutades regressioonitehnikaid, nagu lineaarne regressioon, otsustuspuu ja juhuslik mets, ennustasime 505 maja hinda. Kõik etapid (andmete eeltöötlus, andmete puhastamine ja andmete visualiseerimine), mis tuleb enne mudeli treenimist teha, on samm-sammult lahti seletatud koodijuppide ja väljunditega.