
[머신러닝]
- 모델 = 머신러닝 알고리즘을 구현한 프로그램 또는 알고리즘을 구체화하여 표현한 것
- 클래스 = 여러 개의 종류
- 분류 (classification) = 하나를 구별해 내는 문제
- 이진분류(binary classification) = 2개 클래스 중 하나를 고르는 것
1. 생선 분류 문제
#1. 도미 data 준비
bream_length = [25.4, 26.3, 26.5, 29.0, 29.0, 29.7, 29.7, 30.0, 30.0, 30.7, 31.0, 31.0, 31.5, 32.0, 32.0, 32.0, 33.0, 33.0, 33.5, 33.5, 34.0, 34.0, 34.5, 35.0, 35.0, 35.0, 35.0, 36.0, 36.0, 37.0, 38.5, 38.5, 39.5, 41.0, 41.0]
bream_weight = [242.0, 290.0, 340.0, 363.0, 430.0, 450.0, 500.0, 390.0, 450.0, 500.0, 475.0, 500.0, 500.0, 340.0, 600.0, 600.0, 700.0, 700.0, 610.0, 650.0, 575.0, 685.0, 620.0, 680.0, 700.0, 725.0, 720.0, 714.0, 850.0, 1000.0, 920.0, 955.0, 925.0, 975.0, 950.0]
# 도미 35마리를 2차원 그래프에 점으로 나타나기 위한 코드
import matplotlib.pyplot as plt
#matplotlib의 pylot 함수를 plt로 줄여서 사용
plt.scatter(bream_lenght, bream_weight)
plt.xlabel('length') #x축은 길이
plt.ylabel('weight') #y축은 무게
plt.show()

#2. 빙어 data 준비
smelt_length = [9.8, 10.5, 10.6, 11.0, 11.2, 11.3, 11.8, 11.8, 12.0, 12.2, 12.4, 13.0, 14.3, 15.0]
smelt_weight = [6.7, 7.5, 7.0, 9.7, 9.8, 8.7, 10.0, 9.9, 9.8, 12.2, 13.4, 12.2, 19.7, 19.9]
# 빙어 데이터를 활용한 두 종류 생선 scatter plot 그리기
plt.scatter(bream_length, bream_weight)
plt.scatter(smelt_length, smelt_weight)
plt.xlabel('length') #x축은 길이
plt.ylabel('weight') #y축은 무게
plt.show()

2. 첫 번째 머신러닝 프로그램
k-최근접 이웃(분류(Classification) 알고리즘) 알고리즘 사용
- 가장 간단한 머신러닝 알고리즘 중 하나
- 어떤 규칙을 찾기보단 전체 데이터를 메모리에 가지고 있는 것이 전부
- 비슷한 특성을 가진 데이터는 비슷한 범주에 속하는 경향이 있다는 가정하에 사용
#3. k-최근접 이웃 알고리즘 사용 전 도미와 빙어 data를 하나의 data로 합치기
length = bream_length+smelt_length
weight = bream_weight+smelt_weight
여기서 사용하는 머신러닝 패키지는 사이킷런
(이 패키지를 사용하기 위해 각 특성의 리스트를 세로 방향으로 늘어뜨린 2차원 리스트 만들기)

# zip()함수와 리스트 내포 구문을 사용해서 lenght와 weight 리스트를 2차원 리스트로 만들기
fish_data = [[l, w] for l, w in zip(length, weight)]
#fish_data가 만들어졌는지 확인
print(fish_data)
2차원 리스트 or 리스트의 리스트🔻

for문은 zip() 함수로 length와 weight 리스트에서 원소를 하나씩 꺼내 l과 w에 할당
[l,w]가 하나의 원소로 구성된 리스트가 만들어짐
zip() 함수와 for문
- 함수 = 특정 기능을 실행하는 명령의 코드 모음
- zip함수 = 나열된 리스트에서 원소를 하나씩 꺼내주는 일을 함
- for 반복문 = 동일한 작업을 계속 반복하는 일을 해 주는 것
#4. 정답 data 준비
#ex) 첫 번째 생선은 도미, 두 번째 생선도 도미 등 어떤 생선이 도미인지 빙어인지 알려주는 것
# 컴퓨터 프로그램은 문자 이해 X, 그래서 도미와 빙어를 1과 0으로 표현
fish_target = [1] * 35 + [0] * 14 #35는 도미의 수 14는 빙어의 수
print(fish_target)

머신러닝에서 2개를 구분하는 경우 찾으려는 대상을 1로 놓고 그 외에는 0으로 놓기
#사이킷런 패키지에서 k-최근접 이웃 알고리즘을 구현한 클래스인 KNeighborsClassifier를 임포트
from cklearn.neighbors import KNeighborsClassifier
#임포트한 KNeighborsClassifier 클래스의 객체를 먼저 만들기
kn = KNeighborsClassifier()
# 이 객체에 fish_data와 fish_target을 전달해 도미를 찾기 위한 기준을 학습
# (이 과정을 머신러닝에서 훈련이라고 함)
# 사이킷런에는 fit() 메서드가 이런 역할을 함
# fit() 메서드는 주어진 data로 알고리즘을 훈련시킨 뒤 훈련
kn.fit(fish_data, fish_target)
kn.score(fish_data, fish_target)
>> 결과값 : 1.0
( fish_data의 답이 정확히 나옴, 이 값을 정확도라고 함 )
훈련 = 모델에 data를 전달하여 규칙을 학습하는 과정
모델 = 머신러닝 알고리즘을 구현한 프로그램
프로그램이 아니더라도 알고리즘을 (수식 등으로) 구체화하여 표현한 것을 모델이라고 부름
예로 “스팸 메일을 걸러내기 위해 k-최근접 이웃 모델을 사용해 봅시다”라고 할 수 있다
K-최근접 이웃 알고리즘
어떤 데이터에 대한 답을 구할 때 주위의 다른 데이터를 보고 다수를 차지하는 것을 정답으로 사용
단점 : 데이터가 많은 경우 사용하기 어려움
데이터가 크기 때문에 메모리가 많이 필요
직선거리를 계산하는 데도 많은 시간 필요
'📚 [Archive] CS & AI 스터디 > [STUDY] 인공지능 🤖' 카테고리의 다른 글
| [신경망 연산] 선형 활성화 함수는 왜 딥러닝에서 사용되지 않을까? (0) | 2025.02.04 |
|---|---|
| [딥러닝] 인공신경망 (Artificial Neural Networks, ANN) (3) | 2025.02.04 |
| [AI개요] 머신러닝 개요 (6) | 2025.01.21 |
| [혼공머] 훈련 세트와 테스트 세트 (4) | 2024.11.29 |
| [혼공머] AI의 역사와 발전: 머신러닝에서 생성형 AI까지 (5) | 2024.11.26 |