Visual Studio C++ 빌드 도구 설치(설치 중 "Windows용 C++ CMake tools" 같이 다운하면 좋음)
사전 빌드된 numpy설치 (1.24.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시간 정도 가져야겟습니다.
1. max_length=100는 생성할 문장의 최대 길이를 지정한다.(항상 최대 길이로 문장을 만드는건 아니다.) 2. num_return_sequences=2는 문장의 개수를 지정한다.
# 트랜스포머를 활용한 모델 사용
from transformers import pipeline
generator = pipeline("text-generation", model = "gpt2")
# 텍스트 생성
result = generator("I have a cat", max_length=100, num_return_sequences=2)
print(result)
감정어 분석
문장을 해석해서 어느정도의 감정을 캐치하고 값을 출력한다. ex) Positive
1. model="roberta-base" 버트기반 모델은 핵심적인 논리부분은 대규모 데이터셋을 통해 사전학습 시키고 마지막 레이어(번역, 분류 등) 목적에 따라 바꿀 필요가 있는 레이어는 사용자에게 맡기기도 한다.
# 감성어 분석
from transformers import pipeline
sentiment_analysis = pipeline("sentiment-analysis", model="roberta-base")
result = sentiment_analysis("I love you")
print(result)
워드 투 백
1. from gensim.models import Word2Vec
- 텍스트 데이터에서 단어 간의 의미적 유사성을 벡터로 표현하는 알고리즘
2. from gensim.utils import simple_preprocess
- 텍스트를 소문자로 변환하고 불필요한 기호를 제거하며 토큰화하여 단어 리스트로 반환
3. from scipy.spatial.distance import cosine
- 두 벡터 간의 코사인 거리를 계산하며, 유사도를 계산한다.
4. sentences
- 임베딩을 생성할 문장 리스트
5. processed = [simple_preprocess(sentence) for sentence in sentences]
- simple_preprocess 함수를 사용하여 각 문장을 토큰화하고 소문자로 변환하여 단어 리스트 반환
- vector_size=5: 각 단어를 5차원 벡터로 임베딩하고. 이 크기는 사용자가 필요에 따라 조정할 수 있다.
- window=5: 컨텍스트 윈도우 크기로, 현재 단어와의 최대 거리(단어 수)를 나타낸다.
- min_count=1: 최소 등장 빈도로, 1로 설정했으므로 모든 단어가 임베딩에 포함된다.
- sg=0: Skip-gram 방식을 사용할지(1), CBOW 방식을 사용할지(0)를 결정하고. 여기서는 CBOW 방식을 사용.
7. dog = model.wv['dog']와 cat = model.wv['cat']
- dog와 cat이라는 단어의 벡터 표현을 불러온다.
8. sim = 1 - cosine(dog, cat)
- cosine 함수를 사용하여 dog와 cat 벡터의 코사인 유사도를 계산
import numpy as np
from gensim.models import Word2Vec
from gensim.utils import simple_preprocess
from scipy.spatial.distance import cosine
sentences = [
"The quick brown fox jumps over the lazy dog",
"I love playing with my pet dog",
"The dog barks at the stranger",
"The cat sleeps on the sofa",
]
processed = [simple_preprocess(sentence) for sentence in sentences]
print(processed)
model = Word2Vec(sentences=processed, vector_size=5, window=5, min_count=1, sg=0)
dog = model.wv['dog']
cat = model.wv['cat']
sim = 1 - cosine(dog, cat)
print(sim)
"CompVis/stable-diffusion-v1-4"는 모델의 이름이며, Hugging Face 허브에서 가져올 모델 경로
torch_dtype=torch.float16은 16비트 부동 소수점 데이터를 사용하도록 설정
pipe = pipe.to("cuda")
pipe 객체를 GPU로 옮긴다. "cuda"는 GPU 장치를 의미하며, 이를 통해 모델의 연산이 GPU에서 수행되어 속도를 높일 수 있다.
prompt = "A futuristic cityscape with flying cars at sunset"
생성할 이미지의 텍스트 설명을 정의
image = pipe(prompt).images[0]
텍스트 설명을 기반으로 이미지 생성 요청을 처리
images[0]은 생성된 첫 번째 이미지를 선택한다.
image.save("generated_image.png")
"generated_image.png"라는 파일명으로 저장
# stable diffusion 모델 예제 코드
from diffusers import StableDiffusionPipeline
import torch
# Stable Diffusion 파이프라인 로드
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", torch_dtype=torch.float16)
pipe = pipe.to("cuda") # GPU 사용
# 텍스트 설명을 기반으로 이미지 생성
prompt = "A futuristic cityscape with flying cars at sunset"
image = pipe(prompt).images[0]
# 생성된 이미지 저장 및 출력
image.save("generated_image.png")
image.show()