목차

오늘의 TIL 순서는

  1. 시작전 마음가짐
  2. Python 문제 풀이
  3. LLM&RAG 5주차 내용 정리
  4. 환경변수 문제 해결
  5. 머신러닝 결과 해석
  6. 웹트롤링 특강
  7. 회고

입니다.

 

TIL/크롤링/크롤링_1.ipynb at main · Onesword-Jang/TIL

오늘 배운 것은?! Contribute to Onesword-Jang/TIL development by creating an account on GitHub.

github.com

 

 

TIL/LLM/LLM_RAG_5.ipynb at main · Onesword-Jang/TIL

오늘 배운 것은?! Contribute to Onesword-Jang/TIL development by creating an account on GitHub.

github.com

 

 

TIL/ML/LDA.ipynb at main · Onesword-Jang/TIL

오늘 배운 것은?! Contribute to Onesword-Jang/TIL development by creating an account on GitHub.

github.com

 

 


시작전 마음가짐

지금까지 진행 상황들을 보았을 때 해야할 과제들이 많아지고있습니다.

 

빨리 끝낼 수 있는 주제들을 먼저 처리하며 마음의 짐을 덜고 싶습니다.

 

오늘은 해결을 못한 내용들을 처리하고싶으니 매우 바쁜 하루가 될 것 같습니다.

 

그럼 학습을 시작하겟습니다.


Python 문제 풀이

1. 문자열 겹쳐쓰기

  • 문제를 보고 슬라이싱이 생각남
  • answer = my_string[:s] + overwrite_string 까지 하고 문자열 뒷부분이 빠짐것을 확인
  • overwrite_string 만 추가해서 문자열 뒷부분 겹침 확인
  • s 값을 더해줘서 해결
def solution(my_string, overwrite_string, s):
    answer = my_string[:s] + overwrite_string + my_string[s +len(overwrite_string):]
    return answer

2. 문자열 섞기

  • 분명히 배웠었는데 기억이 나지 않음
  • join, map 등을 활용해보려했으나 실패
  • 검색을 통해 완료 (이전에 배웠던 부분은 리스트컴프리헨션)
# 조건문을 활용한 섞기
def solution(str1, str2):
    answer = ""
    for i in range(len(str1)):
        answer += str1[i] + str2[i]
    return answer
# 리스트 컴프리헨션
def solution(str1, str2):
    answer = [str1[i] + str2[i] for i in range(len(str1))]
    return ''.join(answer)
# map 함수와 join 사용하기
def solution(str1, str2):
    answer = ''.join(map(lambda i: str1[i] + str2[i], range(len(str1))))
    return answer

3. 문자 리스트를 문자열로 변환하기

  • 조인 함수로 성공
  • 아직 조인 함수를 사용하는데 미숙함이있어 문법에서 에러가 나옴
  • 시도한 함수들 join, 데이터 타입 변환, map
def solution(arr):
    answer = ''.join(arr)
    return answer

LLM 5주차 내용 정리

  • 5주차 5-5 강의 정리를 마쳤습니다.
  • LLM과 여러 패키지를 활용하는 방법을 코드로 보여주고 코드의 요소 하나하나 설명해주는 강의였습니다.
  • 하지만 강의의 분기점이 강의 자료의 숫자로만 되어있어 처음에는 강의자료에있는 코드들이 한개의 코드박스에 들어가서 진행하는 코드라 생각하고 진행하였지만 반복하는 부분이 많아 정리하기 어려웠습니다.
  • 또한 많은 정보를 담고있어 차근차근 보아야하고 많은 복습 및 실습이 필요해 보입니다.
  • 복습을 위해 명확하게 파트 분리를 진행하고 복습을 해야할 것으로 보입니다.

환경변수 문제 해결

1. 우선 질문하러 가기 전 다시한번 더 API키 및 환경변수 문제 확인

  1. 작업 영역 소스파일 열거하는 데는 시간이 오래걸립니다. 대신 하위 폴더를 여는 것이 좋습니다. => 하위폴더 사용방법
  2. 대화형 챗봇의 API키 직접 입력시 사용 가능
  3. DOTENV사용 경우: 잘못된 API키를 사용한다는 openai.AuthenticationError 발생 => 환경 변수를 어떻게 설정하는지 봐야할 듯
  4. api키 노출없이 키 사용방법

