01 나의 첫 머신러닝
인공지능
인공지능이란?
- 인공지능은 컴퓨터 시스템이 사람처럼 학습하고 추론할 수 있는 능력을 가지는 것을 의미한다. 이는 데이터를 분석하고 패턴을 인식하여 문제를 해결하거나 예측하는 데에 활용된다.
- 인공일반지능 혹은 강인공지능은 사람과 구분하기 어려운 지능을 가진 컴퓨터 시스템이다.
- 약인공지능은 현실에서 우리가 마주하고 있는 인공지능이며 특정 분야에서 사람의 일을 도와주는 보조 역할만 가능하다. 예를 들면 자율 주행 자동차, 음악 추천 등이 있다.
머신러닝
머신러닝이란?
- 머신러닝은 컴퓨터 시스템이 데이터로부터 자동으로 학습하고 패턴을 찾아내는 인공지능의 한 분야이다. 규칙을 일일이 프로그래밍하지 않아도 자동으로 데이터에서 규칙을 학습하는 알고리즘을 연구하는 것이다. 머신러닝은 알고리즘과 모델을 사용하여 데이터를 분석하고 예측을 수행한다.
- 컴퓨터 과학 분야의 대표적인 머신러닝 라이브러리는 사이킷런이다.
사이킷런이란?
사이킷런은 파이썬 기반의 오픈 소스 머신러닝 라이브러리로, 데이터 분석과 머신러닝을 위한 다양한 기능과 알고리즘을 제공한다. 사이킷런을 사용하면 간편하게 데이터를 전처리하고, 모델을 학습시키고, 예측 결과를 평가할 수 있다. 또한, 다양한 머신러닝 알고리즘을 포함하고 있어 다양한 분야에서 활용된다.
딥러닝
딥러닝이란?
딥러닝은 머신러닝의 한 종류로, 인공신경망을 기반으로 하는 알고리즘이다. 딥러닝은 다량의 데이터를 사용하여 복잡한 패턴을 학습하고, 이미지 분류, 음성 인식, 자연어 처리 등 다양한 작업에 사용된다.
인공신경망이란?
인공신경망은 인간의 두뇌를 모델링한 수학적 모델로, 머신러닝과 딥러닝에서 중요한 개념이다. 인공신경망은 여러 개의 뉴런과 뉴런 간의 연결로 구성되며, 입력 데이터를 받아들여 출력을 생성하는 작업을 수행한다.
딥러닝 라이브러리로는 텐서플로와 파이토치가 있다.
텐서플로란?
텐서플로(TensorFlow)는 구글에서 개발한 오픈 소스 머신러닝 프레임워크로, 딥러닝 모델을 구축하고 학습시키는 데에 사용된다.
파이토치란?
파이토치(PyTorch)는 Facebook에서 개발한 오픈 소스 머신러닝 라이브러리로, 딥러닝 모델을 구축하고 학습시키는 데에 사용된다. 파이토치는 동적 계산 그래프를 사용하여 모델을 정의하고 학습할 수 있는 유연성을 제공한다.
인공지능-머신러닝(사이킷런)-딥러닝(텐서플로, 파이토치)
구글 코랩
웹 브라우저에서 무료로 파이썬 프로그램을 테스트하고 저장할 수 있는 서비스이며 머신러닝 프로그램도 만들 수 있다. 구글이 제공하는 클라우드 파일 저장 서비스인 구글 드라이브에 저장 가능하다.

텍스트 셀과 코드 셀이 존재.
상단의 툴바를 사용하여 다양한 형태로 글을 꾸밀 수 있다.
마켓과 머신러닝
생선 분류 문제 실습 해보기(생선 데이터는 캐글에 공개된 데이터셋 이용)
if fish_lenght >= 30:
print("도미")
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마리의 도미 데이터 준비. 각 도미의 특징을 길이와 무게로 표현. 이런 특징을 특성이라고 한다.

맷플롯립 패키지를 임포트하고 산점도를 그리는 scatter() 함수를 사용.
도미 35마리를 2차원 그래프에 점으로 나타냈다. 해당 그래프는 일직선에 가까운 형태므로 선형적이다.
이와 마찬가지로 빙어 데이터 또한 준비해준다.
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]

k-최근접 이웃 알고리즘
k-최근접 이웃이란?
k-최근접 이웃은 머신러닝의 분류 알고리즘 중 하나로, 주어진 데이터 포인트의 가장 가까운 이웃들을 기반으로 해당 데이터 포인트를 분류하는 방법이다. 즉, 새로운 데이터가 주어졌을 때, 주변의 가까운 이웃들의 레이블을 확인하여 그에 맞는 분류를 수행한다. 이 알고리즘은 간단하고 직관적이며 학습 과정이 없기 때문에 속도가 빠르다는 장점이 있다.
length = bream_length+smelt_length
weight = bream_weight+smelt_weight
두 리스트를 하나로 합친다.
그 후 머신러닝 패키지인 사이킷런을 사용하기 위해서는 각 특성의 리스트를 세로 방향으로 늘어뜨린 2차원 리스트를 만들어야한다.
fish_data = [[l, w] for l, w in zip(length, weight)]
print(fish_data)
zip() 함수란?
zip() 함수는 여러 개의 리스트를 동시에 순회하면서 각 리스트의 요소들을 묶어주는 역할을 한다. 이 함수를 사용하면 여러 개의 리스트를 간편하게 묶어서 사용할 수 있다.
머신러닝을 위하여 도미와 빙어를 숫자1과 0으로 표현한다.
fish_target = [1]*35 + [0]*14
print(fish_target)

