Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

BASEMENT

Sklearn과 선형회귀분석 본문

Programming/Machine Learning

Sklearn과 선형회귀분석

2_34 2020. 9. 27. 16:40

1. Sklearn

머신러닝에 사용되는 지도/비지도 학습 알고리즘을 제공하는 파이썬 라이브러리

from sklearn import datasets				# 내장 데이터 사용
from sklearn.model_selection import train_test_split	# train, test 데이터 분할

from sklearn.linear_model import LinearRegression	# 선형 회귀분석
from sklearn.linear_model import LogisticRegression	# 로지스틱 회귀분석
from sklearn.naive_bayes import GaussianNB		# 나이브 베이즈
from sklearn import svm					# 서포트 벡터 머신
from sklearn import tree				# 의사결정나무
from sklearn.ensemble import RandomForestClassifier	# 랜덤포레스트

 

1) datasets & train_test_split

  • load_boston() : 보스턴 주택가격 데이터 (회귀)
  • load_breast_cancer() : 유방암 위스콘신 데이터 (분류-바이너리)
  • load_diabetes() : 당뇨병 데이터 (회귀)
  • load_digits(n_class) : 자릿수 데이터 (분류)
  • load_iris() : 홍채 데이터 (분류-다중등급)
  • load_linnerud() : linnerud 데이터 (다변량 회귀분석)
import sklearn.datasets
from sklearn.model_selection import train_test_split

iris = sklearn.datasets.load_iris()

X, y = iris['data'], iris['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.7, random_state=42) 

 

2) LinearRegression

model = LinearRegression()
model.fit(x_train, y_train)
model.predict(x_test)

model.coef_ : 추정된 모수 확인 (상수항 제외)

model.intercept_ : 추정된 상수항 확인

model.score(x_test, y_test) : 모형 성능 평가

 

3) LogisticRegression

from sklearn.linear_model import LogisticRegression

model = LogisticRegression(solver='lbfgs').fit(x_train, y_train)
model.predict(x_test)
model.score(x_test, y_test)	# 정확도 확인

4) 나이브 베이즈

from sklearn.naive_bayes import GaussianNB

gnb = GaussianNB()
gnb.fit(x_train, y_train)
gnb.predict(x_test)
gnb.score(x_test, y_test)

5) 의사결정나무

from sklearn import tree

model = tree.DecisionTreeClassifier()
model.fit(x_train, y_train)
model.predict(x_test)
model.socre(x_test, y_test)

6) 서포트벡터머신

from sklearn import svm

model = svm.SVC(kernel='linear')	# 선형=linear, 비선형=non_linear
model.fit(x_train, y_train)
model.predict(x_test)
model.score(x_test, y_test)

7) 랜덤포레스트

from sklearn.ensemble import RandomForestClassifier

model = RandomForestClassifier(max_dapth=2, random_state=0)
model.fit(x_train, y_train)
model.feature_importances_		# 변수 중요도 확인
model.predict(x_test)

 

2. 회귀분석

변수들 사이의 관계를 분석하는 방법

 

- X변수 : 독립변수, 예측변수

- Y변수 : 종속변수, 반응변수

 

- 선형회귀모델 : 예측변수와 반응변수 사이의 관계를 직선으로 표현함

- 직선식 : Y = a + bX

 

- 산포도 : 회귀분석을 할 때 두 변수 사이의 관련성을 대략적으로 알아보기 위함. 산포도를 통해 상관분석이나 회귀분석을 할 만한 자료인지 파악 가능

 

 

1. 단일선형회귀

 

종속변수 Y가 독립변수 X와 오차항에 어떻게 관련되어 있는가를 나타내는 방정식

오차항 : 독립변수 X의 값이 주어질 때 종속변수 Y의 실제값과 예측값의 차이를 나타낸 값

 

1) 회귀계수 추정 

- 최소자승법 : 잔차를 자승한값들의 합이 최소가 되도록 표본회귀식의 a와 b를 구하는 방법

 

2) 적합도 검증

표본자료를 사용하여 구한 표본회귀식이 종속변수의 값을 어느정도 정확하게 예측할 수 있는가의 정도를 검증함

