Anslag for huspris i USA

Anslag For Huspris I Usa



Å bygge et hus er en av de utfordrende faktorene i livene våre. Før byggingen er det mulig å estimere prisen på huset ditt basert på det forrige husets pris. Faktorene som i stor grad påvirker boligprisen inkluderer det totale antallet rom (seng, bad osv.) og arealet av tomten. Ved dette kan vi anslå det nødvendige budsjettet for å bygge huset.

I denne guiden vil vi se hvordan du kan forutsi prisen på de amerikanske husene ved å bruke Machine Learning gjennom Python. Først diskuterer vi datasettet vi bruker og forbehandler deretter dataene. Etter det visualiserer vi attributtene som er tilstede i datasettet og bruker forskjellige maskinlæringsalgoritmer på treningsdatasettet (Seattle, Washington august 2022 – desember 2022). Til slutt avslutter vi denne veiledningen med å forutsi prisen på noen hus som finnes i testdatasettet. Før vi implementerer dette prosjektet, må vi forstå maskinlæringsterminologiene som brukes i dette prosjektet.







Regresjon

I maskinlæring, hvis du jobber med numeriske data, må du forstå regresjon. Regresjon er en overvåket læringsteknikk i maskinlæring som brukes til å forstå forholdet mellom uavhengige attributter og avhengige attributter (klasseetikett/mål). Maskinen forutsier boligprisen ved å lære hver post som finnes i datasettet. Derfor er det en veiledet læring.



For eksempel, i vårt scenario, er de uavhengige attributtene antall senger, antall bad, størrelse på land, postnummer osv. Basert på disse er vi i stand til å forutsi boligprisen vår. Så dette er de uavhengige egenskapene som ikke er avhengige av noe. Prisen er målattributtet eller klasseetiketten som avhenger av disse attributtene.



1. Lineær regresjon

Den lineære regresjonsalgoritmen viser en lineær sammenheng mellom variablene avhengige attributter (Y) og uavhengige attributter (X). Matematisk kan vi vurdere det som følger:





OG = aX+b

Her er 'a' og 'b' lineære koeffisienter.

I Python er LinearRegression() tilgjengelig i modulen 'sklearn.linear_model'. Vi vil se hvordan vi spesifiserer dette under gjennomføring av prosjektet. Følgende er modellen med parametere:



2. Beslutningstre

I utgangspunktet er et beslutningstre en grafisk representasjon for å få alle mulige løsninger på et problem basert på betingelsene gitt ved bruk av nodene. Beslutningsnoden brukes til å ta avgjørelsen, og bladnoden refererer til resultatet av en spesifikk avgjørelse. Vi kan forutsi prisen på huset vårt med Decision Tree Regressor.

I Python er DecisionTreeRegressor tilgjengelig i 'sklearn.tree'-modulen. Vi vil se hvordan vi spesifiserer dette under gjennomføring av prosjektet. Følgende er modellen med parametere:

3. Tilfeldig skog

Random Forest utfører den samme funksjonaliteten som ligner på et beslutningstre. Men det krever en skog (samling av beslutningstrær) og kombinere (middelverdi) alle utgangene fra beslutningstrærene. For eksempel er den tilfeldige skogstørrelsen 3. Så internt opprettes tre beslutningstrær og husprisutfallet for det første beslutningstreet er 20 000. Husprisutfallet for det andre beslutningstreet er 20 000. Og husprisutfallet av det siste beslutningstreet er 10000. 16.666.666 er det endelige resultatet ((20000+20000+10000)/3).

I Python er RandomForestRegressor tilgjengelig i 'sklearn.ensemble'-modulen. Følgende er modellen med parametere. Vi kan spesifisere antall trær i parameteren 'n_estimators'. Det er 100 som standard.

Gjennomføring

Se raskt trinnene som er involvert i å forutsi den amerikanske boligprisen. Vi vurderer datasettet houses_train (CSV-fil) med 2016-poster (brukt til å trene Machine Learning-modellen). Deretter forutsier vi husets pris (505) poster som er til stede i house_test-filen.

1. Lasting av tog- og testdatasett

Pandas er den tilgjengelige modulen i Python som brukes til dataanalyse. Vi bruker denne modulen til å laste datasettene inn i Python-miljøet. Her bruker vi Google Co som kodemiljøet. Dette er tilgjengelig gratis. Bare en Google-konto er nødvendig.

Først må vi laste filene fra vår lokale PC til Colab Env. Last ned datasettene fra her .

# Last opp houses_train.csv- og house_test.csv-filer til Google Colab

# en etter en.

fra Google. ET AL import filer

filer. laste opp ( )

Read_csv() er funksjonen som brukes til å laste CSV-data inn i en variabel. Den tar filnavnet som parameter.

import pandaer

# Last inn houses_train.csv i train_data-variabelen

tog_data = pandaer. les_csv ( 'hus_tog.csv' )

# Last inn house_test.csv i test_data-variabelen

