Day72

김재현·2023년 9월 4일

JUPYTER/DL/ML

목록 보기
45/73

분석순서

데이터 형식 변경

  • 더미변수는 변수의 값이 최소 2개를 초과할 경우 수행. 아니면 단순 category 타입으로.

다중선형회귀 단계별 설명

model.add(activation='relu')
model.add(activation='relu')
model.add(activation = 'linear')
model.compile(optimizer = 'adam', loss = 'mse', metrics = ['mae'])

탐색적 데이터 분석

산점도 그래프와 추세선 확인

이상 징후를 식별
한 변수가 다른 변수에 어떤 영향을 미치는지 확인
상관 관계, 패턴, 추세 또는 관계 보기

명목형 처리

명목형으로 의심되면 일단 value_counts()로 확인
type, shape, info 등을 사용해 객체 형태 및 정보를 확인 가능

데이터 표준화

차후 학습 결과 적용에서 스케일링 데이터를 사용해야하기 때문에 독립/종속 변수를 따로 스케일링

  • 통계에서는 종속변수 표준화를 권장하지 않음
  • 예측 값을 역 표준화 해야하지 때문
  • 단, 머신러닝 선능을 위해서 종속변수 표준화 권장
  • 표준화를 거치면 numpy 배열 형태(1차원 데이터 배열) -> [0]로 열 길이 출력 가능
  • 표준화를 진행하지 않으면 DF 형태(2차원 형태) -> iloc[0]로 열 길이 출력 가능
  • type, shape, info 등을 사용해 객체 형태 및 정보를 확인 가능

데이터셋 분할

독립변수를 다항식으로 변환

PolynomialFeatures클래스를 사용하여 y=ax+by = ax + b 라는 회귀식을 y=ax2+bx+cy = ax^2 + bx + c 형태로 바꾼다.

  • degree : 변환할 차수 (기본값=2) 또는 생성할 다항식의 차수
    • 1 : [a,b] = ax+bax+b, 2 : [a,b,c] = ax2+bx+cax^2+bx+c, 3 : [a,b,c,d] = ax3+bx2+cx+dax^3+bx^2+cx+d
  • include_bias : True인 경우 0차항(1)도 함께 생성한다. (기본값=True)
    • 0차항은 유효한 값은 아님.

모델 개발

모델 정의

[relu], sigmoid, rmsporp, binary_crossentropy, acc

  • input_shape은 독립변수 수
  • Dense(출력 수) 신경망 개수의 수에 따라서 모델의 성능에 차이가 발생
    • 직감으로 맞춤(다른 방법 없음) 보통 16 또는 32 이상
    • 최적의 값을 직접 탐색(너무 많으면 컴퓨터 다운)
  • activation은 모델과 분석 종류에 따라서 다름
    • 보통 시작은 relu, 분류는 sigmoid, 회귀는 linear
  • optimizer은 모르면 Adam
  • epochs는 많아도 크게 상관이 없음
  • 2차항을 하고 싶다면 sklearn으로 2차항 생성 후 Sequential에 입력

학습하기

  • epochs는 많아도 크게 상관이 없음(단, 너무 크면 오래 걸리고 오차가 증가)
    • callback을 사용해 모델의 학습 방향, 저장 시점, 학습 정지 시점 등에 관한 상황을 모니터링
    • EarlyStopping 콜백과 같이 patience 인자를 지정하여, 지정된 기간 동안 평가지표에서 성능 향상이 일어나지 않으면 학습률을 조정하는 콜백
    • ReduceLROnPlateau EarlyStopping 콜백과 같이 patience 인자를 지정하여, 지정된 기간 동안 평가지표에서 성능 향상이 일어나지 않으면 학습률을 조정하는 콜백
    • ModelCheckpoint 지정한 평가지표를 기준으로 가장 뛰어난 성능을 보여주는 모델을 저장 할 때 사용

연습문제 풀이

표준화 진행 후 독립변수를 다항식으로 변환한 경우 성능면에서 개선.
통계에서는 종속변수 표준화를 권장하지 않음.
예측 값을 역 표준화 해야하지 때문.
단, 머신러닝 성능을 위해서는 권장.(epochs 차이가 발생)

from sklearn.preprocessing import PolynomialFeatures

  • 다항식으로 변환하는 scikit-learn 모듈

기본(기초)통계
describe

산점도, 추세선 확인 이유

  • 단순선형, 다항식으로 갈지 여부를 결정 -> 곡선인 경우 다항식으로 분석
  • 이상 징후를 식별
  • 한 변수가 다른 변수에 어떤 영향을 미치는지 확인
  • 상관 관계, 패턴, 추세 또는 관계 보기

type, shape, info 등을 사용해 객체 형태 및 정보를 확인 가능

표준화를 거치면 numpy 배열 형태(2차원 데이터 배열) -> [0]로 열 길이 출력 가능
표준화를 진행하지 않으면 DF 형태(1차원 형태) -> iloc[0]로 열 길이 출력 가능

09-다중선형회귀(보스턴집값예측)

명목형 변수 처리
더미화가 아닌 단순 category화

명목형으로 의심되면 일단 value_counts()로 확인
type, shape, info 등을 사용해 객체 형태 및 정보를 확인 가능

표준화 결정
기본(기초)통계량, boxplot을 통해 결정
각 변수의 분포가 너무 상이할 경우 표준화 진행

독립변수 처리

독립변수를 다항식으로 변환

PolynomialFeatures클래스를 사용하여 y=ax+by = ax + b 라는 회귀식을 y=ax2+bx+cy = ax^2 + bx + c 형태로 바꾼다.

  • degree : 변환할 차수 (기본값=2)
    • 1 : [a,b] = ax+bax+b, 2 : [a,b,c] = ax2+bx+cax^2+bx+c, 3 : [a,b,c,d] = ax3+bx2+cx+dax^3+bx^2+cx+d
  • include_bias : True인 경우 0차항(1)도 함께 생성한다. (기본값=True)
    • 0차항은 유효한 값은 아님.

독립변수 처리
산점도 그래프, 상관계수, 히트맵을 통한 확인

상관계수의 절대값이 0.7이상인 항목을 순차적으로 제거하여 회귀분석에 사용할 요인을 선정

상관성은 절댓값 0.2, 0.5, 0.7을 기준 - 데이터마다 상이하긴 함

상관관계가 높다고 무조건 제외하는 것이 아닌 인과 관계를 파악 후 제외/존속 여부를 결정

로지스틱은 산점도행렬 확인이 필수가 아님.

데이터 표준화 후 다항식 변환 진행
표준화 후 다항식 변환을 진행 - 성능 차이 발생

분류의 경우

model.add(activation = 'relu')
model.add(activation = 'sigmoid')
model.compile(optimizer='rmsprop', loss = 'binary_crossentropy', metrics = ['acc'])

0개의 댓글