- 추정의 표준오차 : 표본들의 실제값들이 표본회귀선 주위로 흩어진 변동을 측정

- 결정계수 : 0~1의 값. 결정계수 값이 1에 가까울수록 정확성이 높음

- 잔차 : 회귀분석 모델의 예착값과 실제값의 차이

- MSE (Mean Squared Error) : 평균 제곱 오차. 오자를 제곱한 값들의 평균

- RMSE (Root Mean Squared Error) : MSE에서 구한 값에 루트를 적용한 값

 

 

2. 다중선형회귀분석

 

두 개 이상의 독립변수들과 하나의 종속 변수의 관계를 분석

수집된 데이터에 가장 적절한 회귀 직선을 구함

 

1) 회귀계수 추정

최소 자승법 사용

 

2) 적합도 검증

- 추정의 표준오차

- 결정계수

- 조정결정계수 : 독립변수의 수가 증가하면 모형이 복잡해지고, 독립변수의 상관관계가 높아져서 독립변수들간 서로 영향을 미치는 다중공선성의 문제가 발생하기 때문에 상대적인 조정이 필요

 

3) 다중회귀분석 예시

from sklearn import linear_model
import numpy as np
import pandas as pd

data = {'x1':[13,18,17,20,22,21], 'x2':[9,7,17,11,8,10], 'y':[20,22,30,27,35,32]}

data = pd.DataFrame(data)
X = data[['x1','x2']]
y = data['y']

data
# 다중회귀분석

linear_regression = linear_model.LinearRegression()
linear_regression.fit(X=pd.DataFrame(X), y=y)
prediction = linear_regression.predict(X=pd.DataFrame(X))

print('Bintercept_: ', linear_regression.intercept_)
print('acoef_: ', linear_regression.coef_)
# 잔차

residuals = y - prediction
residuals.describe()
# MSE, RMSE

from sklearn.metrics import mean_squared_error
from math import sqrt

mse = mean_squared_error(y, prediction)
rmse = sqrt(mse)

print('score = ', linear_regression.score(X=pd.DataFrame(X), y=y))
print('mean_squared_error = ', mse)
print('RMSE = ', rmse)
# r_squared

SSE = (residuals**2).sum()
SST = ((y-y.mean())**2).sum()
R_squared = 1 - (SSE/SST)
print('R_squared: ', R_squared)

 

4) 다중회귀분석 예시 - load_boston 사용

from sklearn.linear_model import LinearRegression
from sklearn import datasets
import pandas as pd

boston_house_prices = datasets.load_boston()

print(boston_house_prices.keys())
print(boston_house_prices.data.shape)
print(boston_house_prices.feature_names)
X = pd.DataFrame(boston_house_prices.data)
X.tail()
# 컬럼명을 feature_names로 변경

X.columns = boston_house_prices.feature_names
X.tail()
# Price를 y변수로 추출함

X['Price'] = boston_house_prices.target
y = X.pop('Price')

print(y)
X.tail()
# LinearRegression

linear_regression = linear_model.LinearRegression()
linear_regression.fit(X=pd.DataFrame(X), y=y)
prediction = linear_regression.predict(X=pd.DataFrame(X))

print('a value: ', linear_regression.intercept_)
print('b value: ', linear_regression.coef_)
# 잔차

residuals = y - prediction
residuals.describe()
# R_squared

SSE = (residuals**2).sum()
SST = ((y-y.mean())**2).sum()
R_squared = 1 - (SSE/SST)
print('R_squared: ', R_squared)
# MSE & RMSE

mse = mean_squared_error(y, prediction)
print(mse)
rmse = sqrt(mse)
print(rmse)

print('score = ', linear_regression.score(X=pd.DataFrame(X), y=y))
print('mean_squared_error = ', mse)
print('RMSE = ', rmse)

 

'Programming > Machine Learning' 카테고리의 다른 글

KNN 알고리즘  (0) 2020.09.27
모델 성능 평가 척도, ROC 커브  (0) 2020.09.27
로지스틱 회귀분석  (0) 2020.09.27
데이터 전처리  (0) 2020.09.27
머신러닝 개요  (0) 2020.08.16
Comments