데이터 분석/머신러닝

[빅데이터 AI 머신러닝] 선형 회귀, 로지스틱 회귀 분석 예제 코드 & 설명

개발자 소신 2020. 12. 5. 13:50
반응형

안녕하세요 ! 소신입니다.

 

 

사실 모델링 코드는 정말 간단합니다.

데이터를 수집하고 전처리하는 과정이 귀찮을 뿐!

 


ㅁ 선형 회귀분석

 

 

변수사이의 관계를 선형으로 나타내는 것을 선형 회귀분석이라 합니다.


전체 코드

from sklearn.linear_model import LinearRegression # 선형회귀
from sklearn.linear_model import Lasso, Ridge, ElasticNet # 규제항 조절가능한 선형회귀
import numpy as np # 데이터 셋을 다루기 위한 패키지
from sklearn.datasets import load_boston # 보스턴 집값 데이터

# 시각화 패키지
import seaborn as sns
import matplotlib.pyplot as plt

boston_data = load_boston()
boston_data.keys()

# 506행 13개의 feature (독립변수), 506개의 집값 데이터 (종속변수)
print(boston_data.data.shape, boston_data.target.shape)
print(boston_data.feature_names)

# 데이터 타입 = numpy 배열
print(type(boston_data.data), type(boston_data.target))
print(boston_data.data[:2], boston_data.target[:2])

# 학습
lr = LinearRegression()
lr.fit(boston_data.data, boston_data.target)

# 예측
pred = lr.predict(boston_data.data)

# R^2 Score
print('정확도 : %f'%lr.score(boston_data.data, boston_data.target))

plt.figure(figsize=(12,4))
sns.scatterplot(range(len(pred)), pred, label='predict')
sns.scatterplot(range(len(pred)), boston_data.target, label='real')
plt.plot()

패키지 Import


임시 데이터 로드

보스턴의 집 값 데이터를 가져와서 회귀분석을 진행했습니다.

사이킷런(sklearn)에서 임시 데이터셋은 dictionary로 이루어져있고

data : 독립변수 데이터

target : 종속변수 데이터

feature_names : 독립 변수의 이름

 

sklearn 모델을 학습 시킬때는 데이터 타입을 numpy 배열로 맞춰주는게 제일 좋습니다.

type : numpy.ndadrray


모델링, 학습

1. 우선 모델 객체를 생성해줍니다.

2. fit으로 데이터를 학습시키고,

3. predict 함수로 예측 결과 저장

 

R^2 스코어는 74%가 나왔습니다.


시각화

이를 시각화해보면 다음과 같습니다.

 

 

선형회귀에서 규체항을 적용하는 모델 (Ridge, Lasso, ElasticNet은 Github에 가면 확인하실 수 있습니다.)


ㅁ 로지스틱 회귀분석

 

 

로지스틱 회귀분석은 변수를 선(면)으로 나누어 어느 한 집단으로 분류하는 분석합니다.

 


전체 코드

from sklearn.linear_model import LogisticRegression
import numpy as np # 데이터 셋을 다루기 위한 패키지
from sklearn.datasets import load_iris # 붓꽃 데이터

import pandas as pd # 시각화를 위한 데이터 패키지

# 시각화 패키지
import seaborn as sns
import matplotlib.pyplot as plt

iris_data = load_iris()
iris_data.keys()

# 150개의 데이터, 4개의 feature (독립변수), 150개의 붓꽃 종(species) 데이터 (종속변수)
print(iris_data.data.shape, iris_data.target.shape)
print(iris_data.feature_names)

# 데이터 타입 = numpy 배열
print(type(iris_data.data), type(iris_data.target))
print(iris_data.data[:2], iris_data.target[:2])

Logitr = LogisticRegression()
Logitr.fit(iris_data.data, iris_data.target)
pred = Logitr.predict(iris_data.data)

df_iris = pd.DataFrame(iris_data.data, columns=iris_data.feature_names)

df_iris['target'] = iris_data.target
df_iris['predict'] = pred

print(df_iris.head())

plt.figure(figsize=(12,8))
plt.subplot(2,1,1)
sns.scatterplot(data = df_iris, x = 'sepal length (cm)', y = 'sepal width (cm)', hue='target')
plt.subplot(2,1,2)
sns.scatterplot(data = df_iris, x = 'sepal length (cm)', y = 'sepal width (cm)', hue='predict')
plt.plot()

패키지 Import


임시 데이터 로드

이번엔 붓꽃의 종(Species)를 분류하는 iris 데이터를 가져왔습니다.


모델링, 학습


시각화

 

예제 코드에 대한 파일은 깃허브에서 확인하실 수 있습니다.

 

github.com/svstar94/SDAU/blob/master/Regression.ipynb

 

svstar94/SDAU

JJ Data Analysis Notes in Github (Package). Contribute to svstar94/SDAU development by creating an account on GitHub.

github.com

 

감사합니당

반응형