Šiame vadove pamatysime, kaip numatyti JAV namų kainą naudojant mašininį mokymąsi per Python. Pirmiausia aptariame naudojamą duomenų rinkinį, o tada iš anksto apdorojame duomenis. Po to vizualizuojame duomenų rinkinyje esančius atributus ir mokymo duomenų rinkiniui taikome skirtingus mašininio mokymosi algoritmus (Sietlas, Vašingtonas 2022 m. rugpjūčio mėn. – 2022 m. gruodžio mėn.). Galiausiai šį vadovą užbaigiame numatydami kai kurių namų, esančių bandymo duomenų rinkinyje, kainas. Prieš pradėdami įgyvendinti šį projektą, turime suprasti mašininio mokymosi terminus, kurie naudojami šiame projekte.
Regresija
Jei naudojate mašininį mokymąsi su skaitmeniniais duomenimis, turite suprasti regresiją. Regresija yra mašininio mokymosi prižiūrimas mokymosi metodas, kuris naudojamas suprasti ryšį tarp nepriklausomų atributų ir priklausomų atributų (klasės etiketė / tikslas). Aparatas numato namo kainą, sužinodamas kiekvieną duomenų rinkinyje esantį įrašą. Vadinasi, tai yra prižiūrimas mokymasis.
Pavyzdžiui, mūsų scenarijuje nepriklausomi atributai yra lovų skaičius, vonių skaičius, sklypo dydis, pašto kodas ir tt Pagal juos galime numatyti savo būsto kainą. Taigi, tai yra nepriklausomi atributai, kurie nuo nieko nepriklauso. Kaina yra tikslinis atributas arba klasės etiketė, kuri priklauso nuo šių atributų.
1. Tiesinė regresija
Linijinės regresijos algoritmas rodo tiesinį ryšį tarp priklausomo požymio (Y) ir nepriklausomo požymio (X) kintamųjų. Matematiškai galime jį įvertinti taip:
IR = aX+b
Čia „a“ ir „b“ yra tiesiniai koeficientai.
„Python“ sistemoje „LinearRegression()“ yra „sklearn.linear_model“ modulyje. Kaip tai patikslinti, pamatysime įgyvendinant projektą. Toliau pateikiamas modelis su parametrais:
2. Sprendimų medis
Iš esmės sprendimų medis yra grafinis vaizdas, leidžiantis gauti visus galimus problemos sprendimus pagal sąlygas, pateiktas naudojant mazgus. Sprendimo mazgas naudojamas sprendimui priimti, o lapų mazgas nurodo konkretaus sprendimo išvestį. Savo namo kainą galime nuspėti naudodami sprendimų medžio regresorių.
„Python“ sistemoje DecisionTreeRegressor galima rasti „sklearn.tree“ modulyje. Kaip tai patikslinti, pamatysime įgyvendinant projektą. Toliau pateikiamas modelis su parametrais:
3. Atsitiktinis miškas
„Random Forest“ atlieka tas pačias funkcijas, kurios yra panašios į sprendimų medį. Tačiau reikia miško (sprendimų medžių rinkinio) ir sujungti (vidutinė vertė) visus sprendimų medžių rezultatus. Pavyzdžiui, atsitiktinio miško dydis yra 3. Taigi viduje sukuriami trys sprendimų medžiai ir pirmojo sprendimų medžio būsto kainos rezultatas yra 20 000. Antrojo sprendimų medžio būsto kainos rezultatas yra 20 000. Namo kainos rezultatas paskutinis sprendimų medis yra 10 000. 16 666 666 yra galutinis rezultatas ((20000+20000+10000)/3).
„Python“ programoje „RandomForestRegressor“ yra „sklearn.ensemble“ modulyje. Toliau pateikiamas modelis su parametrais. Medžių skaičių galime nurodyti parametre „n_estimators“. Pagal numatytuosius nustatymus jis yra 100.
Įgyvendinimas
Greitai peržiūrėkite veiksmus, susijusius su JAV būsto kainos prognozavimu. Atsižvelgiame į houses_train (CSV failo) duomenų rinkinį su 2016 m. įrašais (naudojamas mašininio mokymosi modeliui mokyti). Tada prognozuojame namo kainos (505) įrašus, esančius house_test faile.
1. Traukinio ir bandymo duomenų rinkinių įkėlimas
Pandas yra prieinamas Python modulis, naudojamas duomenų analizei. Šį modulį naudojame duomenų rinkiniams įkelti į Python aplinką. Čia mes naudojame Google Co kaip Kodo aplinka. Tai galima nemokamai. Reikia tik Google paskyros.
Pirmiausia turime įkelti failus iš vietinio kompiuterio į Colab Env. Atsisiųskite duomenų rinkinius iš čia .
# Įkelkite houses_train.csv ir house_test.csv failus į savo „Google Colab“.# vienas po kito.
iš google. ET AL importuoti failus
failus. įkelti ( )
Read_csv() yra funkcija, kuri naudojama CSV duomenims įkelti į kintamąjį. Jis paima failo pavadinimą kaip parametrą.
importuoti pandos# Įkelkite houses_train.csv į train_data kintamąjį
traukinio_duomenys = pandos. skaityti_csv ( „houses_train.csv“ )
# Įkelkite house_test.csv į test_data kintamąjį
testo_duomenys = pandos. skaityti_csv ( „house_test.csv“ )
# Išsaugokite test_data į test_data1 kintamąjį
test_data1 = testo_duomenys
Pažiūrėkime stulpelius ir nenulinių įrašų skaičių kiekviename stulpelyje. Šiai informacijai gauti naudojamas Pandas.DataFrame.info().
spausdinti ( traukinio_duomenys. informacija ( ) )spausdinti ( test_data1. informacija ( ) )
Išvestis:
2. Išankstinis duomenų apdorojimas
Abiejuose duomenų rinkiniuose stulpelyje „lot_size“ yra reikšmės su sqft ir acre (dispersiją rasite matydami eilutes stulpelyje „lot_size_unit’s“). Bet formatas turėtų būti kvadratinių pėdų. Taigi, turime konvertuoti stulpelio „lot_size“ reikšmes iš akrų į kv. Panašiai tai reikia padaryti su „test_data1“.
DataFrame.loc[] čia naudojamas norint rasti „lot_size_units“ su „acre“ ir „lot_size“ reikšmę padauginti iš 43560.
# Konvertuokite lot_size acre reikšmes į kvadratines pėdas, esančias train_datatraukinio_duomenys. vieta [ ( traukinio_duomenys [ 'lot_size_units' ] == 'akras' ) , 'lot_size' ] = traukinio_duomenys [ 'lot_size' ] * 43560
# Konvertuokite lot_size acre reikšmes į kvadratines pėdas test_data1
test_data1. vieta [ ( test_data1 [ 'lot_size_units' ] == 'akras' ) , 'lot_size' ] = test_data1 [ 'lot_size' ] * 43560
spausdinti ( traukinio_duomenys. galva ( ) )
spausdinti ( test_data1. galva ( ) )
Išvestis:
Dabar pamatysite, kad visos „lot_size“ stulpelio reikšmės yra kvadratinių pėdų vertės.
Šiame stulpelyje matote trūkstamas vertes. Pakeiskime NaN reikšmes, esančias stulpeliuose, to paties stulpelio vidurkiu abiejuose duomenų rinkiniuose.
DataFrame['stulpelio_pavadinimas'].fillna() naudojamas trūkstamoms reikšmėms užpildyti vidurkiu naudojant mean() funkciją. DataFrame['stulpelio_pavadinimas'].mean() perduodamas kaip parametras funkcijai finna(). Dabar parodykime vidurkį ir pamatykime skaičių:
# Užpildykite trūkstamas reikšmes stulpelyje lot_size su Esamų reikšmių vidurkiutraukinio_duomenys [ 'lot_size' ] = traukinio_duomenys [ 'lot_size' ] . jausti ( traukinio_duomenys [ 'lot_size' ] . reiškia ( ) )
# Ekrano vidurkis
spausdinti ( „Traukinio duomenų vidutinė vertė:“ , traukinio_duomenys [ 'lot_size' ] . reiškia ( ) )
spausdinti ( tik ( traukinio_duomenys [ 'lot_size' ] ) )
# Užpildykite trūkstamas reikšmes stulpelyje lot_size su Esamų reikšmių vidurkiu
test_data1 [ 'lot_size' ] = test_data1 [ 'lot_size' ] . jausti ( test_data1 [ 'lot_size' ] . reiškia ( ) )
# Ekrano vidurkis
spausdinti ( „Tikrinimo duomenų vidutinė vertė:“ , test_data1 [ 'lot_size' ] . reiškia ( ) )
spausdinti ( tik ( test_data1 [ 'lot_size' ] ) )
Išvestis:
Trūkstamos reikšmės, esančios stulpelyje „lot_size“ Traukinio duomenų rinkinys, pakeičiamos vidutine reikšme 18789,95194, o trūkstamos vertės, esančios stulpelyje „Lot_size“ Bandymo duomenų rinkinys, pakeičiamos vidutine 8961,0 reikšme.
3. Duomenų valymas
Treniruojant modelį, yra keletas nereikalingų atributų, kurių nereikia norint nuspėti rezultatą. Mūsų atveju yra trys atributai, kurie yra „lot_size_units“, „zip_code“ ir „size_units“, kuriuos reikia pašalinti iš abiejų duomenų rinkinių. Pandas.DataFrame.drop() naudojamas šiems trims stulpeliams pašalinti iš abiejų duomenų rinkinių.
traukinio_duomenys = traukinio_duomenys. lašas ( [ 'lot_size_units' , 'pašto kodas' , 'dydžio_vienetai' ] , ašį = 1 )test_data1 = test_data1. lašas ( [ 'lot_size_units' , 'pašto kodas' , 'dydžio_vienetai' ] , ašį = 1 )
spausdinti ( traukinio_duomenys. informacija ( ) )
spausdinti ( test_data1. informacija ( ) )
Išvestis:
Dabar duomenų rinkiniai yra geros būklės. Nereikalingi stulpeliai pašalinami, o trūkstamos reikšmės neegzistuoja.
4. Duomenų vizualizacija
Sukurkime traukinio duomenų stulpelių histogramą. Funkcija pandas.DataFrame.hist() naudojama visų atributų histogramoms generuoti.
traukinio_duomenys. hist ( figos dydis = ( 4 , 9 ) )Išvestis:
Traukinių duomenų histograma generuojama lovų, vonių, dydžio, lot_size ir kainų stulpeliams.
Sukurkime visų laukų koreliaciją vienas kito atžvilgiu. Modulis Plotly.express naudojamas koreliuojamoms reikšmėms nubraižyti.
importuoti siužetinis. išreikštikorr = traukinio_duomenys. korr ( )
# Nubraižykite koreliuojamus duomenis
view_fig = siužetinis. išreikšti . imshow ( korr , tekstas_automatinis = Tiesa )
# Ekranas
view_fig. Rodyti ( )
Išvestis:
- Lovos koreliuoja 0,2935 su kaina, -0,059 koreliuoja su lot_size, 0,77 koreliuoja su dydžiu ir 0,65 koreliuoja su voniomis.
- Vonios koreliuoja 0,3173 su kaina, -0,054 koreliuoja su lot_size, 0,667 koreliuoja su voniomis ir 0,771 koreliuoja su lovomis.
- Dydis koreliuoja su kaina, -0,044 su lot_size, 0,667 su dydžiu ir 0,652 su lovomis.
5. Modelio paruošimas
Turime nustatyti kainą kaip tikslinę, pašalindami ją iš train_data. Įsitikinkite, kad šiame etape traukinio ir bandymo duomenyse esantys atributai turi būti tokie patys.
taikinys = traukinio_duomenys [ 'kaina' ]traukinio_duomenys = traukinio_duomenys. lašas ( [ 'kaina' ] , ašį = 1 )
spausdinti ( traukinio_duomenys. informacija ( ) )
spausdinti ( test_data1. informacija ( ) )
Išvestis:
Dabar yra keturi nepriklausomi atributai (lovos, vonios, dydis ir lot_size), o kaina yra priklausomas atributas, kuris priklauso nuo šių keturių atributų.
6. Modelio mokymas
Pirmiausia taikome RandomForestRegressor algoritmą. Importuokite jį iš „sklearn.ensemble“ paketo. Tai ansamblio technika.
- Sukurkite modelį iš RandomForestRegressor(). Šiam modeliui neperduodame jokių parametrų. Taigi, sprendimų medžių skaičius pagal numatytuosius nustatymus yra 100.
- Naudokite fit() metodą, kad pritaikytumėte modelį. Tam reikia dviejų parametrų. Pirmasis parametras yra priklausomi atributai, o antrasis parametras yra klasės etiketė / tikslas.
- Norėdami pamatyti modelio tikslumą, naudokite score() metodą. Taip pat naudojami tie patys parametrai, panašūs į fit() metodą.
# Apibrėžkite modelį
modelis 1 = RandomForestRegressor ( )
# Tinka modeliui
modelis 1. tinka ( traukinio_duomenys , taikinys )
# Modelio tikslumas
spausdinti ( modelis 1. balas ( traukinio_duomenys , taikinys ) * 100 )
Išvestis:
86.084008894190337. Išbandykite modelį ir išsaugokite rezultatus
Tai paskutinis žingsnis, kai turime numatyti rezultatą ir juos saugoti.
- Prognozuoti () metodas naudojamas bandymo duomenims numatyti. Jis naudojamas su modeliu ir paima įdėtą verčių sąrašą / DataFrame.
- Norėdami išsaugoti rezultatus CSV faile, naudokite metodą to_csv().
- Atsisiųskite failą iš Python aplinkos („Google Colab“).
testo_duomenys [ 'Kaina' ] = modelis 1. numatyti ( test_data1 )
# Išsaugokite test_data į test_results.csv
testo_duomenys. į_csv ( 'test_results.csv' )
# Atsisiųskite šį failą iš „Colab“.
failus. parsisiųsti ( 'test_results.csv' )
Išvestis:
Parodykime 20 įrašų iš 505 įrašų. Matote, kad kainos stulpelyje yra numatomos kiekvieno namo vertės.
Kiti modeliai
Nuspėkime namus naudodami DecisionTreeRegressor. Jį galite importuoti iš „sklearn.tree“ modulio.
iš išmoko medis importuoti Sprendimų medisRegressor# Apibrėžkite modelį
modelis 2 = Sprendimų medisRegressor ( )
# Tinka modeliui
modelis 2. tinka ( traukinio_duomenys , taikinys )
# Modelio tikslumas
spausdinti ( modelis 2. balas ( traukinio_duomenys , taikinys ) * 100 )
# Numatykite test_data1 naudodami modelį1.
testo_duomenys [ 'Kaina' ] = modelis 2. numatyti ( test_data1 )
# Išsaugokite test_data į test_results.csv
testo_duomenys. į_csv ( 'test_results.csv' )
# Atsisiųskite šį failą iš „Colab“.
failus. parsisiųsti ( 'test_results.csv' )
Išvestis:
99.94183165335028Numatomą rezultatą galite pamatyti čia:
Nuspėkime namus naudodami tiesinę regresiją. Importuokite modelį iš „sklearn.linear_model“ modulio.
iš išmoko linijinis_modelis importuoti Tiesinė regresija# Apibrėžkite modelį
modelis 3 = Tiesinė regresija ( )
# Tinka modeliui
modelis 3. tinka ( traukinio_duomenys , taikinys )
# Numatykite test_data1 naudodami modelį1.
testo_duomenys [ 'Kaina' ] = modelis 3. numatyti ( test_data1 )
# Išsaugokite test_data į test_results.csv
testo_duomenys. į_csv ( 'test_results.csv' )
# Atsisiųskite šį failą iš „Colab“.
failus. parsisiųsti ( 'test_results.csv' )
Numatomą rezultatą galite pamatyti čia:
Išvada
Dabar galite numatyti savo būsto kainą pagal tokius požymius kaip kambarių skaičius, jūsų žemės plotas ir kt. Šiame vadove mes atsižvelgėme į tikrus namo duomenis iš Sietlo, Vašingtono. Naudodami regresijos metodus, tokius kaip tiesinė regresija, sprendimų medis ir atsitiktinis miškas, numatėme 505 namų kainą. Visi žingsniai (išankstinis duomenų apdorojimas, duomenų valymas ir duomenų vizualizacija), kuriuos reikia atlikti prieš mokant modelį, yra žingsnis po žingsnio paaiškinami kodo fragmentais ir išvestimis.