사이킷런 패키지에서 k-최근접 이웃 알고리즘을 구현하는 클래스는 KNeighborsClassifier이다.
객체에 fish_data와 fish_target을 전달하여 도미를 찾기 위한 기준을 학습시킨다.
이런 과정을 머신러닝에서는 훈련이라고 부른다.
kn.fit() 메서드 : 주어진 데이터로 알고리즘을 훈련한다.
kn.score() : 모델을 평가한다. 1은 모든 데이터를 정확히 맞혔다는 것을 의미한다.

이처럼 도미와 빙어의 데이터를 이용하여 삼각형으로 표시된 새로운 데이터는 도미라고 판단 가능하다.
02 데이터 다루기
훈련 세트와 테스트 세트
머신러닝 알고리즘은 크게 지도 학습과 비지도 학습으로 나눌 수 있다.
지도학습
- 지도 학습 알고리즘은 훈련하기 위한 데이터와 정답이 필요하다.
- 지도 학습데이터 =입력 & 정답 =타킷 >> 훈련 데이터

훈련 세트로 입력값 중 0~34번째 인덱스 사용
훈련 세트로 타깃값 중 0~34번째 인덱스 사용
테스트 세트로 입력값 중 35~마지막(48) 인덱스 사용
테스트 세트로 타깃값 중 35~마지막(48) 인덱스 사용
훈련 세트로 fit() 메서드를 호출해 모델을 훈련하고, 테스트 세트로 score() 메서드를 호출해 평가
오류 발생 >> 정확도가 0.0
샘플링 편향
훈련 세트와 테스트 세트에 샘플이 골고루 섞여 있지 않아 샘플링이 한쪽으로 치우친 것.
넘파이
파이썬의 대표적인 배열 라이브러리로, 고차원의 배열을 손쉽게 만들고 조작할 수 있다.
import numpy as. p
input_arr = np.array(fish_data)
target_arr = np.array(fish_target)
priint(input_arr)
49개의 행과 2개의 열로 출력 된다.

인덱스를 랜덤하게 섞어준다.
랜덤하게 35개의 샘플을 훈련 세트로, 나머지 14개를 테스트 세트로 만든다.

데이터 전처리
넘파이로 데이터 준비하기
column_stack() 함수란?
column_stack() 함수는 주어진 배열들을 열로 쌓아서 하나의 2차원 배열로 만들어주는 NumPy 함수이다. 이 함수를 사용하면 여러 개의 배열을 간편하게 열방향으로 결합하여 사용할 수 있다.

사이킷런으로 훈련 세트와 테스트 세트 나누기
train_test_split() 함수란?
train_test_split() 함수는 사이킷런에서 제공하는 함수로, 주어진 데이터를 훈련 세트와 테스트 세트로 나누는 역할을 한다. 이 함수를 사용하면 데이터를 간편하게 나눌 수 있다. 훈련 세트와 테스트 세트를 나누는 비율을 설정할 수도 있다.

준비한 데이터로 k-최근접 이웃을 훈련 한 후 위에서 발견했던 오류 데이터 결과 확인해보기

길이가 25cm, 무게가 150g 생선에 가장 가까운 이웃에는 빙어가 압도적으로 많으므로 도미를 빙어라고 잘못 예측한다. 산점도를 보면 직관적으로 도미와 가깝게 보이지만 이는 x축과 y축의 범위가 다르기 때문이다.

이때 기준을 맞추어서 두 특성의 스케일을 같게 만든다.
표준점수 구하기
np.mean() 함수 : 평균 계산
np.std() 함수 : 표준편차 계산
표준점수(z점수) : 각 특성값에서 평균을 빼고 이를 표준편차로 나눈다.
train_scaled = (train_input - mean) / std
모든 행에 해당 식이 적용되며 이를 브로드캐스팅이라고 부른다.
브로드캐스팅이란?
브로드캐스팅은 NumPy에서 사용되는 용어로, 다른 모양의 배열들 간에도 산술 연산을 수행할 수 있도록 해준다. 브로드캐스팅을 통해 모양이 다른 배열들을 자동으로 동일한 형태로 확장하여 연산을 수행할 수 있다. 이를 통해 코드를 간결하게 작성하고 빠르게 계산을 수행할 수 있다.
'머신러닝' 카테고리의 다른 글
| [파이썬 머신러닝 완벽 가이드] - 1장 (1) | 2024.09.28 |
|---|---|
| [혼자 공부하는 머신러닝+딥러닝] - 비지도 학습 (0) | 2023.11.18 |
| [혼자 공부하는 머신러닝+딥러닝] - 트리 알고리즘 (2) | 2023.11.11 |
| [혼자 공부하는 머신러닝+딥러닝] - 다양한 분류 알고리즘 (0) | 2023.11.04 |
| [혼자 공부하는 머신러닝+딥러닝] - 회귀 알고리즘과 모델 규제 (2) | 2023.10.13 |