목차

오늘의 TIL 순서는

  1. 시작전 마음가짐
  2. Python 문제풀이
  3. 머신러닝 t-SEN 결과해석
  4. AI모델활용 복습
  5. 크롤링 특강
  6. 회고

입니다.

강의 필기와 코드는 GitHub 링크를 참고해주세요

 

TIL/ML/t-SNE.ipynb at main · Onesword-Jang/TIL

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

github.com

 

 


시작전 마음가짐

오늘은 피로가 많이 축척된듯한 시작입니다. 눈이 크게 안떠지네요ㅎㅎ

 

내일 새로운 LLM&RAG 개긴과제가 있는 만큼 밀렸던 복습을 빠르게 진행할 예정입니다.

 

설정한 목표를 빠르게 달성하고 다른 복습까지 진행되었으면 합니다.

 

그리고 데이터 분석이 중요해 보이는데 관련된 자격증이나 학습자료를 찾아볼 생각입니다.

 

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


Python문제풀이

1. 문자열 곱하기

  • answer에 바로 'my_string*k'는 출력 값 오류 => ''(따옴표를 빼면 정상작동)
  • answer = print('my_string * k',end = "") 출력 값 오류
  • join함수를 사용해서 성공
def solution(my_string, k):
    answer = ''.join(my_string * k)
    return answer

2. 더 크게 합치기

  • 문자열로 바꾸고 진행 한 뒤 정수로 데이터 타입 바꾸기 까지 혼자 해냄
  • max함수가 생각나지 않아서 찾아보았음
def solution(a, b):
    if 1 <= a <= 10000 and 1 <= b <= 10000:
        ab = int(str(a) + str(b))
        ba = int(str(b) + str(a))
        answer = max(ab, ba)
        return answer
# f-스트링 사용
def solution(a, b):
    return int(max(f"{a}{b}", f"{b}{a}"))

3. 두 수의 연산값 비교하기

  • if, elif, else를 사용했는데 elif문 문법 틀림
  • 완료
def solution(a, b):
    ab = int(str(a) + str(b))
    ab2 = 2 * a * b
    if ab > ab2:
        return ab
    elif ab == ab2:
        return ab
    else:
        return ab2
# 짧게 구하는 식
# max함수는 수가 같을 때 항상 앞의 수를 가져온다.
def solution(a, b):
    return max(int(str(a) + str(b)), 2 * a * b)

머신러닝 t-SEN

이번엔 수학적 개념을 신경 쓰지 않고 오로지 t-SEN이 무엇을 선택하며 진행 되는지 그리고 이 분류방법으로 하는게 무엇인지에 대하여 알아보았습니다.

 

의외로 접근이 쉬웠지만 뭔가 알다가 마는 느낌이 없지않아 있었습니다.

목적

  • 복잡한 데이터의 시각화
  • 데이터의 군집 구조나 유사성을 시각적으로 파악

결과 해석

  • 숫자가 시각화에서 분리된 형태로 잘 모여 있다면, t-SNE가 숫자 간의 패턴 차이를 잘 포착했다는 것을 의미
  • 특정 숫자들끼리 서로 겹쳐 있다면, 해당 숫자 간의 특징이 비슷하여 모델이 쉽게 구분하지 못할 가능성이 있음을 의미

AI모델활용 복습

오늘은 5-2 ~5-5 강의까지 수강하였고 큰 트러블은 만나지 않았습니다.

 

복습을 통해 export를 터미널에 사용해서 API키를 사용하는 방법을 알게 되었습니다.

 

이미지와 음성 생성 Ai 코드를 작성해보았는데 일반적인 코드는 어느정도 어떤 기능이구나 하면서 이해가 갓는데 API키를 입력 시키거나 자신의 목소리 데이터는 어떻게 학습 시키는지 모르겟습니다.

 

다음에 기회가 생긴다면 직접 진행해보는 것이 가장 좋은 학습 방법이라 생각이 들었습니다.


크롤링 강의(동적 크롤링)

오늘 몸이 안좋아서 크롤링 강의는 영상이 올라오면 다시 각 잡고 공부해야겟다는 생각으로 가볍게 수강하였습니다.

 

코드를 수정하고 설명하는 부분은 따라가면서 실행은 시켜보지 않았습니다.

 

이 크롤링을 이용해서 많은 정보를 얻을 수 있을 뿐만 아니라 다양한 형태의 데이터를 가지고 올 수 있어 보여 굉장히 효율적이고 좋은 방법이라 생각이 들었습니다.

 

대학시절 상권분석을 해본적이있지만 단순히 포털 싸이트에서 파일을 다운받아 일일이 읽으며 분류했던 기억이있습니다.

 