2. 해결한 문제

  1. vscode를 시작함과 동시에 열려있던 c드라이브 폴더를 그대로 사용해서 문제가 나온거였다. 해결
  2. API키 지정 코드에서 오타 존재 =>client = OpenAI(api_key="api_key")에서 ""제거 => Dotenv로 API키 사용 가능
  3. 키 노출 우려 => .env를 활용해도 print문으로 api키를 출력이 되는게 문제라 판단 => 로컬 컴퓨터 환경 변수에 API키값 저장 => OpenAI Python 라이브러리 버전 1.0.0 이상에서는 이 API가 더 이상 지원되지 않아서 문제 발생 => 생각해보니 코드상에서만 노출이 안되면 print문을 써도 같은 값이 출력이 안되는 것이라느걸 깨달음 => .env 사용하자

3. 4주차 강의부터 다시 실습 실행

  • 5-1 강의 까지 들었고 매끄럽게 강의 수강을 했습니다.
  • 또한 이때까지 환경변수 설정 오류로 나오던 실행경로 오류는 가상환경의 파일과 작업중인 파일의 위치 문제였습니다. => 작업중인 디렉토리에 새로운 가상환경을 설정

머신러닝 결과 해석(LDA)

  • LDA에 대한 해석을 드디어 완료했습니다. 생각보다 간단했는데 수학적 개념으로 된 설명을 읽다보니 머리가 뜨거워진듯 합니다.

LDA란?

  • 우선 LDA는 차원 축소와 분류를 한번에 진행하는 모델이다.
  • 클래스 내의 분산 최소화, 클래스 간의 분산을 최대화 시킨 축을 찾아 차원축소 한다.

간단한 진행과정과 결과 해석

  1. 데이터와 레이블을 분리한다.
  2. 선형판별 축을 찾는다(클래스 수 -1 개)
  3. 찾은 선형판별 축으로 모델학습(선형변환)한다.
  4. 첫번째 열(첫 번째 선형판별 축)과 두번째 열(두 번째 선형판별 축)을 사용하여 시각화하고 데이터의 분산이 잘이루어졌는지 확인한다.

분석을 하는 이유?

  1. 정확성 향상: 분류 성능이 높아지면 잘못된 예측을 줄일 수 있습니다.
  2. 비지니스 성과 개선: 비즈니스 의사결정을 개선하는 데 기여(추천 시스템 등)
  3. 리소스 효율성 향상: 운영 및 리소스 비용을 절감(콜센터 등의 챗봇, 인건비 절감)
  4. 사용자 경험 향상: 사용자에게 더 나은 경험을 제공(스팸 필터 등)
  5. 일반화 성능 향상: 다양한 데이터셋에도 잘 일반화될 수 있다.

크롤링 특강

  • 크롤링 강의를 들으며 가끔 보게 되던 HTML, URL구조, f12를 누르게 되었을 때 만나게 되는 정보들을 알게 되었습니다.
  • 오늘 특강으로 많은 정보를 학습했으니 이 정보들을 더욱 구조화 시켜 내 것으로 만들어야 겟습니다.
  • 특히 신기했던게 URL의 구조를 보고 URL에서 어떤 파라미터들이 어떤 역할인지 알아보고 그것들을 사용한다는게 매우 신기했습니다.
  • 전체적으로 처음듣는 내용이어서 어려웠지만 늘 궁금하던 내용이라 재미있었습니다.

회고

오늘은 전체적으로 학습 시작 전에 생각한대로 흘러가서 학습의 질이 매우 높았습니다.

 

중간에 크롤링 특강의 존재를 알게 되어 머신러닝 t-SEN의 결과분석은 못했지만 크롤링 특강 자체가 매우 흥미있어 괜찮았습니다.

 

Python 문제풀이를 하며

 

파이썬 문제는 풀렸을 때의 쾌감 이 너무 좋습니다.

 

하지만 한가지 문제로 시간을 많이 사용하게 되면 무형의 압박감이 생겨 GPT의 힘을 빌리고 싶어지지만 꾹 참으며 내가했던 필기 자료나 검색을 통하여 이루어 내고있습니다.

 

환경 변수 문제를 해결하며

 

환경 변수 문제 이 때 까지 왜이렇게 고민을 했나 싶을 정도로 쉽게 해결이 되었습니다.

 

지금까지 가상환경을 설치하며 날린 시간들이 조금 아깝지만 이제 이런 문제들이 해결이 되었으니 마음 놓고 실습을 진행할 수 있습니다.!!

 

작업중인 디렉토리에 가상환경 파일을 만들어야한다...

 

머신러닝 결과 분석을 하며

 

LDA이녀석도 저번주에 생각했던 것보다 매우 간단한 녀석이였습니다.

 

전문적인 블로그 글과 유튜브 영상을 참고해서 분석했는데 너무 많은 수학적 용어들이 머리를 복잡하게 만들었던 것 같습니다.

 

