본문 바로가기
Machine learning/Machine learning 강의

머신 러닝 다중 선형 회귀(Multiple Linear Regression) #1 -다중 선형 회귀를 이용한 집값 예측하기

by grey-hat hacker 2021. 2. 5.
728x90

여러 입력 변수를 이용하여 선형 회귀를 하면 그것이 바로 다중 선형 회귀!! 

 - 다중 선회 회귀는 시각적으로 표현하기가 힘들다. 

 tip. 입력 변수 = 속성(feature)

 

 - 각 속성 항목들의 표현 방식 정리 

- 다중 선형 회귀에서의 가설 함수 

 

- 다중 선형 회귀 데이터 준비하기  

from sklearn.datasets import load_boston
import pandas as pd

boston_dataset = load_boston()

print(boston_dataset.DESCR)
  
    :Attribute Information (in order):
        - 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 oxides 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 centres
        - 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)^2 where Bk is the proportion of blacks by town
        - LSTAT    % lower status of the population
        - MEDV     Median value of owner-occupied homes in $1000  #목표변수
        
boston_dataset.feature_names
   array(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD',
          'TAX', 'PTRATIO', 'B', 'LSTAT'], dtype='<U7')
          
boston_dataset.data
   array([[6.3200e-03, 1.8000e+01, 2.3100e+00, ..., 1.5300e+01, 3.9690e+02,
        4.9800e+00],
       [2.7310e-02, 0.0000e+00, 7.0700e+00, ..., 1.7800e+01, 3.9690e+02,
        9.1400e+00],
       [2.7290e-02, 0.0000e+00, 7.0700e+00, ..., 1.7800e+01, 3.9283e+02,
        4.0300e+00],
        
X = pd.DataFrame(boston_dataset.data, columns=boston_dataset.feature_names)
X
CRIM	ZN	INDUS	CHAS	NOX	RM	AGE	DIS	RAD	TAX	PTRATIO	B	LSTAT
0	0.00632	18.0	2.31	0.0	0.538	6.575	65.2	4.0900	1.0	296.0	15.3	396.90	4.98
1	0.02731	0.0	7.07	0.0	0.469	6.421	78.9	4.9671	2.0	242.0	17.8	396.90	9.14
2	0.02729	0.0	7.07	0.0	0.469	7.185	61.1	4.9671	2.0	242.0	17.8	392.83	4.03
3	0.03237	0.0	2.18	0.0	0.458	6.998	45.8	6.0622	3.0	222.0	18.7	394.63	2.94
4	0.06905	0.0	2.18	0.0	0.458	7.147	54.2	6.0622	3.0	222.0	18.7	396.90	5.33

boston_dataset.target #목표 변수

y= pd.DataFrame(boston_dataset.target, columns=['MEDV'])
y
	MEDV
0	24.0
1	21.6
2	34.7
3	33.4
4	36.2
...	...
501	22.4
502	20.6
503	23.9
504	22.0
505	11.9

- 다중 선형 회귀를 이용한 집값 예측하기 

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split #데이터를 트레이닝,테스트 셋 나누는 것 
from sklearn.linear_model import LinearRegression  #선형회기를 하기 위한 
from sklearn.metrics import mean_squared_error #모델을 평가하기 위해 사용하는 평균 제곱 오차 

import pandas as pd

boston_dataset = load_boston()
X = pd.DataFrame(boston_dataset.data, columns=boston_dataset.feature_names)
y= pd.DataFrame(boston_dataset.target, columns=['MEDV'])

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=5)
model = LinearRegression()

model.fit(X_train, y_train)
model.coef_  #이제 학습된 결과를 보고 싶을 때  각각  θ1, θ2, θ3 나타낸다. 
model.intercept_ #θ0을 나타낸다. , 손실을 최대한 적게하는 θ 값들

y_test_prediction = model.predict(X_test)
y_test_prediction #예측 값들 

mean_squared_error(y_test, y_test_prediction)  ** 0.5
#예측값과 실제 y값과 비교 평균제곱근 오차를 구하는 공식 #약 4천5백 달라의 오차
4.5682920423031765

- scikit-learn으로 당뇨 수치 예측하기

# 필요한 라이브러리 import
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

import pandas as pd  

# 당뇨병 데이터 갖고 오기
diabetes_dataset = datasets.load_diabetes()

# 입력 변수를 사용하기 편하게 pandas dataframe으로 변환
X = pd.DataFrame(diabetes_dataset.data, columns=diabetes_dataset.feature_names)

# 목표 변수를 사용하기 편하게 pandas dataframe으로 변환
y = pd.DataFrame(diabetes_dataset.target, columns=['diabetes'])

# train_test_split를 사용해서 주어진 데이터를 학습, 테스트 데이터로 나눈다
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state=5)

linear_regression_model = LinearRegression()  # 선형 회귀 모델을 가지고 오고 
linear_regression_model.fit(X_train, y_train)  # 학습 데이터를 이용해서 모델을 학습 시킨다

y_test_predict = linear_regression_model.predict(X_test)  # 학습시킨 모델로 예측

# 평균 제곱 오차의 루트를 통해서 테스트 데이터에서의 모델 성능 판단
mse = mean_squared_error(y_test, y_test_predict)

mse ** 0.5

 코딩실습[코드잇] 파이썬 머신 러닝 강의를 들으면 공부내용을 적어봤습니다.

728x90
반응형

댓글