from sklearn.datasets import load_boston
from sklearn.preprocessing import PolynomialFeatures #다항속성을 만들어주는 틀
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()
boston_dataset.data.shape
(506, 13)
boston_dataset.feature_names
array(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD',
'TAX', 'PTRATIO', 'B', 'LSTAT'], dtype='<U7')
polynomial_transformer = PolynomialFeatures(2)
polynomial_data = polynomial_transformer.fit_transform(boston_dataset.data)
polynomial_data.shape
(506, 105)
polynomial_feature_names = polynomial_transformer.get_feature_names(boston_dataset.feature_names)
polynomial_feature_names
['1',
'CRIM',
'ZN',
'INDUS',
'CHAS',
'NOX',
'RM',
'AGE',
'DIS',
'RAD',
'TAX',
'PTRATIO',
'B',
'LSTAT',
'CRIM^2',
'CRIM ZN',
'CRIM INDUS',
x = pd.DataFrame(polynomial_data, columns = polynomial_feature_names)
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
... ...
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) #트레이닝셋의 목표 변수
y_test_prediction = model.predict(x_test)
mean_squared_error(y_test, y_test_prediction) ** 0.5
>>> boston_dataset.feature_names
>>> array(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD',
'TAX', 'PTRATIO', 'B', 'LSTAT'], dtype='<U7')
-> 원래였으면 해당 내용을 바로 사용했을건데 다항 회귀를 하는것이기에 가상의 열 몇개를 추가하고
데이터프레임에 넣어준다.
-> from sklearn.preprocessing import PolynomialFeatures #다항속성을 만들어주는 틀
-> PolynomialFeatures(2) 2차 함수를 의미
-> transform을 하고 나면 polynomial_data.shape (506, 13) -> (506, 105) 열이 늘어난것을 알 수 있다.
-> 확인해보면 polynomial_feature_names 가능한 모든 2차 조합이 출력되는 것을 알 수 있다.
-> 이제 해당 내용으로 데이터프레임을 만든다면!
-> x = pd.DataFrame(polynomial_data, columns = polynomial_feature_names)
-> 다항 회귀를 위한 데이가 준비 되었다.
-> 그럼 이제 여기서부터는 다중선형회귀와 방법이 똑같다!
-> input을 x 에 저장해 두었다면 output은 pd.DataFrame(boston_dataset.target, columns=['MEDV'])
-> 그리고 학습을 했다면 학습 결과를 보고싶다면 model.coef_ , model.intercept_
-> 이제 만든 모델의 성능을 확인해보자! y_test_prediction = model.predict(x_test)
-> 그리고 평균제곱근 오차를 통해서 실제 output과 얼마나 괴리가 있는지 확인!
-> mean_squared_error(y_test, y_test_prediction) ** 0.5
-> 3.1965276513355376
이 모델로 집 가격을 예측하면 오차가 약 3200 달러 정도 된다는 것이다.
----
그럼 실습으로 다항 회귀로 당뇨병 예측하는 모델 학습을 해보았다!!
# 필요한 라이브러리 import
from sklearn import datasets
from sklearn.preprocessing import PolynomialFeatures
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()
polynomial_transformer = PolynomialFeatures(2)
polynomial_data = polynomial_transformer.fit_transform(diabetes_dataset.data)
polynomial_feature_names = polynomial_transformer.get_feature_names(diabetes_dataset.feature_names)
X = pd.DataFrame(polynomial_data, columns = polynomial_feature_names)
# 목표 변수
y = pd.DataFrame(diabetes_dataset.target, columns=['diabetes'])
# 코드를 쓰세요
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)
y_test_predict = model.predict(X_test)
mse = mean_squared_error(y_test, y_test_predict)
mse ** 0.5
코딩실습[코드잇] 파이썬 머신 러닝 강의를 들으면 공부내용을 적어봤습니다.
'Machine learning > Machine learning 강의' 카테고리의 다른 글
머신 러닝 로지스틱 회귀(Logistic Regrssion)#2 - 손실 함수, 로그 손실 (0) | 2021.02.09 |
---|---|
머신 러닝 로지스틱 회귀(Logistic Regrssion)#1 - 로지스틱 회귀란? (0) | 2021.02.08 |
머신 러닝 다항 회귀(Polynomial Regression) #1 - 다항 회귀 (0) | 2021.02.08 |
머신 러닝 다중 선형 회귀(Multiple Linear Regression) #1 -다중 선형 회귀를 이용한 집값 예측하기 (0) | 2021.02.05 |
머신 러닝 선형 회귀 (Linear Regression) #3 - scikit-learn 을 이용해 집 값 예측 프로그램 구현하기 (0) | 2021.02.02 |
댓글