☑️ 목차
오늘의 TIL순서는
- 시작전 마음가짐
- 머신러닝 복습
- AI모델활용 복습
- 파이썬 과제
- 회고
복습 내용과 코드는 GITHUB링크를 참고해주세요.
TIL/ML/PCA.ipynb at main · Onesword-Jang/TIL
☑️시작전 마음가짐
오늘의 학습 목표는 ML, AL 복습을 진행하고 API키를 발급 받았기에 AL의 코드를 진행해볼 것입니다.
그리고 수준별 학습반의 과제와 포트폴리오 작성를 진행하겟습니다.
어제 진행한 ML 복습에서 차원축소 부분의 결과를 해석을 하지못해 갑갑한 마음이있었기에 차원축소 코드 결과를 해석하는데 집중하며 복습을 해야겟습니다.
☑️머신러닝 복습
1. PCA 결과 해석
- 변수가 너무 많아 기존 변수를 조합해 새로운 변수를 가지고 모델링을 하려고 할 때 주로 PCA를 사용한다.
- 전체 분산을 95%를 설명하는 주성분을 332개 찾았다.(기존 784차원에서 332차원으로 축소)
- 각 주성분이 설명하는 분산 비율은 전체 데이터의 변동성을 각 주성분 마다 얼마정도씩 설명해주는지 보여주고 그 값이 제일 큰 주성분을 첫 번째 주성분이라 할 수 있다..
- 그 332개중에 분산비율이 가장 크고 변동에 영향이 큰 주성분이 X축 두 번째 큰 주성분이 Y축으로 지정 되어서 그래프를 보여준다.
- 첫번째(x축) 와 두번째(y축) 선을 기준으로 사용해서 데이터 포인트들을 shearing(잡아당김)해서 2차원 그래프로 나타낸다.
- shearing 했을 때 분산도가 가장 크고 데이터 별로 잘 뭉쳐져있으면 잘 분류한것이라 볼 수 있다.
2. 변동이 많을수록 좋은 이유
- 데이터가 다양한 값으로 퍼져있다는 뜻으로, 주성분이 데이터의 다양한 특성을 잘 포착하고 있다는 의미 (데이터의 중요한 구조와 패턴을 더 많이 담고있다.)
- 차원 축소에서 고차원 데이터 중 불필요하거나 정보량이 적은 차원을 제거하고, 중요 패턴이 담긴 주성분을 유지하여 차원을 축소한다.
- 잡음 제거를 잘한 것이다.
3. 시각화한 그래프를 해석하는 방법
- mnist데이터셋으로 보았을 때 가장 변동성이 큰 주성분이 X축, 두 번째로 큰 주성분이 Y축이라 볼 수 있고 각 데이터 포인트의 색들은 분류하고자하는 레이블(0~9)를 말한다.
- 각 색깔 별로 잘 뭉쳐있다면 첫 번째 두 번째 주성분으로 잘 분류가 가능하다라는 의미가 된다.
- 만약 너무 흩어져있다면 선택된 주성분들의 분류 성능이 좋지 못하다라는 뜻으로 해석이 가능하다.
4. PCA를 사용하는 상황
- 차원의 저주 해결이 필요할 떄(변수가 너무 많아 특서을 찾기 어려운 경우)
- 다중공선성 문제가 있을 때(변수들 간에 높은 상관관계가 존재하는 경우 모델이 특정 특성에 과도하게 의존해 불안정한 결과가 나오기 때문)
- 계산 비용 절감이 필요할 때(대용량 이미지 데이터셋 처리)
- 노이즈 제거가 필요할 때(예: 센서 데이터의 노이즈)
5. 머신 러닝의 결과 해석이 중요한지?
- 실무에 적용 시키면 회사마다 다르지만 이런 기술을 내것으로 만들게 된다면 경쟁력이 높아진다고 생각할 수 있다.
6. 참고 자료
- PCA를 쉽게 설명한 영상
https://www.youtube.com/watch?v=FgakZw6K1QQ
- 공분산 행렬의 의미 영상
https://www.youtube.com/watch?v=jNwf-JUGWgg
☑️파이썬 과제
1. 문자열 출력하기
- 공백을 없애는 방법은 기억이 나지않아 찾아보고 작성했다.
- 다른 사람들의 풀이에서 else를 사용해서 continue 사용방법이 떠올랐다.
str = input() if len(str) >= 1 and len(str) <= 1000000: print(str, end="")
2. a와 b 출력하기
- 조건문을 복습하고 싶어 길게 사용해 보았습니다.
- 오류로는 들여쓰기(IndentationError), 오타(NameError) 오류를 만낫습니다.
a, b = map(int, input().strip().split(' '))
while True:
if a >= -100000 and a <= 100000 and b >= -100000 and b <= 100000:
print(f'a = {a}')
print(f'b = {b}')
break
else:
print("-100,000과 100,000 사이의 수 두개만 입력해주세요.")
a, b = map(int, input().strip().split(' '))
continue
3. 문자열 반복해서 출력하기
- input에 틀렸을 때 나오는출력 글을 넣었는데 str과 같이 출력 되는 문제가 생겨서 input의 정보를 지우고 print로 틀렸을 때 경고 메세지로 나오게 만듦
- str * n부분을 {str} * {n}으로 했다가 ({str} * {n})으로 했다가 마지막에 str * n으로 해서 해결
- 마지막 continue위 n = int(n)을 추가하지않아 오류 만남 추가해서 해결
str, n = input().strip().split(' ')
n = int(n)
while True:
if len(str) >= 1 and len(str) <= 10 and n >= 1 and n <= 5:
print(str*n)
break
else:
print(f'첫 번째 자리는 10자리 이내로, 두 번째 자리는 1~5 숫자만 입력하세요.')
str, n = input().strip().split(' ')
n = int(n)
continue
☑️ AI모델활용 복습
오늘 다른 학습으로 인해서 시간이 없어 미리 필기해놓았던 코드를 가져와서 API키를 활용해 간단한 동작을하는 Chat봇을 만들어보았습니다.
하지만 계속 되는 오류(모듈, 들여쓰기, 단어정의, 오타 등)로 작동되지 않았습니다.
내일 AI모델활용 복습 시간에 강의를 처음부터 들어가며 새로운 가상환경을 만들어 진행하겟습니다.
☑️회고
오늘은 지금까지 하루 공부한 총 양을 따지면 가장 적게 공부한 날입니다.
하지만 한가지의 주제를 심도있게 공부한 날이기도해서 좋았습니다.
오늘은 포트폴리오를 만들기 위한 정보를 찾아보았습니다. 간단한 검색으로는 github에 웹싸이트를 만드는 방법들만 주루룩 나왔습니다.
깃허브에 웹싸이트는 이미 만들어 놓은 상태이기에 다른 정보를 찾아보았고 좋은 정보가있는 블로그를 발견했습니다.
내일은 꼭 API키를 사용해보고 이 블로그와 유튜브 등 영상까지 참고해서 포트폴리오 작성에 대한 철저한 준비와 도전해보겟습니다.
'TIL' 카테고리의 다른 글
내일배움캠프 31일차 TIL + LLM & RAG, ML복습 (2) | 2024.11.08 |
---|---|
내일배움캠프 30일차 TIL + 복습(Python, Ai모델활용) (0) | 2024.11.07 |
내일배움캠프 28일차 TIL + AI모델활용 5주차, 머신러닝 비지도 학습 (2) | 2024.11.05 |
내일배움캠프 27일차 TIL + AI모델 활용 5주차 (1) | 2024.11.04 |
내일배움캠프 26일차 TIL + AI모델 활용 (1) | 2024.11.01 |