파이썬과 크롤링을 합치니 포털싸이트의 정보보다 더욱 최신화된 정보와 원하는 정보만을 다룰 수 있어 왜 이렇게까지 인공지능 및 코딩에 열광하는지 조금이나마 알게 된것같습니다.


회고

오늘 오전 학습을 하던 중 아버지께서 응급실에 진료를 보러가신다고 하여 운전을 못하실 상황을 대비해 외출을 하였습니다.

 

굉장히 오랜만의 외출이기도 하고 오랜만에 운정을 한 탓에 몸이 긴장을 한 것인지 다녀 온 이후로 몸이 굉장한 피로감을 표출 하더군요.

 

다행히도 아버지는 몸에 이상이 없는 상태셨고 저는 어머니가 대신 보호자 역할로 오셔서 1시간만에 복귀하여 다시 학습을 진행했습니다.

 

Python문제풀이를 하며

 

파이썬 문제는 언제나 만나면 머리가 텅 비워지는 것같습니다.

 

하지만 천천히 생각하고 생각나는대로 써내려가다보면 어디가 틀린지 알게 되는데요 아직 문제를 푼다는것에 익숙치않아 그런듯합니다.

 

또한 수준별 학습 강의에서 혼동하기 쉬운 형태들과 현업에서 자주 쓰는 함수들을 알려주어 좋았습니다.

 

머신러닝 결과해석을 하며

 

이전의 머신러닝 결과를 분석하며 느낀 것인데 수학적 개념과 시각화된 자료들을 찾아보며 이해도는 높아졌지만 굉장한 시간이 걸렸다고 생각합니다.

 

그래서 오늘은 단순히 t-SEN의 목적과 과정 결과를 보는 방법 등을 위주로 학습하였고 이는 1시간이 조금 넘게 걸리며 짧은 시간만에 끝을 볼 수 있었습니다.

 

이해력을 높이는 것도 좋지만 저는 현재 커리큘럼을 따라가는 입장이니 빠르게 지나가야할건 분명히 해야할 것입니다.

 

AI모델활용 복습을 진행하며

 

음성 및 이미지를 사용하는 AI모델이 작동하는 것을 보는건 언제 봐도 신기하고 재미있습니다.

 

아직 실행을 시켜보지는 못했지만 진행해보면 많은 아이디어들이 떠올라 한동안 가지고 놀 수 있을 정도로 사용해보지 않을까 싶습니다.

 

크롤링 강의를 들으며

 

와 내가 대학 시절에 했던 분석은 거의 무의미한 행동이였구나라는 생각이 머리를 지배하는 강의였습니다. 그만큼 충격으로 다가왔죠

 

저는 지금 이 커리큘럼 과정을 밟으며 데이터를 분석하는 일에 관심이 많이 가고있습니다.

 

크롤링을 자세하게 배워보고 싶습니다.

목차

오늘의 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 가독성을 높이기 위해

 

학습을 시작하며 드는 생각

 

공부를하며 모르는 부분들과 실습을 진행하며 만난 오류들을 정리

 

공부를 마무리하며 회고

 

순서로 진행할 것입니다.

 

필기와 코드 설명은 쥬피터 노트북 코드상자에 정리할 것으로 GITHUB링크를 참고해야합니다.

 

TIL/AI/AI_5_1-5.ipynb at main · Onesword-Jang/TIL

 

TIL/AI/AI_5_1-5.ipynb at main · Onesword-Jang/TIL

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

github.com

 

 


☑️ 학습 시작

오늘의 공부는  AI모델활용 강의  5-5까지 듣고 머신러닝의 비지도 학습을 복습할 것입니다.

 

강의만 듣고있으면 12시간 중 절반의 시간을 멍 때리기 때문에 강의양을 조절했습니다.

 

지금 까지 강의를 들으며 느낀 생각은

 

AI모델을 활용하면 정말 다양하고 내가 원하는게 무엇이든지 만들어 낼 수 있을거라는 생각이 들었습니다.

 

그 만큼 조심해야하는 부분이 많고 세세하게 설정해야하는 부분이 많아 보여 어렵게 느껴지지만 

 

나중에 숙달이 되었을 땐 꼭 궁금하거나 만들고 싶다고 생각이 드는 모델을 만들어 보고싶습니다.


☑️ 학습 중 만난 문제

AI모델활용 5 - 1

1. FastAPI 서버 실행 부분에서 ipynb파일을 바로 실행 시킬 수 없음 (FastAPI를 정의한 app을 찾을 수 없다고 Error가 나옴)

FastAPI를 사용할 땐 py파일을 만들어 사용하거나 vscode에서 만들면 쉽다.

쥬피터 노트북에서 사용하는 3가지 방법이있다.

 

1) 매직 명령어 사용

%%writefile AI_5.py
from fastapi import FastAPI
app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

2) subprocess 사용

