: 기본적인 데이터 불러오기, 데이터 정보 관측하기, 데이터 크기 파악하기
데이터 피쳐 알아보기
1) read_csv() 메서드로 csv 파일을 Pandas DataFrame class로 불러오기
df = pd.read_csv('경로')
2) info() 메서드로 데이터의 피쳐수, 컬럼명, 결측치 여부, Dtype 정보 알 수 있음
df.info()
3) shape 속성 : 데이터의 행 개수, 열 개수 출력 가능
df.shape
4) head() 메서드 : 데이터 대략적 정보 파악
df.head()
[실습 코드]
desribe() : Dataframe의 각 열에 대해서 요약 수행
-> 결측치는 제외하고 수치형 데이터에 한해 데이터 요약 수행
count, mean, std, min, 1분위 수, 2분위 수, 3 분위수, max값 출력
df.describe()
[실습 코드]
(4) 파이썬 변수분포 시각화
예측하고자 하는 변수인 종속변수(quality)의 분포 시각화
-> matplotlib, seaborn 라이브러리로 시각화 출력
* 시각화 결과를 통해 머신러닝 방향성 설정 가능
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
dfcopy = df.copy() //시각화 진행시 copy()로 복사본 생성 후 진행
sns.distplot(df['피쳐명'],kde=True, bins=None)
*df['피쳐명']: 출력하고자 하는 컬럼
*kde : '그래프에 선을 출력할 지 여부'
*bins : '출력할 막대그래프 개수'
plt.axis(['x축 최솟값, x축 최댓값, y축 최솟값, y축 최댓값'])
plt.title('제목')
plt.show()
[실습 코드]
(5) 파이썬 Matplotlib 선 그래프 (plot())
from matplotlib import pyplot as plt
plt.plot(x,y)
plt.show()
[실습 코드]
(6) 파이썬 Matplotlib 히스토그램 그리기
히스토그램은 도수분포표를 그래프로 나타낸 것 -> 변수들의 분포정도를 볼 때 유용
from matplotlib.pyplot as plt
plt.hist(x,y)
plt.show()
[실습 코드]
2. 전처리
(1) 파이썬 이상치 탐지
데이터 중에서는 이상치(Outlier)가 존재하고 일반적인 패턴과 매우 다른 패던을 갖는 데이터
-> 이상치 데이터는 모델의 성능을 크게 떨어트림
-> IQR (Inter Quanatile Range) 사분위 편차를 이용하는 방법 사용
import seaborn as sns
sns.boxplot(data=train['fixed acidity'])
[실습 코드]
(2) 파이썬 이상치 제거
IQR를 통한 이상치 제거
IQR : 3분위 수(75%에 위치한 값) - 1분위수(25%에 위치한 값)을 의미
이전 실습에서의 boxplot의 4와 6사이의 실선보다 작고, 8과 10 사이의 실선보다
큰 데이터를 이상치로 판단하고 제거
#25%에 위치한 값 구하기
quantile_25 = np.quantile(train['fixed acidity'],0.25)
#75%에 위치한 값 구하기
quantile_75 = np.quantile(train['fixed acidity'],0.75)
#IQR 구하기
IQR = quantile_75 - quantile_25
#quantile_25보다 1.5*IQR 작은 값 구하기
minimum = quantile_25 - 1.5*IQR
#quantile_75보다 1.5*IQR 큰 값 구하기
maximum = quantile_75 + 1.5*IQR
#minimum 보다 크거나 같고, maximum 보다 작거나 같은 값만 추출
train2 = train[(minimum<=train['fixed acidity'])&(train['fixed acidity']<=maximum)]
[실습 코드]
(3) 파이썬 수치형 데이터 정규화
의사결정 나무, 랜덤 포레스트 ->'트리기반 모델' : 대소 비교를 통해 구분, 숫자 단위에 크게 영향 받지 않음.
Logistic Regression, Lasso ->'평활 함수 모델' : 숫자의 크기와 단위에 영향 받음
수치형 데이터 정규화를 통해 모든 모델에 잘 어울리는 데이터 만듦
-> **Min Max Scailing** 기법 : 가장 작은 값은 0, 가장 큰 값은 1로 만듦
그 사이 값들은 비율에 따라 0~1 사이에
분포
'이상치'에 민감하므로 상대적을 큰
값이나, 작은 값을 1이나 0 으로 만들기 때문에 문제 발생 가능
[실습 코드]
(4) 파이썬 원-핫 인코딩
컴퓨터는 '문자'로 데이터를 학습할 수 없어 'type' 같은 피쳐들은 컴퓨터가
읽어서 학습 할 수 있도록 인코딩 하는 과정 필요
One-Hot Encoding : '하나만 Hot하고, 나머지는 Cold한 데이터'
자신에게 맞는 것은 1로, 나머지는 0으로 바꿈
[실습 코드]
3. 모델링
(1) 파이썬 랜덤포레스트 정의
RandomForest - 분류 모형
: 어떤 그룹에 속할 지 예측하느 모형
*RandomForest - 회귀 모형 : 집값, 주가, 시가 등 특정한 값을 맞추는 모형
[실습 코드]
from sklearn.ensemble import RandomForestClassifier
random_forest = RandomForestClassifier()
(2) 파이썬 모델 랜덤포레스트 실습
[실습 코드]
(3) 파이썬 교차 검증
**Hold-out**
: Train data를 (train, valid)라는 이름의 2개의 데이터로 나누는 작업
예측 성능을 가늠해 보기 위해 train:valid = 8:2, 7:3 비율로 데이터
-Hold-out 문제점은 데이터의 낭비 -> solution
**교차검증**
K-Fold : 모든 데이터를 최소한 한 번씩 다 학습하게 하는 것
-> valid 데이터를 겹치지 않게 나누어 N개의 데이터셋을 만듦
[실습 코드]
(4) 파이썬 교차 검증 실습
1. K-Fold를 이용해서 Train과 Valid Data 나누기
2. Model 이용해서 train 데이터 학습
3. Model 이용해서 valid 데이터 예측해 성능 확인
4. Model 이용해서 test 데이터 예측
5. n_splits를 5로 설정하면 5개의 결과값들에 대한 '최빈값'을 이용해 가장 등장할 가능성이 높은 결과값으로 결정
6. 결과 제출
[실습 코드]
4. 튜닝
(1) Bayesian Optimization
하이퍼 파라미터 튜닝 Grid Search, Random Search
-> 최적의 값을 찾아 갈 수 없는 문제점
**Bayesian Optimization**
1. 'Gausain Process'라는 통계학 기반으로 만들어진 모델
2. 여러개의 하이퍼 파라미터들에 대해
3. Aquisition Function을 적용했을 때
4. 가장 큰 값이 나올 확율이 높은 지점 찾음
*Bayesian Optimization 과정
1. 변경할 하이퍼 파라미터의 범위 설정
2. Bayesian Optimization 패키지를 통해, 하이퍼 파라미터의 범위 속 값들을 랜덤하게 가져옴
3. 처음 R번은 랜덤하게 좌표를 꺼내 성능 확인
4. 이후 B번은 Bayesian Optimization을 통해 B번 만큼 최적의 값 찾음
[실습 코드]
pip install bayesian-optimization
from bayes_opt import BayesianOptimization
(2) 파이썬 그리드, 랜덤 서치, Bayesian
<하이퍼 파라미터의 3가지 튜닝 방법 비교>
1.Grid Search
기법 : Grid Search는 사전에 탐색할 값들을 미리 지정하고 그 값들의 모든
조합을 바탕으로 성능의 최고점을 찾음
장점 : 내가 원하는 범위를 정확하게 비교 분석 가능
단점 : 시간이 오래걸림, 성능의 최고점이 아닐 가능성이 높다.
"최적화 검색" (여러개들을 비교 분석해서 최고를 찾아내는 기법)이지,
"최적화 탐색"(성능이 가장 높은 점으로 점차 찾아가는 기법)이 아님
2. Random Search
기법 : 사전에 탐색할 값들의 범위를 지정하고, 그 범위 속에서 가능한 조합을
바탕으로 최고점을 찾음.
장점 : Grid Search에 비해 시간이 짧게 걸림,Grid Search보다, 랜덤하므로
성능이 더 좋은 점으로 갈 가능성이 높음
단점 : 반대로 성능이 Grid Search보다 낮을 수 있음.
하이퍼 파라미터의 범위가 너무 넓으면, 일반화된 결과가 나오지 않음.
seed를 고정하지 않으면, 할 때 마다 결과가 달라진다.
"최적값 검색"의 느낌이지, "최적화 탐색"의 개념이 아님
3. Bayesian Optimization
기법 : 하이퍼파라미터의 범위를 지정한 후, Random하게 R 번 탐색한 후,
B번 만큼 최적의 값을 찾음
장점 : 정말 "최적의 값"을 찾을 수 있음, 상대적으로 시간이 덜 걸림
엔지니어가 그 결과값을 신뢰할 수 있음.
단점 : Random하게 찍은 값이 달라질 경우, 최적화 하는데 오래 걸림
Random하게 찍은 값이 부족하면, 최적의 값을 탐색하는게 불가능
Random하게 찍은 값이 너무 많으면, 최적화 이전에 이미 최적값 가질 수 있음
Bayesian Optimization은 수동적으로 하이퍼 파라미터를 튜닝하는데 좋음.