추가적으로 분류하는 머신러닝을 공부하고있기에 분류, 분석은 왜 하는 것인지 찾아보았고 그 결과로 왜 이렇게까지 데이터 분석 스킬이 필요한지 이해가 되는 학습이였습니다.

 

크롤링 특강

 

평소 궁금해했던지라 신기하고 재미있었습니다.

 

하지만 어려웠다는... 그리고 마지막에 과제를 주셨는데 날잡고 강의 복습을 진행한 뒤 과제까지 처리해보려 합니다.

 

감사합니다.

 

목차

오늘의 TIL목차는

  1. 시작전 마음가짐
  2. LLM&RAG 강의
  3. 수준별 학습반
  4. 회고

입니다.

 

오늘의 강의 필기와 코드는 GITHUB링크를 참고해주세요.

 

TIL/ML at main · Onesword-Jang/TIL

오늘 배운 것은?! Contribute to Onesword-Jang/TIL development by creating an account on GitHub.

github.com

 

 

TIL/LLM/LLM_RAG_1.ipynb at main · Onesword-Jang/TIL

오늘 배운 것은?! Contribute to Onesword-Jang/TIL development by creating an account on GitHub.

github.com

 

 


시작전 마음가짐

오늘은 새로운 팀으로 이동하게 되는 날입니다.

 

다른분들에게 피해를 주지 않으려면 학습에 대한 열정가지고 열심히 해야겟습니다.

 

또한 오늘부터는 복습보단 새로운 강의를 듣는 것을 목표로 하며 수준별 학습반 강의 내용을 완벽히 이해하는것이 목표입니다.

 

그럼 학습을 시작하겟습니다.


LLM&RAG 강의

LLM & RAG 강의를 4주차까지 완강했습니다.

 

내일(토요일)을 사용해서 5주차 까지 완강예정입니다.

 

오늘 강의를 듣기 전에는 아직 앞선 강의들에 대한 이해도가 매우 맞다고 생각하고있어 벌써 다른 주제의 강의를 듣기에는 부담스럽다라고 생각했습니다.

 

하지만 막상 들어보니 강의 내용 자체는 지금까지 들어보았던 강의 중에서 가장 이해하기 쉬웠으며 실습 또한 매우 간단하여 재미있게 들었습니다.

 

아직 완강한게 아니라서 쉽다고 생각하는게 섣부를 수 있지만 재미있고 유익한 시간이였다고 생각합니다.

 

오늘 실습을 진행하며 만난 트러블은 System에 정보를 전달했음에도 Assistant의 답변에 적용이 되지 않았습니다.

 

이를 해결하기 위해 강의 내용을 생각하다가 이전 대화 내용을 기억하고 학습한다는 부분이 생각나 이전의 대화내용을 전부 삭제하고 실행하니 해결이 되었습니다.

 


수준별 학습반

1. 문자열 붙여서 출력하기

  • 문제없이 해결
str1, str2 = input().strip().split(' ')

if 1 <= len(str1) <= 10 and 1 <= len(str2) <= 10:
    print(str1, end="")
    print(str2)

다른 사람 정답

  • replace(): 특정 값을 다른 값으로 대체할 때 사용하는 함수
  • 문자열.replace(바꿀문자열, 새문자열, 바꿀_횟수)
print(input().strip().replace(' ', ''))

튜터님 풀이

result = "".join([str1, str2])
print(result)

2. 문자열 돌리기

  • 전혀 모르겟어서 검색을 통해 해결
str = input()
for char in str:
    print(char)

다른사람 정답

  • join메서드: 문자열을 결합할 때 사용하는 메서드
print('\n'.join(input()))

3. 홀 짝 구분하기

  • if문법이 헷갈렸지만 혼자 해냄
  • != 문법이 생각 나지않아 필기 찾아 봄
a = int(input())

a_1 = a % 2

if a_1 == 0:
    print(f"{a} is even")

elif a_1 != 0:
    print(f"{a} is odd")

다른사람 정답

  • 비트 연산자 &: 두 비트가 모두 1일 때만 결과가 1이 된다.
  • n&1을 이용해 n이 짝수인지 아닌지 검증 가능(짝수일때 0, 홀수일 때 1)
  • n & (1 << k)을 사용해 n의 k번째 비트가 1인지 확인가능
  • 이진법에 대한 공부 필요
  • 슬라이싱 기법: n&1 값을 시작 인덱스로 삼고, 그 이후에 2칸 간격으로 문자를 선택
n=int(input())
print(f"{n} is {'eovdedn'[n&1::2]}")

총평

  • 지금까지 배운 내용으로 충분히 해결 가능한 문제들도 틀림
  • 응용력이 많이 부족해보임

머신러닝 복습(t-SEN, LDA)