import subprocess
subprocess.run(["uvicorn", "AI_5:app", "--reload"])
  • 이 방법은 Uvicorn 프로세스에 점유되어 다른 셀을 사용할 수 없는 한계가 있다.

3) 별도 터미널에서 실행

  • 일반 터미널이나 Anaconda Prompt에서 FastAPI를 실행하는 것이 가장 간편한 방법
  • Jupyter Notebook은 FastAPI 서버와 독립적으로 사용할 수 있어, 서버 실행에 영향을 받지 않는다.

4) 쥬피터 노프북 셀에서 사용 방법은 3번 째 코드

2.  port의 종류

- 8000 : 테스트 용

 

- Well-Known Ports(0-1023): 이 범위의 포트는 표준화된 프로토콜에 의해 사용

  • 80 : HTTP
  • 443 : HTTPS
  • 25 : SMTP
  • 21 : FTP

- Registered Ports (1024-49151): 이 범위는 특정 애플리케이션에 의해 등록되어 사용

  • 3306 : MySQL
  • 5432 : PostgreSQL

- Dynamic/Private Ports (49152-65535): 이 범위의 포트는 동적으로 할당되는 포트로, 일반적으로 클라이언트 애플리케이션이 서버에 연결할 때 임시로 사용

 

AI모델 활용 5 - 4

1. numpy와 ultralytics의 컴파일러 문제와 빌드도구(meson)의 경로 관련 오류

이 문제는 주로 Visual Studio C++ 빌드도구가 누락되어 발생한다.

해결방법

https://visualstudio.microsoft.com/ko/visual-cpp-build-tools/

  1. Visual Studio C++ 빌드 도구 설치(설치 중 "Windows용 C++ CMake tools" 같이 다운하면 좋음)
  2. 사전 빌드된 numpy설치 (1.24.3)
  3. 설치 재시도(사전 빌드 numpy설치 후)

☑️ 머신 러닝 비지도 학습

🔎 K-means-clustering

1. matplotlib의 패키지 의존성 문제로 설치 불가

  • 딥러닝, AI모델활용 강의에 사용하던 가상환경을 사용해서 모듈들의 버젼 때문으로 인지
  • 머신러닝 거성환경을 사용하고 update를 한 뒤 해결!

2. 클러스터링 모델 적용 후 생성된 군집 번호 열추가 안함

  • 할당 단계를 거치고 결과를 반환해줄 열을 추가 하지않아 오류가 난 것으로 인지
  • Cluster열을 추가하는 코드 추가
    # KMeans 모델 생성 및 군집 추가
    kmeans = KMeans(n_clusters=5, random_state=42)  # 군집 개수(n_clusters)는 조정 가능
    data['Cluster'] = kmeans.fit_predict(data_scaled)  # 클러스터 결과 추가

🔎 계층적 군집화

1. 불러오는 모듈 정의

from sklearn.cluster import AgglomerativeClustering
  • AgglomerativeClustering은 sklearn의 군집화 알고리즘 중 하나로, 상향식 계층적 군집화 방식
    import scipy.cluster.hierarchy as sch
  • scipy.cluster.hierarchy는 SciPy에서 계층적 군집화를 위한 다양한 함수와 도구를 제공하는 모듈
  • 덴드로그램(Dendrogram)을 시각화하는 dendrogram 함수와, 상향식 군집화를 수행하는 linkage 함수를 제공

2. 덴드로그램이란?

  • 데이터 포인트 간의 유사도와 계층적 클러스터링 결과를 시각화하는 트리 형태의 다이어그램
  • 데이터가 군집화되는 과정을 단계별로 표시
  • 특정 위치에서 가지가 나뉘는 위치를 기준으로 최적의 클러스터 수를 직관적으로 파악 가능

3. k개를 찾는 방법

  • 엘보우 방법
  • 실루엣 분석(-1~1): 1에 가까울수록 잘 분리된 군집
  • 지식 및 경험
  • 일반적으론 2~10개 정도 사용해서 최적을 찾음(많을수록 오버피팅이 될 수 있음)

4. plt.scatter 간소화

colors = ['red', 'blue', 'green', 'cyan', 'magenta']
for i, color in enumerate(colors):
    plt.scatter(X_scaled[y_hc == i, 0], X_scaled[y_hc == i, 1], s=100, c=color, label=f'Cluster {i+1}')
  • enumerate는 파이썬 내장 함수로, 리스트와 같은 순회 가능한(iterable) 객체를 반복하면서 각 요소의 인덱스와 값을 동시에 가져올 수 있게 해준다.

 


☑️ 회고

AI모델활용 강의를 들으며

 

아직 저는 API 키를 발급 받지 않은 상태에서 진행했기에

 

직접적으로 결과를 볼 수 없었는데

 

