본문 바로가기

MLOps 개발자 양성과정/ml&dl

[Day-50] 머신러닝 k-Nearest Neighbors

인공지능

=> 데이터 필요(정확한!)

우리나라 아직 이미지에 대한 데이터 

이미지에 라벨링 작업 필요

데이터에 대한 맥락 

웹 크롤링한 데이터는 학습시키기 어려워

자연어 처리분야 유망*

머신러닝 > 딥러닝(뇌구조) > 인공지능

 

ㆍ 머신러닝 딥러닝 배우면서

이 작업할 때는 어떤 알고리즘에 어떤 모델 정리해 나가기

 

 


<용어정리>

퍼셉트론

생성 ai(조합의 개념 기존 문장들을 조합해서 결론을 내려주는)

LeNet-5 합성망 신공망에 대표 알고리즘

AlexNet이미지 분류쪽

yolo (You Only Look Once) 버전1만 창시자가 만들었어

binary classifiction 이진분류(두 가지 중에 어느 하나를 고르는 문제) 이미지 분류에서는 


머신러닝

모든 ai분야에 기본

통계학과 깊은 연관

훈련데이터 / 테스트데이터 / 검증

 

인공지능에 대한 서비스 프론트(웹브라우저) 

스프링 웹서버 구축가능

데이터 수집 분석

머신러닝딥러닝을 이용해 예측

 

데이터분석쪽 판다스

머신러닝 수학쪽도o 넘파이

 

사이킷런(파이썬 API를 사용)

텐서플로어

구글버트(자연어처리 라이브러리)

파이토치

 


chap01. 나의 첫 머신러닝

 

1-1 인공지능과 머신러닝. 딥러닝

 

머신러닝 > 딥러닝(뇌구조) > 인공지능

1. 인공지능?

사람처럼 학습하고 추론할 수 있는 지능을 가진 컴퓨터 시스템을 만드는 기술

ㆍ일반인공지능(강인공지능) => 영화에서 볼 수 있는

ㆍ약인공지능 => 현실에서 마주하는 인공지능. 특정분야에서 도와주는 보조 역할만 가능

+

- 인공지능 학습시키기 위해서 정확한 데이터가 필요해!

- 하지만 아직 우리나라 정확한 데이터 학습 어려워.

- 특히 웹 크롤링 데이터, 이미지에 대한 데이터 학습 어려움 (데이터에 대한 맥락을 파악하기 위해 라벨링 작업 필요)

- 생성 AI (조합의 개념- 기존 문장들을 조합해서 결론을 내려줌) / 자연어 처리 유망

 

2. 머신러닝?

: 규칙을 일일이 프로그래밍하지 않아도 자동으로 데이터에서 규칙을 학습하는 알고리즘을 연구하는 분야

- 모든 ai분야에 기본으로 통계학과 깊은 연관이 있음. 요즘엔 수학쪽으로도 많이 사용하고 있음.

- 사이킷런(파이썬 API를 사용) 대표적인 라이브러리

- 수학쪽 넘파이 활용 / 데이터 분석쪽에서는 판다스 많이 써

 

3. 딥러닝?

: 머신러닝 알고리즘 중 인공 신경망을 기본으로 한 방법을 통칭

- 텐서플로, 파이토치 대표적 라이브러리

/ 구글버트? 자연어 처리 

 

 


https://gist.github.com/rickiepark

k-최근접 이웃 알고리즘(k-Nearest Neighbors)

1. 언제 사용?

 데이터 적을 때 쓰는 게 좋아

 

 

1. 같은 특성끼리 묶어 놔야 해

2. 사이킷런은 반드시 2차원 배열 형태로 세로방향으로 늘어뜨린 리스트

 

ㆍ zip 함수 활용

두 개 이상의 리스트에서 각각의 원소를 하나씩 뽑아서 반환

fish_data = [[l, w] for l, w in zip(length, weight)]

 

 

3. 지도학습 반드시 훈련데이터와 정답이 있어야 해

 

# 1. 알고리즘 구현 클래스를 이용해서 객체 생성(model)
kn = KNeighborsClassifier()

# 2. fit 메서드로 훈련 (반드시 문제와 정답이 같이 넘어가야 해)
kn.fit(fish_data, fish_target) # 객체.fit(훈련데이터, 정답)

# 3. 스코어로 훈련된 모델을 평가
kn.score(fish_data, fish_target) 
# 과대적합(overfit)1.0이 나오는 것도 위험해 과소적합(underfit) 0.5 밑으로 떨어지면 안돼

# 4. 완전 새로운 데이터를 가지고 예측하기 predict #여러 데이터로 예측해봐야 해
kn.predict([[30,600]]) 

 

# k의 개수 설정하기 => 모델 객체가 생성될 때 설정해줘야해(기본값 5)

kn49 = KNeighborsClassifier(n_neighbors=49)

 

 


ㆍ지도학습

- (데이터)입력과 (정답)타깃 => 훈련데이터

- 기준 특성 feature

- 테스트 데이터 훈련데이터의 일부를 떼서 만들어

특성들을 하나의 리스트로 묶어놓은 거 샘플

샘플링 편향 sampling bias

(훈련 세트와 테스트 세트 샘플이 골고루 섞어있어야

 

ㆍ비지도학습

- 타깃 없이 입력 데이터만 사용

- 어떤 패턴을

 

 

ㆍ강화학습

어떤 모델이 학습을 했을 때 패널티를 줘. 보상개념

ex) 대표적 라이브러리 gan

 

ㆍnumpy

고차원 배열 손쉽게 만들고 조작할 수 있음

dimension차원 

좌표계의 축

축의 방향

 

 

특성이  

순차적으로 되어있다? 섞어야 해

섞을 때는 문제와 정답 같이 변해야 해 

index 번호 

numpy의 random 안에 셔플

시각화해보고

본격적으로 사이킷 런 가지고 들어와

알고리즘

fit

score

predict

정답지와 확인

 


Numpy 함수 따로

1. 

 

2. column_stack(([],[]))

두 개의 리스트를 튜플 형태로

 

파이썬의 2차원 리스트 가로로

numpy 2차원 리스트 세로로

np.concatenate(

두 개의 리스트를 하나로 묶어줘

np.ones

np,zeros

train_test_pslit()

stratify 매개변수 명 줘서 샘플으ㅢ 클래스 비율 

특정 데이터가 너무 적거나 훈련데이터가 너무 적을 때 

얘를 이용해서 섞어달라

 

전처리

결측치 처리 , 이상치 처리, 스케일링 등과 같은 것 포함

훈련하기 전에 미리 데이터를 처리해놓는 작업 데이터 전처리

 

학습을 시키려면 단위가 어느정도 비슷해야 해 스케일링

단위를 어느정도 비슷하게 만들어줘

 

전처리된 데이터들을 데이터베이스에 넣어놔

그래야 전처리 작업 여러번 안하고 데이터 베이스에서 데이터 뽑아와

 

스케일링

 

데이터가 심하게 편차가 클 경우에

데이터를 표현하는 기준이 다르면 = 단위가 다르면

특성값을 일정한 기준으로 맞춰 주어야 함

- 표준점수 이용: 각 특성값이 평균에서 표준편차와 얼마나 떨어져있는지

 

분산:
데이터에서 평균을 뺀 값을 모두 제곱한 다음 평균을 내어 구함

표준편차:
분산의 제곱근(데이터가 분산된 정도)
np.std(데이터, axis=0 세로방향)

표준점수:
각 데이터가 원점에서 몇 표준편차만큼 떨어져 있는지

평균