오늘은 과제들 마무리를 하고 심화과제를 살펴봤다.
일일 학습 정리로 매일 복습, 과제, 피어세션, 회고 정리했고 아래 링크 달았습니다.
Torchvision, KerasCV, Albumentation등의 라이브러리를 사용할 수 있다.
albumentations : 이미지 변환 기능을 제공.
변환 함수 | 설명 |
---|---|
HorizontalFlip | 수평 뒤집기 |
VerticalFlip | 수직 뒤집기 |
Rotate | 주어진 각도만큼 회전 |
RandomBrightnessContrast | 밝기와 대비를 랜덤하게 변경 |
HueSaturationValue | 색조, 채도, 명도를 랜덤하게 변경 |
ShiftScaleRotate | 이동, 확대, 축소, 회전 |
Perspective | 원근 효과 적용 |
GaussianNoise | 가우시안 노이즈 적용 |
Blur | 이미지 흐리게 |
import torchvision.transforms as transforms
import matplotlib.pyplot as plt
from PIL import Image
fig, ax = plt.subplots(2, 2, figsize=(9, 9))
transform1 = transforms.ColorJitter(brightness=5) # 밝기조정
transform2 = transforms.ColorJitter(contrast=5)# 대비도조정
transform3 = transforms.ColorJitter(saturation=3)# 채도조정
transform4 = transforms.ColorJitter(hue=0.3)# 색상조정
aug_img1 = transform1(test_image)
aug_img2 = transform2(test_image)
aug_img3 = transform3(test_image)
aug_img4 = transform4(test_image)
ax[0, 0].imshow(aug_img1)
ax[0, 1].imshow(aug_img2)
ax[1, 0].imshow(aug_img3)
ax[1, 1].imshow(aug_img4)
import albumentations
def transform(transform_method): # 함수 정의
fig, ax = plt.subplots(1,2,figsize=(12,9)) # 1행 2열 서브플롯 생성
transform1 = albumentations.HorizontalFlip(p=1) # 수평 뒤집기 변환. p=1은 항상 적용된다는 뜻
ax[0].imshow(test_image) # 0번째 서브플롯에 이미지 원본 표시
ax[1].imshow(transform_method(image=test_image_np)['image']) # 1번째 서브플롯에 변환된 이미지 표시
ax[0].axis('off') # 축 좌표를 꺼서 이미지만 보이게
ax[1].axis('off')
plt.show() # 이미지 표시
한국어는 KoNLPy, Py-Hanspell, PyKoSpacing, SOYNLP 등의 라이브러리로 형태소 분석, 띄어쓰기, 맞춤법 교정, 신조어 처리 등이 가능하다.
import re : 정규표현식 라이브러리.
기능 | 설명 | 사용 예시 |
---|---|---|
re.match() | 문자열의 시작에서 패턴 검색 | re.match(r'abc', 'abcdef') |
re.search() | 문자열에서 패턴을 검색 | re.search(r'abc', '123abc456') |
re.findall() | 문자열에서 패턴과 일치하는 모든 부분을 리스트로 반환 | re.findall(r'\d+', 'abc123def456') |
re.sub() | 패턴과 일치하는 부분을 다른 문자열로 치환 | re.sub(r'abc', 'xyz', 'abc123abc') |
re.split() | 패턴에 맞춰 문자열을 분할 | re.split(r',', 'a,b,c,d') |
re.compile() | 패턴을 미리 컴파일하여 성능을 향상 | pattern = re.compile(r'\d+') |
import re
def clean_str(text):
pattern = '([a-zA-Z0-9_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)' # E-mail
text = re.sub(pattern=pattern, repl='', string=text)
pattern = '(http|ftp|https)://(?:[-\w.]|(?:%[\da-fA-F]{2}))+' # URL
text = re.sub(pattern=pattern, repl='', string=text)
pattern = '[ㄱ-ㅎㅏ-ㅣ]+' # 한글 자모음만
text = re.sub(pattern=pattern, repl='', string=text)
text = re.sub('[-=+,#/\?:^$.@*\"※~&%ㆍ!』\\‘|\(\)\[\]\<\>`\'…》]','', string=text) # 특수기호
text = re.sub('\n', '.', string=text)
return text
스페셜 피어세션에서 다른 RecSys 분들을 만나 각자 팀에서 어떻게 하는지 여쭤봤다. 백준 그룹을 써서 코테를 진행한다는 조를 참고 삼아서 우리조도 진행하면 좋을 것 같다.
팀 회고를 진행했다. 자세한 내용은 RecSys-06조 3주차 팀회고
결국 EDA, 데이터 시각화는 누군가를 설득하기 위함이다. 설득할 수 있는 근거가 필요하다.
시뮬레이션, 시연은 현장에서 하면 절대 안된다. 무조건 미리 시연해서 녹화해서 트는게 훨씬 낫다. 당일에 가서 하면 zoom 메모리때문에 실패하는 케이스가 많다!!
EDA 과정에서 HeatMap을 쓰면 색은 사실 구분이 잘 안된다. 숫자가 어필하기 좋다. 30개중에 20개가 살아남았다. 이런 방식으로. 숫자로 어필해라!!
EDA에서 회색-오렌지색 같은 색들보다 좀 더 서로 대비되는 색들을 써야 밀도 그래프에선 잘 보인다. 그래디언트 색으로 표현할땐 비슷한 blue색 단색보다 채도도 바뀌면서 청록같은 파랑, 노랑같은 파랑 이렇게 좀 바뀌는게 좋다.
Top-down, Bottom-up 방식 둘 다 유용하다. 미리 가설을 세우고 접근하는 방법도, 데이터를 통해서 인사이트를 얻는 방법 둘 다 유용하다.
심화 과제를 진행해보니 EDA 과정이 다각도로 생각해야되는 부분이 많아서 생각보다 어려웠지만 만드는 과정이 재밌었다. 내가 관심가는 데이터를 가지고 한번 EDA를 진행해보면 재밌을 것 같다.
이번 주는 난이도가 저번주에 비해 오히려 쉬워서 집중이 잘 안되고 정리가 좀 어려운 느낌이었다. 다음 주 부터는 좀 다잡고 열심히 진도나가보자!!