강사님께서 직접 음성 생성 AI을 활용하는 모습을 보여주셔서 굉장히 흥미로웠습니다.

 

머신러닝 비지도 학습을 진행하며

 

이전에 학습할 때 보다 학습하기 수월했으며 재미있었다.

 

하지만 아직도 모르는 부분 까먹은 부분이 많아 보인다.

 

마지막으로

 

강의를 듣다가 주말에 포트폴리오를 만드는 시간을 가지려했었단걸 떠올렸습니다.

 

오늘이 저의 생일이라 약속이 많아 진행하지 못했는데 이번 주에 도전하는 시간을 매일 1~2시간 정도 가져야겟습니다.

 

 

☑️ 취업 특강 및 자기관찰

🔎 필요스킬

데이터 수집, 처리, 분석 스킬, 문제해결능력, 데이터 기반 의사결정 능력

python, pytorch, 머신러닝, 딥러닝 알고리즘, 데이터 시각화 능력

 

🔎 직업군

- 데이터 사이언티스트: 데이터 분석, 모델링, 예측 등을 통해 시스템 개발 및 개선

- 데이터 엔지니어: 데이터 수집 파이프라인 설계, 구현, 배포, 데이터 수집

- AI연구원: 새로운 AI기술을 연구하고 개발하여 AI분야에 기여

- AI프로덕트 매니저: AI 기반 제품의 개발 및 출시 전략을 수집하고 시장 트렌드를 분석

- 머신러닝 엔지니어: 머신러닝 알고리즘을 설계, 구현, 배포하고 AI모델 성능을 최적화

- 데이터 엔지니어

- 머신러닝 엔지니어

- 백엔드 개발자

 

🔎 코딩 테스트 준비: 프로그래머스, 백준, LeetCode

 

🔎 내가 준비해야할 것들

- 마크다운 사용법

- 노션 사용법

- 이력서 포트폴리오 작성 노하우 늘리기

- python, pytorch, 딥러닝, 머신러닝, 데이터 분석 공부

 

 

🔎 내가 걱정하는 것들

- 지방에서는 취업하기 많이 어려운지

- 문서 작성 능력이 너무 낮다

- 직업군에 대한 정보들이 감이 잡히지 않음

- 소통, 공감 능력은 좋다고 생각하지만 문제 해결 능력이 좀 떨어짐(감정적인 편)

 

 

🔎 나의 장점

- 책임감이 강함

- 상대입장에서 생각하고 행동하는 편  

- 의견이 많고 자주 질문하는 편

- 의견 공유하는 것을 좋아함(쌍방향)

- 무언가를 많드는 과정을 좋아함(내가 만든것을 공유하고 반응 보는 것이 제일 좋음)

 

🔎 나의 단점

- 참을성이 부족함(한번만 해도 될 일을 먼저 진행해보고 두번하게 되는 경우가있음)

- 잘휘둘리는편

- 걱정이 많아 생각이 많음

- 깊게 생각하는 힘이 부족함(얕은 생각에서 관련도가 적은 것들을 신경쓰고 그 부분에만 집중해서 중요한 부분을 놓치는 경우가 많음)

혼자서 오해를하고 트러블이 발생하게 만드는 경우가 가끔있음 (그럴수록 더욱 이야기하고 오해를 풀려고 노력 함)


☑️ 1차 커리어 코칭

 

커리어코치: 임하늘 코치님

 

코칭 시간 14:25 ~ 14:50

 

내용

1. 내가 어떻게 어떤 생각으로 내일배움캠프에 신청하여 오게 되었는지 설명

 

2. 오늘 오전에는 어떤 학습을 하였는지

 

3. 채용 사이트 추천

 

4.인텔리픽 커리어 코칭 시스템 소개

 

5.포트폴리오, 이력서 등 작성 및 예시 사이트 추천

 

6. 현재 가지고있는 고민 상담

 


 

오늘은 1차 커리어 코칭을 진행했습니다.

 

커리어 코칭을 진행하기 전 오전에는 일전에 진행했던 취업특강(김대영 튜터님)의 강의를 복습했다.

 

강조되고 내가 미리 준비해야하는 부분을 파악해 포트폴리오와 이력서 작성에 대한 구상하는 시간을 가졌습니다.

 

노션을 사용해서 나의 포트폴리오 페이지를 만들기 위해 유튜브의 노션으로 포트폴리오 강의를 시청하였고

다른 사람들의 노션으로 작성한 포트폴리오를 볼 수 있는 방법으로 살펴 보던 중 데이터 분석가님의 포트폴리오를 보게 되었다.

 

비전공으로 데이터 분석가가 되기까지의 내용이있었고 흥미를 가지고 알아 보았습니다.

 

