나는 오늘 무엇을 했는가?
1. 멋쟁이사자처럼 AI스쿨 7기 수업(파이썬, 박조은 강사님) 수강
[👇오늘코드 박조은 강사님의 수업 내용 및 수업 자료를 바탕으로 정리한 내용입니다.👇]
----------------------------------------------------------------------------------------------------------------------------
✨ 인코딩
1️⃣ one - hot - encoding
pd.get_dummies() 사용
순서가 없는 데이터에 적용하는 인코딩 기법
2️⃣ ordinal - encoding
catergoy 데이터 타입으로 변경하는 인코딩 기법
🤔 ordinal encoding 활용 방법
train["새로운 변수명"] = train["적용할 변수명"].astype("category").cat.codes
test["새로운 변수명"] = test["적용할 변수명"].astype("category").cat.codes
🤔 둘의 차이
원핫인코딩은 여러 컬럼을 생성하여 1과 0으로 값을 채워 넣는다면
ordinal 인코딩은 하나의 컬럼에다가 1부터 순차적으로 값을 채워 넣는다.
🤔 object와 category는 다른가?
[sparse accessor] https://pandas.pydata.org/docs/reference/series.html#categorical-accessor
범주형 데이터 원핫 인코딩을 하면 희소한 행렬을 어떻게 할 것인가?
를 다루는 것이 sparse accessor이다.
✨ 피처 중요도
🤔새로운 피처를 생성하여 모델을 돌렸을 때, 해당 피처의 중요도는 높지만 성능 자체가 떨어진 경우?
피처 중요도는 확률값 계산에 얼마나 중요하게 작용을 했는지 나타내는 지표이며 정확한 예측에 중요한 역할을 한다는 것을 의미하지는 않는다.
모델의 성능은 모의고사를 보는 과정과 유사한 cross validation 점수가 올라갔는지 내려갔는지를 확인하는 것이 좀 더 정확한 방법이다.
-------------------------------------------------------------------------------------------------------
✨ 평가지표
점수가 높을 때 좋은 지표와 점수가 낮을 때 좋은 지표 구분
R square score는 1에 가까울수록 더 좋은 성능을 의미함. 예측값과 실제값이 같으면 1된다. (max: 최대)
나머지 회귀의 측정공식은 오차를 측정하기 때문에 낮아야 좋음
🤔 실무에서는 어떤 평가지표를 사용해야할까?
실무에서는 보통 비즈니스 평가지표를 더 많이 사용한다.
경진대회나 실습에서 사용하는 평가지표는 모델의 성능을 측정해서 객관화 해보기 위해 사용하는 것이며
모델을 만드는 목적은 비즈니스 문제 해결을 위함이다.
따라서, 그 모델의 목적이 DAU를 올리는 것이라면 DAU를 측정하고
매출을 늘리고 싶다면 매출액이 늘어났는지, 구매자수가 늘어났는지 등을 평가하게 된다.
-------------------------------------------------------------------------------------------------------
✨ 상대경로와 절대경로
/ 루트 (가장 최상의 디렉토리로 이동 / Web root)
./ 현재 위치 (파일의 현재 디렉토리를 의미)
../ 현재 위치의 상단 폴더 (상위 디렉토리로 이동)
1️⃣ 상대경로
현재 경로를 기준으로 하는 경로
(현재경로에서 ./ 쓰는 것과 아무것도 안쓰는 것과 같은 위치를 나타냄)
예시)
Q. 멋쟁이 사자처럼 본사 건물은 어디 있나요?
A. 여기서 우회전하신 다음에 직진하세요.
2️⃣ 절대경로: 전체 경로를 다 지정하는 경로
윈도우 - c: 부터 시작하는 경로
예시)
Q. 멋쟁이 사자처럼 본사 건물은 어디 있나요?
A. 서울특별시 종로구 청진동 246 D1동 16층, 17층
절대경로를 사용하면 다른사람의 컴퓨터에서 동작하지 않기 때문에 되도록이면 상대경로를 사용하는 것이 좋다.
-------------------------------------------------------------------------------------------------------
✨ log를 취해주면
- 스케일 값이 줄어들고
- 한 쪽에 너무 뾰족하게 있던 분포가 좀 더 완만한 분포로 바뀐다.
- 데이터에 따라 치우치고(skewed) 뾰족한 분포가 정규분포에 가까워지기도 한다.
- 이상치에도 덜 민감하게 된다.
✨ 왜 정규분포가 되면 머신러닝이나 딥러닝에서 좋은 성능을 낼까?
값을 볼 때 한쪽에 너무 치우쳐져 있고 뾰족하다면 특성을 제대로 학습하기가 어렵기 때문에 정규분포로 되어 있다면 특성을 고르게 학습할 수 있을 것이다.
✨ log를 취하기 전에 1을 더해주는 이유
가장 작은 값인 0도 음수가 나오지 않도록 하기 위함이다.
np.log(train["count"] + 1) == np.log1p(train["count"])
✨ log와 exp 관계 (역함수)
np.exp는 지수함수
np.log로 로그를 취했던 값을 다시 원래의 값으로 복원할 수 있다.
count == np.exp(np.log1p(count)) -1 같은 값입니다.
log를 취할 때는 1을 더하고 로그를 취했는데 지수함수를 적용할 때는 반대의 순서대로 복원해야 순서가 맞다.
np.exp로 지수함수를 적용하고 -1을 해주어야 로그를 취했던 순서를 복원해주게 된다.
✨ 왜 count에 log를 취하고 다시 지수함수로 복원을 했을까?
log값으로 예측하고 예측값을 복원하기 위함이다.
--> label_name에 count가 아닌 np.log1p(count) 사용
--> 예측에 정규분포 형태가 좋기 때문
✨어떤 책보다도 하기 링크의 튜토리얼을 따라해보는 것이 복습과 예습에 좋다.
https://www.kaggle.com/competitions/house-prices-advanced-regression-techniques/overview/tutorials
-------------------------------------------------------------------------------------------------------
✨ Feature Engineering
데이터에 대한 지식을 바탕으로 feature를 생성, 변경, 삭제하며 더 유용한 형태로 바꾸어주는 것을 의미한다.
종류
1️⃣ 특성 선택(Feature Selection)
도메인지식, 특성의 중요도 등에 따라 일부 특성을 버리거나 선택하는 것
2️⃣ 특성 추출(Feature Extraction)
기존의 특성을 버리거나 선택하는 것이 아닌, 특성들의 조합으로 아예 새로운 특성을 생성하는 것
ex) 주성분 분석
3️⃣ 범위 변환(Scaling)
변수의 분포가 편향되어 있을 경우, 이상치가 많이 존재할 경우 등에 사용하는 것으로
변수의 특성이 잘 드러나지 않아 활용하기 어려울 때 변수의 범위를 바꾸어주는 작업
4️⃣ 변형(Transform)
기존의 변수들 중 의미있는 것을 찾아 새로운 변수를 생성하는 것
5️⃣ 범주화(Binning)
연속형 변수 -> 범주형 변수로 변환
6️⃣ 숫자화(Dummy)
범주형 변수 -> 연속형 변수로 변환
-------------------------------------------------------------------------------------------------------
✨ 이상치
🤔 train의 정답 값에 이상치가 있다면 어떻게 처리하는 것이 좋을까?
A1. 제거
-> train은 제거가 가능하지만, test는 제거가 불가능하다.
A2. 평균값, 중앙값으로 대체
-> 너무 극단적인 값을 평균이나 중앙값으로 대체한다면 실제값이 많이 왜곡될 수 있다.
A3. 사분위수로 분할해서 예측
-> 이게 피처라면 가능할 수도 있는 접근법이지만 정답(label, target)값이기 때문에 불가능하다.
A4. 스케일링
-> 스케일링 하는 것이 좋다. log를 취했던 것처럼 다시 복원도 가능하다.
-------------------------------------------------------------------------------------------------------
✨ 희소값
희소 값에 대해 one-hot-encoding을 하게 되면 오버피팅이 발생할 수도 있고 너무 희소한 행렬이 생성되기 때문에 계산에 많은 자원이 필요하다.
=> 적절한 조치가 필요하다.
어떻게 조치해야할까?
1) 희소값을 결측치 처리하기
2) 희소값을 "기타" 등으로 묶어주기
----------------------------------------------------------------------------------------------------------------------------
2. 천리길 과제
3. ML 복습
2. 나는 오늘 무엇을 느꼈는가?
지금까지 배운 내용들을 까먹지 않도록 공부하고 관련 내용을 점차 넓혀가면서 학습하면 좋을 것 같다.
3. 총 공부시간
12시간 16분 05초
- AIS: 8시간(09~18)
- 그 외: 04시간 16분 05초
'복습 및 회고 > TIL' 카테고리의 다른 글
[TIL] 20221110(목) (0) | 2022.11.10 |
---|---|
[TIL] 20221109 (수) (0) | 2022.11.09 |
[TIL] 20221107(월) (0) | 2022.11.07 |
[TIL] 20221106(일) (0) | 2022.11.06 |
[TIL] 20221105(토) (0) | 2022.11.05 |
댓글