
edellisessä blogissani käsittelin lineaarisen regression ja gradienttilaskun perusteita. Saada käytännön lineaarinen regressio otamme alkuperäisen aineiston ja soveltaa käsitteitä, jotka olemme oppineet.
otamme Asuntoaineiston, joka sisältää tietoa Bostonin eri taloista. Nämä tiedot olivat alun perin osa UCI Machine Learning Repository ja on poistettu nyt. Voimme käyttää näitä tietoja myös scikit-learn-kirjastosta. Aineistossa on 506 näytettä ja 13 ominaisuusmuuttujaa. Tavoitteena on ennustaa talon hintojen arvo annettujen ominaisuuksien avulla.
joten aloitetaan.
ensin tuomme tarvittavat kirjastot.
seuraavaksi Ladataan scikit-learn
kirjasto ja ymmärretään se.
tulostamme boston_dataset
ymmärtääksemme, mitä se sisältää. print(boston_dataset.keys())
antaa
dict_keys()
- tiedot: sisältää eri talojen tiedot
- target: talon hinnat
- feature_nimet: ominaisuuksien nimet
- DESCR: kuvaa aineistoa
tietää enemmän ominaisuudet Käytä boston_dataset.DESCR
kaikkien ominaisuuksien kuvaus on alla:
CRIM: Per capita crime rate by town
ZN: Proportion of residential land zoned for lots over 25,000 sq. ft
INDUS: Proportion of non-retail business acres per town
CHAS: Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)
NOX: Nitric oxide concentration (parts per 10 million)
RM: Average number of rooms per dwelling
AGE: Proportion of owner-occupied units built prior to 1940
DIS: Weighted distances to five Boston employment centers
RAD: Index of accessibility to radial highways
TAX: Full-value property tax rate per $10,000
PTRATIO: Pupil-teacher ratio by town
B: 1000(Bk — 0.63)², where Bk is the proportion of by town
LSTAT: Percentage of lower status of the population
MEDV: Median value of owner-occupied homes in $1000s
muuttujan MEDV
osoittamat talon hinnat ovat tavoitemuuttujamme ja loput ovat ominaisuusmuuttujia, joiden perusteella ennustamme talon arvon.
nyt tiedot ladataan pandojen datakehykseen käyttäen pd.DataFrame
. Tämän jälkeen tulostamme tietojen ensimmäiset 5 riviä käyttäen head()

voidaan nähdä, että tavoitearvo MEDV
puuttuu tiedoista. Luomme uuden sarakkeen tavoitearvoja ja lisäämme sen datakehykseen.
tietojen esikäsittely
tietojen lataamisen jälkeen on hyvä käytäntö katsoa, onko aineistosta puuttuvia arvoja. Laskemme kunkin ominaisuuden puuttuvien arvojen määrän käyttämällä isnull()
tästä aineistosta ei kuitenkaan puutu arvoja kuten alla on esitetty.

experatory data analysis
experatory data analysis on erittäin tärkeä vaihe ennen mallin kouluttamista. Tässä osiossa käytämme joitakin visualisointeja ymmärtääksemme kohdemuuttujan suhdetta muihin ominaisuuksiin.
piirretään ensin kohdemuuttujan jakauma MEDV
. Käytämme distplot
funktiota seaborn
kirjastosta.

näemme, ettäMEDV
arvot jakautuvat normaalisti muutamien poikkeamien kanssa.
seuraavaksi luodaan korrelaatiomatriisi, joka mittaa muuttujien välisiä lineaarisia suhteita. Korrelaatiomatriisi voidaan muodostaa käyttämällä corr
funktiota pandas-dataframe-kirjastosta. Korrelaatiomatriisin kuvaamiseen käytetään heatmap
funktiota seabornin kirjastosta.

korrelaatiokerroin vaihtelee -1: stä 1: een. Jos arvo on lähellä arvoa 1, se tarkoittaa, että kahden muuttujan välillä on vahva positiivinen korrelaatio. Kun se on lähellä lukua -1, muuttujilla on vahva negatiivinen korrelaatio.
havainnot:
- soveltaaksemme lineaarista regressiomallia valitsemme ne ominaisuudet, joilla on suuri korrelaatio kohdemuuttujamme
MEDV
. Korrelaatiomatriisia katsomalla voidaan todeta, ettäRM
on vahva positiivinen korrelaatioMEDV
(0, 7) missäLSTAT
on suuri negatiivinen korrelaatioMEDV
(-0, 74. - tärkeä seikka lineaarisen regressiomallin ominaisuuksien valinnassa on monikokolineaarisuuden tarkistaminen. Ominaisuuksien
RAD
TAX
korrelaatio on 0,91. Nämä ominaisuusparit korreloivat vahvasti keskenään. Meidän ei pitäisi valita molempia ominaisuuksia yhdessä mallin koulutukseen. Katso selitystä tästä. Sama koskee ominaisuuksiaDIS
jaAGE
, joiden korrelaatio on -0,75.
edellä esitettyjen havaintojen perusteella otamme RM
ja LSTAT
ominaisuuksiksemme. Scatter-kuviota käyttäen katsotaan, miten nämä ominaisuudet vaihtelevat MEDV
.

observations:
- hinnat nousevat, kun RM: n arvo nousee lineaarisesti. Poikkeavia tekijöitä on vähän, ja tietojen yläraja näyttää olevan 50.
- hinnoilla on taipumus laskea LSTAT-arvon nousun myötä. Vaikka se ei näytä noudattavan aivan lineaarista linjaa.
aineiston valmistelu mallin koulutusta varten
yhdistämme LSTAT
ja RM
sarakkeet käyttäen np.c_
numpy-kirjaston toimittamia.
tietojen jakaminen koulutus-ja testisarjoihin
seuraavaksi jaetaan tiedot koulutus-ja testisarjoihin. Koulutamme mallia 80 prosentilla näytteistä ja testaamme loput 20 prosentilla. Teemme tämän arvioidaksemme mallin suorituskykyä näkymättömällä datalla. Tietojen jakamiseen käytämme train_test_split
funktiota, jonka tarjoaa scikit-learn library. Lopuksi tulostamme koulutus-ja testisarjamme koot varmistaaksemme, onko halkaisu tapahtunut oikein.
(404, 2)
(102, 2)
(404,)
(102,)
mallin harjoittelu ja testaus
käytämme scikit-learnin LinearRegression
mallimme kouluttamiseen sekä koulutus-että testisarjoissa.
mallin arviointi
arvioimme malliamme rmse: n ja R2-Scoren avulla.
The model performance for training set
--------------------------------------
RMSE is 5.6371293350711955
R2 score is 0.6300745149331701 The model performance for testing set
--------------------------------------
RMSE is 5.137400784702911
R2 score is 0.6628996975186952
tästä on hyvä aloittaa. Tulevissa blogeissa pohditaan keinoja mallin suorituskyvyn lisäämiseksi.
koko Jupyterin muistikirja löytyy täältä.
johtopäätös
tässä jutussa sovellimme lineaarisen regression käsitteitä Bostonin asuntoaineistoon. Suosittelen kokeilemaan myös muita aineistoja.
täältä voit etsiä tietoja
- https://www.kaggle.com/datasets
https://toolbox.google.com/datasetsearchhttps://archive.ics.uci.edu/ml/datasets.html
Kiitos lukemisesta!!
tämän sarjan seuraavassa osassa käsitellään polynomin regressiota. Katso tätä tilaa lisää.