데이터 분석가 답게? 취업 싸이트에서 필수조건, 우대사항의 데이터를 가져와서 분석하여 내가 가진 기술, 필요한 기술 등 시각화하여 우선 순위를 정하는 방법에대한 소개를 봤습니다.

 

그리고 커리어 코칭을 받으며 느낀점을 위 진행 순서대로 말하겟습니다.

 

1. 지금까지 내가 걸어온 길이 너무 여기저기를 건들이면서 취업까지했지만 시도하기 전에 포기를 한 경험으로 자존감이 매우 떨어진 상태였고 이 자존감을 다시 올리기 어렵다고 생각했다. 하지만 임하늘 코치님께서는 다른 시선으로 다양한 일을 시도해보았고 본인 역량을 잘 판단하고있다고 말씀해주셨습니다.

 

아직 내가 나에 대한 실망감은 남아있지만 코치님의 평가를 듣고  다른 시선으로 나를 보는 방법을 배운것 같으며 조금이지만 자존감이 회복 된것 같습니다.

 

2. 오전에 진행한 학습을 말씀드리니 여러가지 참고 싸이트를 보여주셨습니다. 아직 다 살펴 보진 않았지만 잘 활용해보겟습니다.

 

3, 4. 코칭 시스템이 어떻게 진행 되는지 확인하였고 인턴신청, 본인이 원하는 방향으로 코칭 등을 알아보았고 잘 활용해 보아야겟습니다.

 

5. 노션으로 작성을 하려고 했는데 git으로 작성해서 배포하는게 좋다고 말씀하셔서 git으로 진행해보아야겟습니다.

 

6. 지금 학습상태로는 당연히 현업에 도움이 되지는 못하지만 꾸준히 열심히하면 현업에서 할 수 있을 것이다.


☑️ 딥 러닝 도전과제 

 

torchtext에서 OSErorr를 만나 해결해보려고 pytorch를 uninstall 해보고 다시 다운 받아보고 가상공간에서 다시 시도해보고 많은 시도를 했고 pytorch를 다운 받을 때 많은 시간이 소요되었다.

 

결국 튜터님을 찾아가서 물어보았고 답은 정말 간단했다. torch에서 최신버젼부터 window에는 text를 지원하지 않아서 그렇다고 한다.

 

그래서 pytorch를 다운그레이드 시켜주어서 해결하였다.

더보기

pip install torch==2.2.2 torchtext==0.17.2

 

이제 OS문제를 해결했으니 도전과제를 시작하였다.

 

도전과제를 진행한게 벌써 5일이 지났다.

 

딥러닝 모델인 LSTM모델을 구현하다가 시간이 너무 오래걸려서 포기하고 머신러닝에 대한 이해도 부터 높여야겟다는 생각으로 머신러닝 모델 학습을 진행해 왔었는데 너무 다 잊어 버리기 전에 다시 한번 복습한다는 생각으로 오늘 다시 딥러닝 모델 구현을 시도해 보았다.

 

우선 전처리, feature 분석, 데이터 시각화(막대그래프) 부분은 얼추 기억하고있어넘어가고 LSTM모델 학습 코드 공부를 진행했다.

 

  • torch.nn
더보기

import torch.nn as nn

- torch.nn 모듈은 신경망을 구축하기 위한 다양한 함수들을 포함한다.

- 주로 nn.Module, nn.Linear, nn.Conv2d, nn.ReLU 등 신경망의 계층을 구성하거나 손실 함수를 정의할 때 사용한다.

 

그럼 여기서  nn.Module, nn.Linear, nn.Conv2d, nn.ReLU 등을 정의하는 이유를 알아보자

 

nn.Module

목적: 모든 신경망 레이어와 모델의 기본 클래스이다.

역할: 사용자 정의 신경망을 만들 때 nn.Module을 상속받아 신경망 계층들을 구성하고, forward()메서드를 정의해 데이터를 순차적으로 전달하는 방식을 설계한다.

장점: 자동 미분, 학습, 평가 모드를 쉽게 전환 가능, 신경망의 구조를 객체 지향적으로 구성하여 코드의 재사용성과 관리성 높여준다.

 

nn.Linear

목적: 인공신경망에서 완전 연결(filly connected, FC) 계층을 나타내는 클래스

역할: 입력 데이터를 가중치와 곱하고, 편향(bias)를 더하는 "선형 변환"을 수행한다. 주로 신경망의 출력층이나 중간층에 사용

장점: 입력과 출력 차원을 지정하여 데이터를 학습 가능한 파라미터(가중치와 편향)를 통해 변환함으로써 모델이 데이터의 특성을 학습하도록 도와준다.

 

nn.Conv2d

목적: 2차원 합성곱(convolution) 연산을 수행하는 계층(이미지 처리)

