V tem priročniku bomo videli, kako s strojnim učenjem prek Pythona predvideti ceno hiš v ZDA. Najprej se pogovorimo o naboru podatkov, ki ga uporabljamo, nato pa podatke predhodno obdelamo. Po tem vizualiziramo atribute, ki so prisotni v naboru podatkov, in uporabimo različne algoritme strojnega učenja na naboru podatkov za usposabljanje (Seattle, Washington, avgust 2022 – december 2022). Na koncu ta vodnik zaključimo z napovedjo cen nekaterih hiš, ki so prisotne v testnem naboru podatkov. Preden začnemo izvajati ta projekt, moramo razumeti terminologijo strojnega učenja, ki se uporablja v tem projektu.
Regresija
Če pri strojnem učenju delate z numeričnimi podatki, morate razumeti regresijo. Regresija je tehnika nadzorovanega učenja v strojnem učenju, ki se uporablja za razumevanje razmerja med neodvisnimi atributi in odvisnimi atributi (oznaka razreda/cilj). Stroj napove ceno hiše tako, da se nauči vsakega zapisa, ki je prisoten v naboru podatkov. Gre torej za nadzorovano učenje.
Na primer, v našem scenariju so neodvisni atributi število postelj, število kopalnic, velikost zemljišča, poštna številka itd. Na podlagi tega lahko napovemo ceno naše hiše. Torej, to so neodvisni atributi, ki niso odvisni od ničesar. Cena je ciljni atribut ali oznaka razreda, ki je odvisna od teh atributov.
1. Linearna regresija
Algoritem linearne regresije prikazuje linearno razmerje med spremenljivkama odvisnega atributa (Y) in neodvisnega atributa (X). Matematično ga lahko ocenimo na naslednji način:
IN = aX+b
Tukaj sta 'a' in 'b' linearna koeficienta.
V Pythonu je LinearRegression() na voljo v modulu “sklearn.linear_model”. Videli bomo, kako to določiti med izvajanjem projekta. Sledi model s parametri:
2. Odločitveno drevo
V bistvu je drevo odločitev grafična predstavitev za pridobivanje vseh možnih rešitev problema na podlagi pogojev, zagotovljenih z uporabo vozlišč. Vozlišče Decision se uporablja za sprejemanje odločitve, vozlišče Leaf pa se nanaša na rezultat določene odločitve. Z Decision Tree Regressorjem lahko napovemo ceno naše hiše.
V Pythonu je DecisionTreeRegressor na voljo v modulu »sklearn.tree«. Videli bomo, kako to določiti med izvajanjem projekta. Sledi model s parametri:
3. Naključni gozd
Naključni gozd izvaja isto funkcijo, ki je podobna odločitvenemu drevesu. Vendar potrebuje gozd (zbirko dreves odločanja) in združuje (povprečna vrednost) vse rezultate dreves odločanja. Na primer, velikost naključnega gozda je 3. Interno so torej ustvarjena tri odločitvena drevesa in rezultat hišne cene prvega odločitvenega drevesa je 20000. Rezultat hišne cene drugega odločitvenega drevesa je 20000. In izid hišne cene za zadnje drevo odločitev je 10000. 16,666.666 je končni rezultat ((20000+20000+10000)/3).
V Pythonu je RandomForestRegressor na voljo v modulu »sklearn.ensemble«. Sledi model s parametri. Število dreves lahko določimo v parametru “n_estimators”. Privzeto je 100.
Izvedba
Hitro si oglejte korake, vključene v napovedovanje cene nepremičnin v ZDA. Upoštevamo nabor podatkov houses_train (datoteka CSV) z zapisi 2016 (ki se uporabljajo za usposabljanje modela strojnega učenja). Nato napovemo zapise o ceni hiše (505), ki so prisotni v datoteki house_test.
1. Nalaganje podatkovnih nizov usposabljanja in testa
Pandas je razpoložljiv modul v Pythonu, ki se uporablja za analizo podatkov. Ta modul uporabljamo za nalaganje naborov podatkov v okolje Python. Tukaj uporabljamo Google Co kot okolje kode. To je na voljo brezplačno. Potreben je samo račun Google.
Najprej moramo naložiti datoteke iz našega lokalnega računalnika v Colab Env. Prenesite nabore podatkov iz tukaj .
# Naložite datoteki houses_train.csv in house_test.csv v Google Colab# en za drugim.
od google. ET AL uvoz datoteke
datoteke. nalaganje ( )
Read_csv() je funkcija, ki se uporablja za nalaganje podatkov CSV v spremenljivko. Kot parameter vzame ime datoteke.
uvoz pande# Naložite houses_train.csv v spremenljivko train_data
vlak_podatki = pande. read_csv ( 'houses_train.csv' )
# Naložite house_test.csv v spremenljivko test_data
testni_podatki = pande. read_csv ( 'house_test.csv' )
# Shranite test_data v spremenljivko test_data1
testni_podatki1 = testni_podatki
Oglejmo si stolpce in število neničelnih zapisov v vsakem stolpcu. Za pridobitev teh informacij se uporablja Pandas.DataFrame.info().
tiskanje ( vlak_podatki. info ( ) )tiskanje ( testni_podatki1. info ( ) )
Izhod:
2. Predhodna obdelava podatkov
V obeh naborih podatkov stolpec »lot_size« vsebuje vrednosti s kvadratnimi čevlji in akri (varianco boste našli tako, da si ogledate vrstice v stolpcu »lot_size_unit's«). Toda format mora biti v sqft. Torej moramo pretvoriti vrednosti v stolpcu »lot_size« iz acre v sqft. Podobno je treba to narediti za »test_data1«.
DataFrame.loc[] se tukaj uporablja za iskanje »lot_size_units« z »acre« in množenje vrednosti, ki je prisotna v »lot_size«, s 43560.
# Pretvorite vrednosti lot_size acre v kvadratne čevlje v train_datavlak_podatki. mesto [ ( vlak_podatki [ 'lot_size_units' ] == 'acre' ) , 'velikost zemljišča' ] = vlak_podatki [ 'velikost zemljišča' ] * 43560
# Pretvorite vrednosti lot_size acre v kvadratne čevlje v test_data1
testni_podatki1. mesto [ ( testni_podatki1 [ 'lot_size_units' ] == 'acre' ) , 'velikost zemljišča' ] = testni_podatki1 [ 'velikost zemljišča' ] * 43560
tiskanje ( vlak_podatki. glavo ( ) )
tiskanje ( testni_podatki1. glavo ( ) )
Izhod:
Zdaj boste videli, da so vse vrednosti v stolpcu »lot_size« vrednosti v kvadratnih metrih.
V tem stolpcu vidite nekaj manjkajočih vrednosti. Zamenjajmo vrednosti NaN, ki so prisotne v stolpcih, s srednjo vrednostjo istega stolpca v obeh nizih podatkov.
DataFrame['column_name'].fillna() se uporablja za zapolnitev manjkajočih vrednosti s povprečjem z uporabo funkcije mean(). DataFrame['ime_stolpca'].mean() se kot parameter posreduje funkciji finna(). Prikažimo povprečje in zdaj poglejmo štetje:
# Izpolnite manjkajoče vrednosti v stolpcu lot_size s povprečjem obstoječih vrednostivlak_podatki [ 'velikost zemljišča' ] = vlak_podatki [ 'velikost zemljišča' ] . čutiti ( vlak_podatki [ 'velikost zemljišča' ] . pomeni ( ) )
# Prikaži povprečje
tiskanje ( 'Podatki o vlaku Srednja vrednost: ' , vlak_podatki [ 'velikost zemljišča' ] . pomeni ( ) )
tiskanje ( samo ( vlak_podatki [ 'velikost zemljišča' ] ) )
# Izpolnite manjkajoče vrednosti v stolpcu lot_size s povprečjem obstoječih vrednosti
testni_podatki1 [ 'velikost zemljišča' ] = testni_podatki1 [ 'velikost zemljišča' ] . čutiti ( testni_podatki1 [ 'velikost zemljišča' ] . pomeni ( ) )
# Prikaži povprečje
tiskanje ( 'Srednja vrednost testnih podatkov: ' , testni_podatki1 [ 'velikost zemljišča' ] . pomeni ( ) )
tiskanje ( samo ( testni_podatki1 [ 'velikost zemljišča' ] ) )
Izhod:
Manjkajoče vrednosti, ki so prisotne v stolpcu »lot_size«, Train Dataset, so nadomeščene s srednjo vrednostjo 18789,95194, manjkajoče vrednosti, ki so prisotne v stolpcu »lot_size« Test Dataset, pa so nadomeščene s srednjo vrednostjo 8961,0
3. Čiščenje podatkov
Med usposabljanjem modela je nekaj nepotrebnih atributov, ki niso potrebni za napovedovanje rezultata. V našem primeru obstajajo trije atributi, in sicer »lot_size_units«, »zip_code« in »size_units«, ki jih je treba odstraniti iz obeh naborov podatkov. Pandas.DataFrame.drop() se uporablja za odstranitev teh treh stolpcev iz obeh naborov podatkov.
vlak_podatki = vlak_podatki. padec ( [ 'lot_size_units' , 'Poštna številka' , 'size_units' ] , os = 1 )testni_podatki1 = testni_podatki1. padec ( [ 'lot_size_units' , 'Poštna številka' , 'size_units' ] , os = 1 )
tiskanje ( vlak_podatki. info ( ) )
tiskanje ( testni_podatki1. info ( ) )
Izhod:
Zdaj so nabori podatkov v dobrem stanju. Nepotrebni stolpci so odstranjeni in manjkajoče vrednosti ne obstajajo.
4. Vizualizacija podatkov
Ustvarimo histogram za stolpce podatkov o vlaku. Funkcija pandas.DataFrame.hist() se uporablja za ustvarjanje histogramov za vse atribute.
vlak_podatki. zgod ( velikost fige = ( 4 , 9 ) )Izhod:
Histogram je ustvarjen za stolpce za postelje, kopeli, velikost, velikost_lotja in cene za podatke Train.
Ustvarimo korelacijo za vsa polja med seboj. Modul Plotly.express se uporablja za risanje koreliranih vrednosti.
uvoz zapleteno. ekspresnokor = vlak_podatki. kor ( )
# Narišite korelirane podatke
pogled_sl = zapleteno. ekspresno . imshow ( kor , text_auto = Prav )
# Zaslon
pogled_sl. pokazati ( )
Izhod:
- Postelje so 0,2935 v korelaciji s ceno, -0,059 v korelaciji z lot_size, 0,77 v korelaciji z velikostjo in 0,65 v korelaciji s kopelmi.
- Kopeli so 0,3173 v korelaciji s ceno, -0,054 v korelaciji z lot_size, 0,667 v korelaciji s kopelmi in 0,771 v korelaciji s posteljami.
- Velikost je 0,444 v korelaciji s ceno, -0,044 v korelaciji z lot_size, 0,667 v korelaciji z velikostjo in 0,652 v korelaciji s posteljami.
5. Priprava modela
Ceno moramo nastaviti kot ciljno, tako da jo odstranimo iz train_data. Prepričajte se, da morajo biti atributi, ki so prisotni v podatkih usposabljanja in testiranja, v tej fazi enaki.
tarča = vlak_podatki [ 'price' ]vlak_podatki = vlak_podatki. padec ( [ 'price' ] , os = 1 )
tiskanje ( vlak_podatki. info ( ) )
tiskanje ( testni_podatki1. info ( ) )
Izhod:
Zdaj obstajajo štirje neodvisni atributi (postelje, kopeli, velikost in velikost_parcele), cena pa je odvisni atribut, ki je odvisen od teh štirih atributov.
6. Usposabljanje modela
Najprej uporabimo algoritem RandomForestRegressor. Uvozite ga iz paketa “sklearn.ensemble”. To je tehnika združevanja.
- Ustvarite model iz RandomForestRegressor(). Temu modelu ne posredujemo nobenega parametra. Torej je število odločitvenih dreves privzeto 100.
- Za prilagajanje modela uporabite metodo fit(). Zahteva dva parametra. Prvi parameter so odvisni atributi, drugi parameter pa oznaka/cilj razreda.
- Za ogled natančnosti modela uporabite metodo score(). Prav tako uporablja enake parametre, podobne metodi fit().
# Določite model
model1 = RandomForestRegressor ( )
# Prilagodite model
model1. fit ( vlak_podatki , tarča )
# Natančnost modela
tiskanje ( model1. rezultat ( vlak_podatki , tarča ) * 100 )
Izhod:
86.084008894190337. Preizkusite model in shranite rezultate
To je zadnji korak, kjer moramo predvideti rezultat in ga shraniti.
- Metoda predict() se uporablja za predvidevanje testnih podatkov. Uporablja se z modelom in zajema ugnezdeni seznam vrednosti/DataFrame.
- Za shranjevanje rezultatov v datoteko CSV uporabite metodo to_csv().
- Prenesite datoteko iz okolja Python (Google Colab).
testni_podatki [ 'Cena' ] = model1. napovedati ( testni_podatki1 )
# Shranite test_data v test_results.csv
testni_podatki. to_csv ( 'test_results.csv' )
# Prenesite to datoteko iz Colaba
datoteke. Prenesi ( 'test_results.csv' )
Izhod:
Pokažimo 20 zapisov od 505 zapisov. Vidite lahko, da stolpec Cena vsebuje predvidene vrednosti za vsako hišo.
Drugi modeli
Predvidimo hiše z uporabo DecisionTreeRegressor. Uvozite ga lahko iz modula “sklearn.tree”.
od naučil drevo uvoz DecisionTreeRegressor# Določite model
model2 = DecisionTreeRegressor ( )
# Prilagodite model
model2. fit ( vlak_podatki , tarča )
# Natančnost modela
tiskanje ( model2. rezultat ( vlak_podatki , tarča ) * 100 )
# Napovedujte testne_podatke1 z modelom1.
testni_podatki [ 'Cena' ] = model2. napovedati ( testni_podatki1 )
# Shranite test_data v test_results.csv
testni_podatki. to_csv ( 'test_results.csv' )
# Prenesite to datoteko iz Colaba
datoteke. Prenesi ( 'test_results.csv' )
Izhod:
99.94183165335028Predviden rezultat si lahko ogledate tukaj:
Napovejmo hiše z uporabo LinearrEgression. Uvozite model iz modula “sklearn.linear_model”.
od naučil linearni_model uvoz Linearna regresija# Določite model
model3 = Linearna regresija ( )
# Prilagodite model
model3. fit ( vlak_podatki , tarča )
# Napovedujte testne_podatke1 z modelom1.
testni_podatki [ 'Cena' ] = model3. napovedati ( testni_podatki1 )
# Shranite test_data v test_results.csv
testni_podatki. to_csv ( 'test_results.csv' )
# Prenesite to datoteko iz Colaba
datoteke. Prenesi ( 'test_results.csv' )
Predvideni rezultat si lahko ogledate tukaj:
Zaključek
Zdaj lahko napoveste ceno svoje hiše na podlagi atributov, kot so število sob, površina vašega zemljišča itd. V tem vodniku smo upoštevali resnične podatke o hišah iz Seattla v Washingtonu. Z uporabo regresijskih tehnik, kot so linearna regresija, drevo odločitev in naključni gozd, smo predvideli ceno 505 hiš. Vsi koraki (predhodna obdelava podatkov, čiščenje podatkov in vizualizacija podatkov), ki jih je treba opraviti pred usposabljanjem modela, so razloženi korak za korakom z delčki kode in rezultati.