1. t-SEN 코드 중

tsne = TSNE(n_components=2, random_state=42)
  1. n_components=2는 TSNE 클래스의 매개변수로, 몇 차원으로 축소할 것인지 지정
sns.scatterplot(x=X_tsne[:, 0], y=X_tsne[:, 1], hue=y, palette='viridis', legend=None)
  1. legend=None은 데이터에 대한 범례가 그래프에 표시되지 않는다. (표시하려면 'full' 또는 'auto')
  2. 범례란? 데이터 그룹의 이름을 그래프에 표시하는 것을 의미
  3. [:, 0]은 첫 번째 열에 해당하는 모든 값을 선택

2. LDA 결과 해석

  • 우선 정리가 아직 끝나지 않았다.
  • 학습을 마무리하며 정리 내용을 확인 해본 결과 의도를 이해할 수 없고 내용이 뒤죽박죽이다.
  • 정확히 어떤걸 위해 사용하고 그 원리가 무엇인지 모르겟다.(어렴풋이는 알겟는데 다른 설명을 찾아보면 아니고...)
  • 내일 강의를 다 듣고 나서 다시 한번 도전 해볼 것이다.

회고

LLM&RAG 강의를 들으며

 

생각보다 접근하기 쉽고 이해하기 좋아서 빨리 끝낫고 Ai모델 활용을 통해 해보고 싶던 AI에게 인생상담 받아보기도 진행해서 아주 만족입니다.

 

그리고 강의 듣는 시간이 빨리 끝나 계획에 없던 머신러닝에 대한 복습도 진행했습니다.

 

머신러닝을 공부하며

 

t-SEN과 LDA의 코드는 이해가 완벽하게 끝났지만 결과 해석을 아직 이해하지 못했습니다. (아쉽..)

 

내일 마저 도전해보고 2개 중 1개는 이해하고싶습니다.

 

수준별 학습을 들으며

 

파이썬 기본 문법 등을 활용해서 문제풀이 강의였습니다.

 

과제롤 받아 혼자 풀어보고 다른 사람들의 풀이도 보며 굉장히 다양한 풀이 방법들이있구나 싶었는데 튜터님께서 보여주시는 방법도 또 다른 방법이여서 매우 놀랐습니다. (join함수와 %나머지 값을 활용하기)

 

자주 문제를 풀어보고 내 것으로 만들고 싶습니다.

 

감사합니다

☑️ 목차

오늘 TIL 순서는

  1. 시작전 마음가짐
  2. Python 과제
  3. 머신러닝
  4. 회고

입니다.

오늘은 따로 필기하거나 작성한 코드가 없습니다.


☑️ 시작전 마음가짐

오늘은 학습에 흐름이 끊기지 않고 한 주제에 매몰 되지않게 순서를 짜 보았습니다.

 

물론 진행하다가 트러블이나 궁금증이 생기면 다시 매몰 될 수 있지만 학습에 오히려 좋은 것 같습니다.

 

어제 하지못한 API키 활용은 꼭 해보고 싶습니다!

 

그럼 학습을 시작하겟습니다.


☑️ Python 과제

1. 대소문자 바꿔서 출력하기

  • 대 소 문자 변환 함수가 upper, lower가 생각나고 한번에 전체 문자열을 바꾸는 함수가 있었는데 라고 생각함
  • 생각나지 않아 검색해보고 swapcase함수를 찾음
  • NameError로 swapcase() 작성 문법 틀려서 메서드 형태로 적용하고 해결
    str = input()
    str_swap = str.swapcase()
    while True:
      if len(str) >= 1 and len(str) <= 20:
          print(str_swap)
          break
      else:
          print('20자 이내의 영어문자만 입력하세요.')
          str = input()
          str_swap = str.swapcase()
          continue

2. 특수 문자열 출력

  • 특수 문자를 그대로 출력하는 방법을 몰라서 검색을 통하여 해결
  • \ 문자열은 \뒤에\를 붙이는 방식으로 출력 가능하는걸 알게 되었습니다. 하지만 너무 복잡해져서 더 알아보고 r string 방법을 찾았습니다.

3. 덧셈 식 출력하기

  • 이 문제는 모르는 부분 없이 금방 완료!!
  • 조건식을 간단하게 하는 방법을 찾아봄 1 <= a <= 100 and 1 <= b <= 100:
    a, b = map(int, input().strip().split(' '))
    if a >= 1 and a <= 100 and b >= 1 and b <= 100:
      print(f'{a} + {b} = {a + b}')

☑️ AI모델활용

강의를 3주차 1강까지 들었습니다.