역할: 입력 데이터(예: 이미지)에서 특징(feature)을 추출하는 데 중요한 역할이며, 필터(커널)를 사용하여 입력 데이터를 슬라이딩하며 연산을 수행하고, 이미지의 특정 패턴이나 특징을 학습

 

nn.ReLU

목적: Rectified Linear Unit 활성화 함수로, 입력 값을 양수는 그대로 유지하고 음수는 0으로 만드는 비선형 함수다.

역할: 신경망에 비선형성을 추가하여 더 복잡한 패턴을 학습할 수 있게 합니다. 이는 선형 연산만으로 이루어진 모델이 해결하지 못하는 문제를 해결하도록 도와준다.

장점: 기울기 소실 문제를 방지, 대부분 신경망에서 기본 활성화 함수로 자주 사용한다.

 

  • optim
더보기

import torch.optim as optim

- 매개변수를 학습하기 위한 최적화 알고리즘을 제공하는 모듈이다.

- 다양한 최적화 알고리즘(SGD, Adam, RMSprop)이 포함, 이를 통해 모델의 손실을 줄이는 방향으로 학습이 진행 된다.

 

  • get_tokenizer
더보기

from torchtext.data.utils import get_tokenizer

- torchtext 라이브러리에서 제공하는 유틸리티 함수로, 텍스트 데이터를 단어 또는 문장 단위로 나누기 위해 토크나이저를 생성할 때 사용한다.

- basic_english, spacy와 같은 다양한 옵션을 지정할 수 있어, 영어 텍스트와 같은 자연어 처리 작업에서 자주 활용한다.

- basic_english: 소문자 변환, 구두점 제거, 공백 기준 분리

- spacy: 언어 모델 기반 처리(사전 훈련된 언어 모델을 사용해 문장을 토큰으로 분할한다.), 품사 태깅(각 단어에 대한 푸사정보를 제공한다.), 형태소 분석(단어의 기본형과 어근을 추출하는데 도움을 준다.), 구두점 처리 및 특수문자 구분

 

  • build_vocab_from_iterator
더보기

from torchtext.vocab import build_vocab_from_iterator

- 텍스트 데이터로부터 어휘 집합(vocabulary)를 생성한다.

- 모든 단어를 순회하며 고유한 단어를 모아 어휘집합을 만들고 단어를 정수로 매핑할 수 있는 사전을 생성한다.

- 자연어를 수치화하여 모델이 학습할 수 있는 형태로 만드는데 필수적이다.

 

  • torch.utils.data.Dataset
  • torch.utils.data.DataLoader
더보기

from torch.utils.data import DataLoader, Dataset

torch.utils.data.Dataset:

PyTorch의 데이터셋 클래스이며. 데이터를 불러오기 위해 이 클래스를 상속하여 사용자 정의 데이터셋을 구성할 수 있다.

 

torch.utils.data.DataLoader:

- Dataset에서 정의한 데이터셋을 배치 단위로 로드하고, 모델 학습을 위한 미니 배치를 생성하는 역할을 한다.

- DataLoader는 데이터를 배치로 분리하고 섞는(shuffle) 기능을 제공하여 학습 과정에서 데이터의 순서가 고정되지 않도록한다.

 

배치(Batch):

- 모델학습시 한 번에 처리할 데이터 샘플의 전체 집합을 의미한다. (100개의 데이터 샘플이있다면 하나의 배치에는 100개의 샘플이 들어 간다.)

 