testdata = pandaer. les_csv ( 'house_test.csv' )

# Lagre test_data i test_data1-variabelen

test_data1 = testdata

La oss se antallet kolonner og ikke-nullposter i hver kolonne. Pandas.DataFrame.info() brukes for å få denne informasjonen.

skrive ut ( tog_data. info ( ) )

skrive ut ( test_data1. info ( ) )

Produksjon:

2. Dataforbehandling

I begge datasettene inneholder «lot_size»-kolonnen verdiene med sqft og acre (Du finner variansen ved å se radene i «lot_size_unit's»-kolonnen). Men formatet skal være i sqft. Så vi må konvertere verdiene i 'lot_size'-kolonnen fra acre til sqft. På samme måte skal dette gjøres for 'test_data1'.

DataFrame.loc[] brukes her for å finne 'lot_size_units' med 'acre' og multiplisere verdien som er tilstede i 'lot_size' med 43560.

# Konverter lot_size acre-verdiene til Square feet i train_data

tog_data. plass [ ( tog_data [ 'lot_size_units' ] == 'acre' ) , 'lot_size' ] = tog_data [ 'lot_size' ] * 43560

# Konverter lot_size acre-verdiene til kvadratfot i test_data1

test_data1. plass [ ( test_data1 [ 'lot_size_units' ] == 'acre' ) , 'lot_size' ] = test_data1 [ 'lot_size' ] * 43560

skrive ut ( tog_data. hode ( ) )

skrive ut ( test_data1. hode ( ) )

Produksjon:

Nå vil du se at alle verdiene i 'lot_size'-kolonnen er sqft-verdier.

Du ser noen manglende verdier i denne kolonnen. La oss erstatte NaN-verdiene som er tilstede i kolonnene med gjennomsnittet av samme kolonne i begge datasettene.

DataFrame['column_name'].fillna() brukes til å fylle de manglende verdiene med gjennomsnittet ved å bruke mean()-funksjonen. DataFrame['column_name'].mean() sendes som en parameter til finna()-funksjonen. La oss vise gjennomsnittet og se tellingen nå:

# Fyll de manglende verdiene i lot_size-kolonnen med Gjennomsnitt av eksisterende verdier

tog_data [ 'lot_size' ] = tog_data [ 'lot_size' ] . føle ( tog_data [ 'lot_size' ] . mener ( ) )

# Vis gjennomsnitt

skrive ut ( 'Togdata gjennomsnittsverdi: ' , tog_data [ 'lot_size' ] . mener ( ) )

skrive ut ( bare ( tog_data [ 'lot_size' ] ) )

# Fyll de manglende verdiene i lot_size-kolonnen med Gjennomsnitt av eksisterende verdier

test_data1 [ 'lot_size' ] = test_data1 [ 'lot_size' ] . føle ( test_data1 [ 'lot_size' ] . mener ( ) )

# Vis gjennomsnitt

skrive ut ( 'Testdata gjennomsnittsverdi: ' , test_data1 [ 'lot_size' ] . mener ( ) )

skrive ut ( bare ( test_data1 [ 'lot_size' ] ) )

Produksjon:

De manglende verdiene som er tilstede i «lot_size»-kolonnen Togdatasett erstattes med middelverdien på 18789.95194, og de manglende verdiene som er tilstede i «lot_size»-kolonnen Testdatasett erstattes med middelverdien på 8961.0

3. Datarensing

Mens du trener modellen, er det noen unødvendige egenskaper som ikke er nødvendige for å forutsi resultatet. I vårt tilfelle er det tre attributter som er 'lot_size_units', 'zip_code' og 'size_units' som skal fjernes fra begge datasettene. Pandas.DataFrame.drop() brukes til å fjerne disse tre kolonnene fra begge datasettene.

tog_data = tog_data. miste ( [ 'lot_size_units' , 'post kode' , 'størrelse_enheter' ] , akser = 1 )

test_data1 = test_data1. miste ( [ 'lot_size_units' , 'post kode' , 'størrelse_enheter' ] , akser = 1 )

skrive ut ( tog_data. info ( ) )

skrive ut ( test_data1. info ( ) )

Produksjon:

Nå er datasettene i god form. Unødvendige kolonner fjernes og de manglende verdiene eksisterer ikke.

4. Datavisualisering

La oss lage et histogram for kolonnene i togdataene. Funksjonen pandas.DataFrame.hist() brukes til å generere histogrammer for alle attributter.

tog_data. hist ( fikenstørrelse = ( 4 , 9 ) )

Produksjon:

Histogram genereres for senger, bad, størrelse, lot_size og priskolonner for togdataene.

La oss lage korrelasjonen for alle felt med hensyn til hverandre. Plotly.express-modulen brukes til å plotte de korrelerte verdiene.

import plottende. uttrykke

korr = tog_data. korr ( )

# Plott de korrelerte dataene

view_fig = plottende. uttrykke . imshow ( korr , tekst_auto = ekte )

# Vise

view_fig. forestilling ( )

Produksjon:

  1. Sengene er 0,2935 korrelert med prisen, -0,059 korrelert med lot_size, 0,77 korrelert med størrelsen og 0,65 korrelert med bad.
  2. Badene er 0,3173 korrelert med prisen, -0,054 korrelert med lot_size, 0,667 korrelert med badene og 0,771 korrelert med senger.
  3. Størrelsen er 0,444 korrelert med prisen, -0,044 korrelert med lot_size, 0,667 korrelert med størrelsen og 0,652 korrelert med senger.

5. Modellforberedelse

Vi må sette prisen som mål ved å fjerne den fra train_data. Sørg for at attributtene som finnes i tog- og testdataene skal være de samme i denne fasen.

mål = tog_data [ 'pris' ]

tog_data = tog_data. miste ( [ 'pris' ] , akser = 1 )

skrive ut ( tog_data. info ( ) )

skrive ut ( test_data1. info ( ) )

Produksjon:

Nå er det fire uavhengige attributter (senger, bad, størrelse og lot_size), og prisen er den avhengige attributten som avhenger av disse fire attributtene.

6. Trening av modellen

Først bruker vi RandomForestRegressor-algoritmen. Importer den fra 'sklearn.ensemble'-pakken. Det er en ensembling-teknikk.

  1. Lag en modell fra RandomForestRegressor(). Vi overfører ingen parameter til denne modellen. Så antallet beslutningstrær er 100 som standard.
  2. Bruk metoden fit() for å tilpasse modellen. Det krever to parametere. Den første parameteren er de avhengige attributtene og den andre parameteren er klasseetiketten/målet.
  3. Bruk score()-metoden for å se modellnøyaktigheten. Den tar også de samme parameterne som ligner på fit()-metoden.
fra lært ensemble import RandomForestRegressor

# Definer modellen

modell1 = RandomForestRegressor ( )

# Tilpass modellen

modell1. passe ( tog_data , mål )

# Modellnøyaktighet

skrive ut ( modell1. score ( tog_data , mål ) * 100 )

Produksjon:

86.08400889419033

7. Test modellen og lagre resultatene

Dette er det siste trinnet der vi må forutsi resultatet og lagre dem.

  1. Predict()-metoden brukes til å forutsi testdataene. Den brukes med modellen og tar Nested list of values/DataFrame.
  2. Bruk to_csv()-metoden for å lagre resultatene i CSV-filen.
  3. Last ned filen fra Python-miljøet (Google Colab).
# Forutsi test_data1 med modellen1.

testdata [ 'Pris' ] = modell1. forutsi ( test_data1 )

# Lagre test_data til test_results.csv

testdata. til_csv ( 'test_resultater.csv' )

# Last ned denne filen fra Colab

filer. nedlasting ( 'test_resultater.csv' )

Produksjon:

La oss vise 20 poster av 505 poster. Du kan se at Pris-kolonnen inneholder de anslåtte verdiene for hvert hus.

Andre modeller

La oss forutsi husene ved å bruke DecisionTreeRegressor. Du kan importere den fra 'sklearn.tree'-modulen.

fra lært tre import DecisionTreeRegressor

# Definer modellen

modell2 = DecisionTreeRegressor ( )

# Tilpass modellen

modell2. passe ( tog_data , mål )

# Modellnøyaktighet

skrive ut ( modell2. score ( tog_data , mål ) * 100 )

# Forutsi test_data1 med modellen1.

testdata [ 'Pris' ] = modell2. forutsi ( test_data1 )

# Lagre test_data til test_results.csv

testdata. til_csv ( 'test_resultater.csv' )

# Last ned denne filen fra Colab

filer. nedlasting ( 'test_resultater.csv' )

Produksjon:

99.94183165335028

Du kan se det spådde resultatet her:

La oss forutsi husene ved å bruke LinearrRegression. Importer modellen fra 'sklearn.linear_model'-modulen.

fra lært lineær_modell import Lineær regresjon

# Definer modellen

modell3 = Lineær regresjon ( )

# Tilpass modellen

modell3. passe ( tog_data , mål )

# Forutsi test_data1 med modellen1.

testdata [ 'Pris' ] = modell3. forutsi ( test_data1 )

# Lagre test_data til test_results.csv

testdata. til_csv ( 'test_resultater.csv' )

# Last ned denne filen fra Colab

filer. nedlasting ( 'test_resultater.csv' )

Du kan se det spådde resultatet her:

Konklusjon

Nå er du i stand til å forutsi boligprisen din basert på attributtene som antall rom, arealet av landet ditt osv. I denne guiden tok vi for oss de virkelige husdataene fra Seattle, Washington. Ved å bruke regresjonsteknikker som Lineær Regresjon, Decision Tree og Random Forest, spådde vi prisen på 505 hus. Alle trinnene (dataforbehandling, datarensing og datavisualisering) som må gjøres før opplæring av modellen er forklart trinn for trinn med kodebiter og utdata.