강의를 들으며

  • 새로운 가상환경을 만들었습니다.
  • numpy 버젼 호환 문제가 발생하여 호환 가능한 버젼으로 다운 그레이드 해주었습니다.
  • transformers와 torch의 호환 문제로 호환되는 버젼으로 다운 그레이드 해주었습니다.
  • 다운그레드 과젱어서 torch vision과 오디오버젼에 문제가 생겼지만 당장 사용하지 않는 라이브러리들이라 변경하지 않았습니다.
  • 3-1까지 설명한 오류는 제외하면 깔끔하게 진행했습니다.
  • API키를 활용하는 모델이 나오지 않아 슬랙 질문방에 공유해주신 코드를 실행해보고 문제 없음을 알게 되었습니다.
  • 내일은 남은 강의를 들으며 나오는 코드와 공유받은 코드의 내부를 내가 바꾸고 싶은대로 해보는게 목표입니다.

☑️ 회고

오늘은 밍글데이로 약간의 쉬어가는 날이였습니다.

 

오늘 밍글데이라는걸 잊어버리고 계획을 잡아 머신러닝 복습과 포트폴리오 도전을 진행하지 못했습니다.ㅜㅜ

 

또한 새로운 챕터 발제가 있었고 내일부터 또 다른 강의를 수강해야할 것으로 보입니다.

 

아직 머신러닝도 복습 마무리 못했는데...

 

우선 강의를 1회 반복을 빠르게 진행하고 다른 복습을 진행하는게 진도 맞추기에 좋을것 같아 원래 한 주 계획이였던 포트폴리오와 머신러닝 복습은 미루어야겟습니다.

 

그리고 수준별 학습 강의를 진행했는데 처음 나오는 과제라서 문제없이 쉽게 풀었지만 튜터님께서 내가 생각한 한가지 방법말고도 여러 방법, 함수 등을 보여 주셨습니다.

 

하루를 마무리할 때 목표는 그 날 수준별 학습 강의 내용을 내 것으로 만들고 마무리하는 것으로 진행 예정입니다.

 

감사합니다.

☑️ 목차

오늘의 TIL순서는

  • 시작전 마음가짐
  • 머신러닝 복습
  • AI모델활용 복습
  • 파이썬 과제
  • 회고 

복습 내용과 코드는 GITHUB링크를 참고해주세요. 

TIL/ML/PCA.ipynb at main · Onesword-Jang/TIL

 

TIL/ML/PCA.ipynb at main · Onesword-Jang/TIL

오늘 배운 것은?! Contribute to Onesword-Jang/TIL development by creating an account on GitHub.

github.com

 

 

 


☑️시작전 마음가짐

오늘의 학습 목표는 ML, AL 복습을 진행하고 API키를 발급 받았기에 AL의 코드를 진행해볼 것입니다.

 

그리고 수준별 학습반의 과제와 포트폴리오 작성를 진행하겟습니다.

 

어제 진행한 ML 복습에서 차원축소 부분의 결과를 해석을 하지못해 갑갑한 마음이있었기에 차원축소 코드 결과를 해석하는데 집중하며 복습을 해야겟습니다.


☑️머신러닝 복습

1. PCA 결과 해석

  • 변수가 너무 많아 기존 변수를 조합해 새로운 변수를 가지고 모델링을 하려고 할 때 주로 PCA를 사용한다.
  • 전체 분산을 95%를 설명하는 주성분을 332개 찾았다.(기존 784차원에서 332차원으로 축소)
  • 각 주성분이 설명하는 분산 비율은 전체 데이터의 변동성을 각 주성분 마다 얼마정도씩 설명해주는지 보여주고 그 값이 제일 큰 주성분을 첫 번째 주성분이라 할 수 있다..
  • 그 332개중에 분산비율이 가장 크고 변동에 영향이 큰 주성분이 X축 두 번째 큰 주성분이 Y축으로 지정 되어서 그래프를 보여준다.
  • 첫번째(x축) 와 두번째(y축) 선을 기준으로 사용해서 데이터 포인트들을 shearing(잡아당김)해서 2차원 그래프로 나타낸다.
  • shearing 했을 때 분산도가 가장 크고 데이터 별로 잘 뭉쳐져있으면 잘 분류한것이라 볼 수 있다.

2. 변동이 많을수록 좋은 이유

  1. 데이터가 다양한 값으로 퍼져있다는 뜻으로, 주성분이 데이터의 다양한 특성을 잘 포착하고 있다는 의미 (데이터의 중요한 구조와 패턴을 더 많이 담고있다.)
  2. 차원 축소에서 고차원 데이터 중 불필요하거나 정보량이 적은 차원을 제거하고, 중요 패턴이 담긴 주성분을 유지하여 차원을 축소한다.
  3. 잡음 제거를 잘한 것이다.

