상세 컨텐츠

본문 제목

[개미의 걸음 scikit-learn 4차시] Classification① 회귀분석 - 선형(with iris 데이터)

Python

by IT개미 데이터 2021. 2. 11. 07:07

본문

728x90

들어가기전...

2021/02/02 - [Python] - [개미의 걸음 scikit-learn 2차시] Classification(분류)의 이해

2021/02/03 - [Python] - [개미의 걸음 scikit-learn 3차시] Classification① 회귀분석

 

 

선형회귀분석

필요한 모듈 import

## pandas 모듈
import pandas as pd

## iris 데이터 모듈
from sklearn.datasets import load_iris

## train과 test set 구분 모듈
from sklearn.model_selection import train_test_split

## 선형회귀분석 모듈
from sklearn.linear_model import LinearRegression

## 데이터 표준화 모듈
from sklearn.preprocessing import StandardScaler

## MSE(평균제곱오차) 
from sklearn.metrics import mean_squared_error

## 정확도 예측 모듈(연속적인 데이터에서 사용 안함)
## from sklearn.metrics import accuracy_score 

 

데이터 셋 train/test 구분하기

## train, test 데이터를 각각 8:2로 구분
x_train, x_test, y_train, y_test = train_test_split(iris_data, iris_label, test_size=0.2, random_state=1)

## 데이터 표준화
sc = StandardScaler()
sc.fit(x_train)
x_train_std = sc.transform(x_train)
x_test_std = sc.transform(x_test)
  • test_size는 0~1사이의 값을 가지며 전체 데이터(1)에서 test 데이터의 비중을 의미
        → 기본값[default 값] : 0.25
  • random_state는 숫자를 임의로 생성할 때 재현가능하도록 난수의 초기값을 입력 [난수 생성기]
        → 기본값은 numpy.random에서 제공하는 random number generator가 사용됨
        → random_state에 지정하는 정수값에 따라 분석 결과가 다르게 나옴
        → 생략할 경우, 실행할 때마다 다른 결과가 나옴 [test/train 데이터가 계속 달라지므로]
        → 값을 지정할 경우, 여러번 다시 실행하여도 동일한 결과가 나옴
        → 쉽게 말해서 재현 가능하도록 고정되는 숫자를 지정하는 것!!!
               ex> random_state=3   : 3개의 숫자는 무조건 고정
                                              3개를 뽑으면 항상 같은 수가 나오지만 5개를 뽑으면 3개만 같고 2개를 계속 변화

 

linear model 만들기

linear_model = LinearRegression()
linear_model.fit(x_train_std, y_train)

 

coefficent(기울기), intercept(절편) 구하기

print('linear_model.coef : ' , linear_model.coef_ , 'linear_model.intercept : ' , linear_model.intercept_)

 

예측 데이터 만들기

y_pred = linear_model.predict(x_test_std)

 

MSE(잔차) 구하기[작을수록 모델의 예측력이 높음!!]

mse=mean_squared_error(y_true = y_test, y_pred = y_pred)
print('mse :', mse)

 

상관계수 비교하기[클수록 모델의 예측력이 높음!!]

## numpy.ndarray 타입을 pandas.core.series.Series 타입으로 변경
y_test = pd.Series(y_test)
y_pred = pd.Series(y_pred)
print( type(y_test), type(y_pred) )

## y_test와 y_pred 상관계수 분석
cor = y_test.corr(y_pred)
cor

 

 

+ 데이터 프레임으로 만들기

## pandas를 이용해 데이터 프레임 만들기
df = pd.DataFrame({'y_pred':y_pred, 'y_test':y_test})
df

## 데이터 프레임 상관계수 분석
cor = df['y_pred'].corr(df['y_test'])
cor

 

 

 

728x90

관련글 더보기

댓글 영역