
na moim poprzednim blogu omówiłem podstawy regresji liniowej i gradientowego opadania. Aby uzyskać praktyczną regresję liniową, weźmiemy oryginalny zestaw danych i zastosujemy pojęcia, których się nauczyliśmy.
weźmiemy zestaw danych mieszkaniowych, który zawiera informacje o różnych domach w Bostonie. Dane te były pierwotnie częścią repozytorium UCI Machine Learning i zostały teraz usunięte. Możemy również uzyskać dostęp do tych danych z biblioteki scikit-learn. W tym zbiorze danych znajduje się 506 próbek i 13 zmiennych funkcji. Celem jest przewidywanie wartości cen domu przy użyciu danych funkcji.
więc zaczynajmy.
najpierw zaimportujemy wymagane biblioteki.
następnie załadujemy dane Obudowy z bibliotekiscikit-learn
I zrozumiemy je.
drukujemy wartośćboston_dataset
, aby zrozumieć, co ona zawiera. print(boston_dataset.keys())
podaje
dict_keys()
- dane: zawiera informacje dla różnych domów
- target: ceny domu
- feature_names: nazwy cech
- DESCR: opisuje zbiór danych
, aby dowiedzieć się więcej o cechach użyj boston_dataset.DESCR
opis wszystkich funkcji znajduje się poniżej:
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
ceny domu wskazane przez zmiennąMEDV
są naszą zmienną docelową, a pozostałe są zmiennymi funkcyjnymi, na podstawie których będziemy przewidywać wartość domu.
teraz załadujemy dane do ramki danych pandy za pomocąpd.DataFrame
. Następnie drukujemy 5 pierwszych wierszy danych używając head()

widzimy, że w danych brakuje wartości docelowej MEDV
. Tworzymy nową kolumnę wartości docelowych i dodajemy ją do ramki danych.
wstępne przetwarzanie danych
Po załadowaniu danych dobrą praktyką jest sprawdzenie, czy w danych nie ma żadnych brakujących wartości. Liczbę brakujących wartości dla każdej funkcji policzymy za pomocą isnull()
jednak w tym zbiorze danych nie ma brakujących wartości, jak pokazano poniżej.

analiza danych eksploracyjnych
analiza danych eksploracyjnych jest bardzo ważnym krokiem przed szkoleniem modelu. W tej sekcji użyjemy niektórych wizualizacji, aby zrozumieć związek zmiennej docelowej z innymi funkcjami.
najpierw narysujmy rozkład zmiennej docelowej MEDV
. Użyjemy funkcjidistplot
z bibliotekiseaborn
.

widzimy, że wartościMEDV
są zwykle dystrybuowane z kilkoma wartościami odstającymi.
następnie tworzymy macierz korelacji, która mierzy liniowe zależności między zmiennymi. Matrycę korelacji można utworzyć za pomocą funkcjicorr
z biblioteki ramek danych pandy. Użyjemy funkcji heatmap
z biblioteki seaborn do wykreślenia macierzy korelacji.
współczynnik korelacji wynosi od -1 do 1. Jeśli wartość jest bliska 1, oznacza to, że istnieje silna dodatnia korelacja między tymi dwiema zmiennymi. Gdy jest ona bliska -1, zmienne mają silną korelację ujemną.
uwagi:
- aby dopasować model regresji liniowej, wybieramy te cechy, które mają wysoką korelację z naszą zmienną docelową
MEDV
. Patrząc na matrycę korelacji możemy zauważyć, żeRM
ma silną dodatnią korelację z (0.7) gdzieLSTAT
ma wysoką ujemną korelację zMEDV
(-0.74). - ważnym punktem w wyborze funkcji dla modelu regresji liniowej jest sprawdzenie multi-co-liniowości. Cechy
RAD
TAX
mają korelację 0.91. Te pary cech są ze sobą silnie skorelowane. Nie powinniśmy wybierać obu tych funkcji razem do treningu modelu. Sprawdź to dla wyjaśnienia. To samo dotyczy funkcjiDIS
IAGE
, które mają korelację -0,75.
na podstawie powyższych obserwacji będziemyRM
ILSTAT
jako nasze funkcje. Korzystając z wykresu punktowego zobaczmy, jak te funkcje różnią się od MEDV
.
łączymy następnie dzielimy dane na zestawy treningowe i testowe. Trenujemy model z 80% próbek i testujemy z pozostałymi 20%. Robimy to, aby ocenić wydajność modelu na niewidocznych danych. Do podziału danych używamy funkcji używamy scikit-learn ’ s ocenimy nasz model za pomocą rmse i R2-score. warto zacząć od tego. W nadchodzących blogach przyjrzymy się sposobom na zwiększenie wydajności modelu. kompletny zeszyt Jupyter znajdziesz tutaj. w tej historii zastosowaliśmy koncepcje regresji liniowej na zestawie danych Boston housing. Polecam wypróbować również inne zbiory danych. oto kilka miejsc, w których możesz szukać danych Dziękujemy za przeczytanie!! w następnej części tej serii omówimy regresję Wielomianową. Obserwuj to miejsce, aby uzyskać więcej.uwagi:
przygotowanie danych do szkolenia modelu
LSTAT
IRM
używającnp.c_
dostarczanych przez Bibliotekę numpy.podział danych na zestawy treningowe i testowe
train_test_split
dostarczanej przez Bibliotekę scikit-learn. Na koniec drukujemy rozmiary naszego zestawu treningowego i testowego, aby sprawdzić, czy podział nastąpił prawidłowo.(404, 2)
(102, 2)
(404,)
(102,)szkolenie i testowanie modelu
LinearRegression
do szkolenia naszego modelu zarówno na zestawach treningowych, jak i testowych.ocena modelu
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.6628996975186952wnioski