3. 시각화한 그래프를 해석하는 방법

  • mnist데이터셋으로 보았을 때 가장 변동성이 큰 주성분이 X축, 두 번째로 큰 주성분이 Y축이라 볼 수 있고 각 데이터 포인트의 색들은 분류하고자하는 레이블(0~9)를 말한다.
  • 각 색깔 별로 잘 뭉쳐있다면 첫 번째 두 번째 주성분으로 잘 분류가 가능하다라는 의미가 된다.
  • 만약 너무 흩어져있다면 선택된 주성분들의 분류 성능이 좋지 못하다라는 뜻으로 해석이 가능하다.

4. PCA를 사용하는 상황

  1. 차원의 저주 해결이 필요할 떄(변수가 너무 많아 특서을 찾기 어려운 경우)
  2. 다중공선성 문제가 있을 때(변수들 간에 높은 상관관계가 존재하는 경우 모델이 특정 특성에 과도하게 의존해 불안정한 결과가 나오기 때문)
  3. 계산 비용 절감이 필요할 때(대용량 이미지 데이터셋 처리)
  4. 노이즈 제거가 필요할 때(예: 센서 데이터의 노이즈)

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키를 사용해보고 이 블로그와 유튜브 등 영상까지 참고해서 포트폴리오 작성에 대한 철저한 준비와 도전해보겟습니다.

 

https://velog.io/@productuidev/%EC%A4%80%EB%B9%84%ED%95%98%EA%B8%B0-7-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-GitHub

 

[준비하기] (7) 포트폴리오 - GitHub

인프런 비전공자를 위한 개발자 취업 강의 (7)

velog.io

 

☑️목차

오늘의 TIL 순서로는

  • 시작전 마음가짐
  • AI모델활용 강의
  • 머신러닝 비지도학습
  • 회고

입니다.

강의 학습과 복습 코드는 GITHUB링크 확인!

TIL/AI/AI5_6_8.ipynb at main · Onesword-Jang/TIL

 

TIL/AI/AI5_6_8.ipynb at main · Onesword-Jang/TIL

오늘 배운 것은?! Contribute to Onesword-Jang/TIL development by creating an account on GitHub.

github.com

 

 


☑️시작전 마음가짐

오늘은 AI모델활용 강의를 마무리하고 머신러닝 비지도학습을 복습할 계획입니다.

 

딥러닝, AI모델활용 강의를 들으며 다른 강의보다 이해가 안가고 어렵다고 생각이 드는 순간이 많았습니다.

 

이러한 부분은 파이썬을 처음 만났을 때 그리고 머신러닝을 처음 만났을 때도 마찬가지였지만, 현재 파이썬과 머신러닝의

부분을 복습을 진행하면 이해가 쉽고 학습속도가 굉장히 빨라진것을 느낌니다.

 

딥러닝과 AI모델활용 부분도 답답해도 참고 많은 복습으로 학습을 진행하면 내 것이 될거라 생각하고

 

화이팅!!!!

 

을 외치며 학습을 시작하겟습니다!!!


☑️AI모델활용 5주차 (6~8)

📚5-6

1. 사용 모듈 설명

1) ultralytics

YOLO

  • 객체 탐지 모델을 사용하기 위한 클래스이며, 다양한 메서드를 통해 *이미지, 비디오에서 객체를 인식하고 처리

2) cv2

  • OpenCV 라이브러를 사용하는데 필요한 모듈
  • 이미지, 비디오를 다루는데 유용(스트림 처리, 영상처리 기능)

3) PyQt5.QtWidgets

QApplication

  • PyQt5 애플리케이션을 초기화하고 실행하는 클래스
  • GUI 프로그램의 기본 인스턴스를 생성QLabel
  • 텍스트나 이미지를 표시하는 라벨 위젯QVBoxLayout
  • 위젯들을 수직으로 정렬할 때 사용QWidget
  • GUI 프로그램의 기본 창 역할을 하는 기본 위젯QPushButton
  • 클릭 가능한 버튼을 생성하는 위젯

4) PyQt5.QtCore

QTimer

  • 타이머를 설정하고 일정한 시간 간격으로 이벤트를 발생시키는 클래스