미니 배치(Mini - batch):
전체 배치를 더 작은 그룹으로 나누어 처리하는 방식이다. 모델 학습 시 전체 데이터셋을 몇 개의 작은 그룹(미니배치)로 나누고, 각각의 미니 배치를 순차적으로 사용해 학습을 진행한다(100개의 샘플일 경우 배치크기(batch size를 10으로 설정하면 10개의 미니배치로 나위게 된다.)

 

.item메서드

- 스칼라 값을 가진 텐서에서 단일 값을 추출할 때 사용

- 손실(loss) 값이 단일 숫자 값으로 나오는 경우, 이 값을 item()을 통해 Python의 기본 자료형으로 변환

- 하나의 값만을 담고 있는 텐서에 대해서만 사용 가능

- tensor.tolist()를 사용하여 전체를 리스트로 변환하는 방법을 사용가능


☑️ GitHub

오늘 OSError를 해결하며 시간이 너무 비어서 github에서 포트폴리오를 만들기 위한 본인의 홈페이지를 만드는 시간을 가졌다.

 

우선 새로운 repositories를 만들어야한다.

 

만들 때 설정으로는

 

이름을

Repository name: 원하는 이름.github.io

 

Public 클릭

 

Add a README file 클릭

 

create repository 클릭

 

이제 새로운 레포지토리에서

 

+ 버튼 클릭

 

Create new file 클릭

 

name에 Create index.html 작성

 

Code에

<html>
  <body>
    <h1>한검 포트폴리오 만들기!</h1>
  </body>
</html>

를 작성해준다.

 

setting에 들어가 page 클릭

 

Branch에서 None을 Main으로 바꾸고 save클릭을 하게 되면 페이지 위쪽에 홈페이지 주소가 만들어진다.

 

여기까지 진행하였고 시간이 빌때나 주말에 홈페이지에 테마 추가를 진행해보려고 한다.

 

오늘은 모든 내용에 나의 생각이 들어가있으며 학습을 많이 진행하지목해 회고는 따로 작성하지 않았습니다.

오늘은 과제 제출 일정이 2일 밖에 남아있지않아 

 

과제 발표 대본을 짜고 팀원분들 앞에서 발표를 진행해보며 완성도를 높이는 시간을 가졌다.

 

오늘 목표는 대본을 최대한 빨리 짜서 다른 학습을 진행해 보려했으나 대본짜는게 괴장히 늦어지고 수정을 진행하면서 시간을 너무 많이 사용해서 학습을 많이 진행하지 못했다.

 

오늘 학습내용 소개 순서는

 

1. 과제를 마무리하며 알게 된 내용

 

2. 기초 수학 특강

 

3. 회고 

 

순서로 진행하겟습니다.


☑️과제 발표 준비

지금까지 과제를 준비하며 많은 부분을 학습하게 되었다고 생각했지만

 

좁은 학습분량인 과제 분량에도 아직 모르는 것들이 존재했고 머신러닝 학습에 대한 평가를 하는게 새롭게 느껴졋다.

 

1. 최빈값 mode를 사용할때[0]의 역할

- fillna(df.mode()[0])에서 [0]의 역할은 최빈값의 가장 첫 번째 값을 최빈값으로 설정하겟다고 설정하는 것이다.

 

2. Logistic Regrection의 모델 생성시 설정

model = LogisticRegrection(max_iter=100)

- max_iter=100의 의미는 학습을 최대 100번 반복으로 설정하는 코드입니다.

- 최대반복 수를 설정하는 이유는 데이터셋의 크기가 클수록 크게 설정해야하는 것이 맞지만 학습이 오류가 나서 학습을 멈춰버리는 경우가있어서 적절한 값을 설정해주어야 한다.(기본값은 100)

 

3. RandomForest의 모델 생성시 설정

model = RandomForest(random_state=42)

- random_state를 설정하는 이유는 모델 생성에서 결과를 일관되게 재현 및 비교하기 위해 랜덤 스테이트를 설정하는 것

 

4. XGBoost의 모델 생성시 설정

model = XGBoost( use_label_encoder=False, eval_metric='logloss')

- use_label_encoder=False룰 설정하게 되면 LabelEncoding을 사용했을 때 나올 수 있는 경고 메세지를 무시해준다.

- eval_metric='logloss'는 로그 손실 값을 계산하고 출력하여 학습상태를 확인 할 수 있다.

 

5. Classification_report 해석

우선 Classification의 요소로는

예측하는 값들을 개별 클래스로 나누어 준다

precision (정밀도): 진행한 예측이 얼마나 정밀하게 예측이 되었는지 보여 준다.

recall(재현율): 모델을 학습할 때 실제 계산과 테스트 계산이 얼마나 잘 이루어 졌는지 확인한다.

f1-score: 정밀도와 재현율의 균형 조화 점수를 보여준다.

support: 학습을 진행할 때 몇 개의 값들을 사용했는지 보여준다.

Macro avg: 두 클래스의 평균 성능을 동일한 가중치로 평가한 값 

Weighted avg: 각 클래스의 샘플 수에 따라 가중치를 적용해 계산된 평균 성능 

 

6. confusion_metrix 해석 방법

[[89, 16],

[16, 58]]

89 = 첫 번째 클래스를 정확하게 예측한 수

16 = 첫 번째 클래스를 두 번째 클래스로 잘못 예측한 수

16 = 두번째 클래스를 첫 번째 클래스로 잘못 예측한 수

58 = 두번째 클래스를 정확히 예측한 수

결론: 첫번째 클래스에 대한 예측은 성능이  좋고 두 번째 클래스 예측 또한 좋지만 첫 번째 클래스 예측이 더 성능이 좋다. 

 

 


☑️기초 선형 대수학(행렬과 연산)

스칼라(온도, 길이, 질량)

- 크기만있고 방향은 없다.

- 물리적 단위를 포함 할 수 있음

- 일반적으로 실수로 표현

 

벡터(힘, 속도, 위치)

- 벡터는 크기와 방향으로 데이터를 표현

- 벡터의 표현: 열의 형태로 나타냄

- v1, v2는 벡터의 성분이며 각 차원별 크기

 

벡터의 연산

- 벡터의 덧셈과 뺄셈: 같은 서분끼리 더하거나 뺌 a +b = (a1 + b1, a2 + b2....)

- 스칼라 곱: 벡터와 숫자의 곱으로 벡터 성분에 숫자를 곱함 k*a = (k*a1, k*a2...)

- 벡터의 크기: 벡터의 길이를 나타내는 스칼라 값 a = (a1제곱,a2제곱,...an제곱)

- 벡터의 내적: 주 벡터 사이의 관계를 나타내는 연산으로, 두 벡터를 곱해서 하나의 숫자(스칼라)를 구하는 방법

- 코사인 유사도: 두 벡터가 이루는 각도의 코사인 값을 이용해 벡터 간의 유사성을 특정하는 방법(값이 1에 가까울수록 두 벡터는 동일한 방향, 값이 0이면 두 벡터는 서로 수직, 값이 -1에 가까울수록 두 벡터는 반대 방향)

 

Word Embedding: 충분히 잘 학습되었다면 단어에 대한 연산이 가능

 

코사인 유사도 활용

-문서 유사도 측정: 텍스트 데이터에서 단어의 빈도를 벡터로 표현하고, 문서간의 유사성을 측정

-이미지 검색: 이미지의 특징 벡터를 비교하여 이미지를 찾거나 분류할 때 사용

-추천 시스템: 사용자와 아이템의 특징을 벡터로 나타내어, 유사한 사용자나 아이템을 찾아 비슷한 특징을 가진 사람들 끼리 매칭 혹은 아이템 추천

 

행렬(벡터에서 차원을 늘린 것)

숫자나 변수들을 직사각형 형태로 배열한 것, 행과 열로 구성 됨

 

- 행렬의 덧셈과 뺄셈: 같은 위치의 요소끼리 더하거나 뺌(두 행렬의 크기가 같아야한다.)

- 행렬의 스칼라 곱: 행렬의 모든 요소에 스칼라 값을 곱한 결과 

- 전치 행렬: 행과 열을 바꾼 행렬

- 행렬의 곱셈: 원소 계산(각 행의 원소와 열의 원소를 곱한 후 더함), 행렬 곱의 조건(A가 m*n 행렬이고 B가 n*p행렬일 때, A의 열수와 B의 행수가 같아야하고, 이경우 곱셈AB는 m*p행렬을 만듦)(행렬곱셈도 내적으로 이루어져이싸고 이해하면 편하나)

특수행렬

- 단위행렬: 대각선의 원소가 1이고 나머지가 모두 0인 정방행렬 A*I = A, I*A = A

- 영행렬: 모든 원소가 0인 행렬 A + 0 = A

- 대각행렬: 주대각선에만 원소가 존재하고, 나머지 원소는 모두 0인 행렬(행렬 곱 연산이 비교적 단순하며, 대각선 원소끼리만 연산에 영향을 줌)

 

행렬의 활용

- 데이터 분석: 평균, 표준펴차 등 통계저 수치를 구할 때 각 열의 값을 기반으로 연산을 수행, 행렬의 곱셈을 사용해 데이터를 변환하거나, 피처(변수)들의 상관관계를 계산하여 데이터의 패턴을 분석, 주성분 분석(PCA) 같은 방법을 통해 다차원 데이터를 저차원으로 축소할 때도 행렬 연산이 활용됨

- 이미지 처리: 픽셀 값으로 이루어진 2차원 행렬로 표현됨

- 딥러닝에서 뉴런의 활성화 값을 결정(행렬 연산은 입력 데이터와 가중치를 처리하는 기본적인 방법)

 


☑️ 회고

오늘 발표 준비를 완료하였고 제출 기간 전까지 발표자료의 완성도를 높이는 시간과 도전과제에 대한 내용을 정리해야할 듯하다.

 

학습을 따로 진행하지 못해 조금 아쉬운 날이였지만 밀리진 않았지만 밀린듯한 느낌을 주던 필수과제를 마무리해서 속은 시원하다.

 

선형 대수학은 처음 들어보는 단어들이 매우 많아서 이해는 못하였지만 아 저런 수학 공식들을 사용해서 딥러닝모델이 학습을 진행하는구나 아직은 먼 이야기같아 보이니 딥러닝 코드들이 어떤 기능을 가지는지에 대해서 학습하고 수학에 대한 공부를 진행해야겟다.

 

이제는 이해되는 것보다 저게 뭐지 저런 것이 있구나하는 내용들이 많아서 감이 안잡히기 시작해 현타가 살짝 오지만 전문가는 아니더라도 코드를 보고 이해하고 잘못된 부분을 보면 어떻게 왜 잘못된 것인지 알 수 있을 때까지 노력하고싶다.

+ Recent posts