5) PyQt5.QtGui(이미지를 최적화 해서 빠르게 표시

QImage

  • 이미지 데이터를 처리하고 표현하기 위한 클래스(이미지를 포맷으로 저장, 변환 기능)QPixmap
  • 화면에 이미지를 표시하기 위한 클래스

2. super 메서드

  • super() 메서드는 파이썬에서 부모 클래스의 메서드나 속성을 자식 클래스에서 호출할 때 사용
  • 다중 상속이나 클래스 간 메서드 호출 순서를 정할 때 유용

3. yolov8x.pt

  • YOLOv8모델의 사전 훈련된 가중치 파일
  • 객체 동시 탐지 및 분류

4. if문의 is not None

  • 강의 코드를 예로 들면
  • self.capture 변수가 None이 아닐 때, 즉 유효한 값이 있을 때만 조건문이 실행되도록 하는 것
      # 웹캠 중지
      def stop_webcam(self):
          """웹캠을 중지하고 타이머를 멈춤"""
          self.timer.stop()
          if self.capture is not None:
              self.capture.release()
    5. release 메서드
  • 보통 리소스를 해제하는 데 사용되는 메서드
  • 주로 OpenCV와 같은 라이브러리에서 비디오 캡처 객체나 파일을 다룰 때 사용

6. 라이브러리 에러

  • dotenv 라이브러리를 pip install python-dotenv하고 성공적으로 설치했다고 알림을 받음
  • 파일에서 실행시키니 모듈 찾을 수 없음 에러가 나옴
  • 재설치, 디렉토리 경로 탐색, 파이썬 인터프리터 경로 탐색 등 많은 방법을 사용해 봄
  • 가상환경을 재구축해서 해결하기에는 다른 방법으로 해결 하고 싶었음
  • 혹시 VSCode로 실행하면 되나 싶어 진행해 본 결과 해결 완료
  • 맞지 않던 인터프리터 경로나 버젼 등이 VSCode로 실행하니 완벽해졋음
# 현재 디렉토리 확인
dir # bash
# 파이썬 스크립트에서 경로 확인
import os

print("Current Working Directory:", os.getcwd()) # 현재 작업 디렉토리 확인

if os.path.exists(".env"): # .env 파일 존재 여부 확인
    print(".env 파일이 존재합니다.")
else:
    print(".env 파일이 존재하지 않습니다.")
# 사용중인 파이썬 경로 확인
import sys
print(sys.executable)

📚5-7

1. 사용 모듈 설명

1) fastapi

FastAPI

  • python으로 RESTful API를 빠르고 쉽게 구축하게 한다.
  • @app.get() 또는 @app.post()와 같은 데코레이터를 API 엔드포인트를 정의하고 요청을 처리하기 위해 사용한다.Request
  • 클라이언트의 HTTP요청에 대한 정보 포함
  • 헤더, 경로 매개변수, 본문 데이터 등의 다양한 정보를 가져오거나 조작할 때 사용Form
  • HTML 폼 데이터를 처리하는 데 사용되며, POST 요청으로 전송된 데이터의 필드를 정의

2) fastapi.templating

Jinja2Templates

  • FastAPI에서 HTML 템플릿 렌더링을 지원하는 템플릿 엔진
  • HTML 파일 내에 Python 코드와 데이터를 삽입해 동적으로 웹 페이지를 생성 가능
  • templates 디렉터리에 HTML 파일을 저장하고, 데이터를 템플릿에 전달하여 동적으로 웹 페이지를 생성

3)fastapi.responses

HTMLResponse

  • FastAPI에서 HTML 형식의 응답을 반환하는 클래스
  • 콘텐츠를 클라이언트에 직접 반환해야 할 때 사용

4) fastapi.staticfiles

StaticFiles

  • FastAPI에서 정적 파일을 제공하는 데 사용
  • 지정한 경로에 저장된 정적 리소스를 엔드포인트에 연결하여 사용자가 접근할 수 있도록 한다. (css, javascript, images 등)
  • 요소는 숫자, 문자열, 다른 리스트 등 어떤 자료형이든 가능

5) OpenAI

  • OpenAI API를 Python에서 호출할 수 있도록 지원하는 패키지
  • AI 기반 응답을 생성하고, 텍스트를 생성하거나 요약하는 등의 작업을 수행할 수 있다.

2. append 메서드

  • 리스트(list) 자료형에서 사용되는 메서드
  • 리스트의 끝에 새로운 요소를 추가하는 역할

📚5-8

1. 사용 모듈 설명

1) import os

  • 운영체제와 상호작용하기 위한 표준 라이브러리
  • 파일경로, 환경변수, 설정, 디렉토리 관리 등

2) import requests

  • HTTP요청을 보내기 위한 라이브러리
  • GET, POST 등 다양한 HTTP 요청을 사용하여 웹 API와 상호작용 한다.

3) dotenv

  • .env 파일에서 환경 변수를 로드하는 함수

4) PyQt5

QtWidgets

  • PyQt5의 다양한 GUI 위젯을 포함한 모듈(버튼, 라벨, 텍스트 필드 등 포함)

5) PyQt5.QtMultimedia

QMediaPlayer

  • 오디오와 비디오 파일을 재생할 수 있는 클래스QMediaContent
  • QMediaPlayer에 재생할 미디어 파일이나 스트림을 설정하기 위한 클래스

6) transformers

AutoTokenizer

  • 텍스트를 모델이 이해할 수 있는 형태로 변환AutoModelForSeq2SeqLM
  • 시퀀스 간 변환을 수행하는 모델을 자동으로 로드하는 클래스
  • 텍스트 요약, 번역, 질문 생성 모델 등

7) pydub

AudioSegment

  • 오디오 파일을 처리할 수 있는 클래스
  • 길이 조절, 불륨 조절 등 편집 가능

8) pydub.playback

  • AudioSegment 객체를 재생하기 위한 함수
  • 오디오를 파이썬 코드에서 직접 재생할 수 있다.

9) import io

  • 입력과 출력을 위한 표준 라이브러리

📚DBSCAN

모델학습 및 예측

  • df['Cluster]로 지정하는 이유는 df['Cluster']는 각 데이터에 대해 군집 라벨을 예측하고 df데이터 프레임의 새로운 열에 저장한다.
df['Cluster'] = dbscan.fit_predict(X)
`

📚PCA

fetch_openml

  • 데이터셋 이름이나 ID를 기반으로 OpenML에 접근하여 데이터를 다운로드하고, Pandas DataFrame이나 numpy.array 형식으로 데이터를 반환

파라미터

  1. data_id: OpenML 데이터셋 ID를 지정하여 특정 데이터셋을 가져온다.
  2. name: 데이터셋의 이름을 지정할 수도 있고, 이름을 사용하는 경우 가장 최신 버전의 데이터셋이 로드된다.
  3. version: 데이터셋 버전을 지정하고, 생략 시 가장 최신 버전이 자동으로 선택
  4. as_frame: True로 설정 시 데이터셋을 Pandas DataFrame으로 반환하고, 기본값은 None으로 설정 된다.
  5. return_X_y: True로 설정하면, 독립변수와 종속변수를 (X, y) 형태의 튜플로 반환하여 모델 학습에 바로 사용할 수 있게 한다.

활용

  • 유명한 공개 데이터셋(MNIST, Iris, CIFAR-10 등)을 쉽게 가져와서 머신러닝 모델을 학습할 수 있다..
  • 다양한 데이터셋을 테스트하거나 비교하는 실험을 할 때 빠르게 데이터를 가져올 수 있어 편리하다.

☑️회고

AI모델활용 강의를 들으며

 

코드들이 매우 길기도하고 강사님께서 각 요소에 대하여 자세하게 알면 좋지만 어떻게 흘러가는지 파악만 해도 좋다고 말씀 하셔서 코드 전체를 해석하지는 않고 코드를 보면서 내가 궁금하고 모르는 부분에 대하여 정리를 했습니다.

 

또한 오늘 드디어 API키를 결제한 뒤 발급 받았습니다~.

 

그런데 여기서

 

.env 파일을 만들고 import os를 했을 때 문제를 만났습니다.

 

난 분명 아나콘다 프롬프트에서 pip install python-dotenv을 진행하고 성공적으로 설치가 완료되었다고 나오는데

 

왜!!

 

모듈에러가 나오는지!!! 그래서 해결 방법을 찾아보았고 결국 VSCode에서 .py파일을 만들어 진행하니 문제가 없음을 알게

되었습니다....(내 3시간이 사라졌어요ㅜ)

 

쥬피터 노트북만 사용하고 싶었는데 욕심을 버리고 텍스트형 AI모델 작업은 VSCode로 진행해야할 것 같습니다.

 

복습을 진행하며

 

모듈에러로 시간이 많이 소비되어 많은 복습을 진행하지 못했지만 열심히 진행했습니다.

 

DBSCAN은 이해가 되고 모르는 요소들이 없었습니다.

 

차원축소인 PCA를 학습하며 분명 보았었지만 기억이 나지 않는 것이 있었고

 

결정적으로

 

결과를 해석하지 못해 약간 갑갑한 마음이 있었습니다.

 

내일 해석하는 방법에 대하여 알아보는 시간을 가져야겟습니다.

 

마지막으로

 

포트폴리오를 도전하려고했지만 오늘도 다른 학습에 정신이 팔려 진행하지 못했습니다.

 

내일부터는 수준별 학습의 과제도 진행해야하니 더 바쁠텐데..

 

시간이 나면 진행하고 만약 못한다면 주말을 통으로 비워 시도해보야겟습니다.

+ Recent posts