#Numpy
- 넘파이는 파이썬에서 수치를 계산하는 라이브러리이다. 머신러닝과 데이터 과학 분야에서 넘파이는 필수이다.
머신러닝의 모든 데이터는 결국 숫자로 이루어진 행렬로 표현되며, 넘파이는 이 대규모 행렬 연산을 압도적인 속도로 처리해 주는 핵심 라이브러리이다.
# 머신러닝 코드를 작성하거나 논문을 구현할 때 가장 자주 쓰이는 핵심 기능
1. 다차원 배열 생성
'''
머신러닝에서 데이터셋은 대개 2차원(행과 열) 또는 3차원(이미지: 가로, 세로, 채널) 배열.
np.array(): 리스트를 NumPy 배열로 변환
np.zeros(), np.ones(): 0 또는 1로 채워진 가중치(Weights) 초기화 시 사용
np.arange(): 일정 간격의 수열 생성 (인덱싱이나 루프 제어 시 유용)
'''
###-----------------------------------------------------------------
import numpy as np
# 2차원 데이터셋 예시 (샘플 2개, 특성 3개)
X = np.array([[1.0, 2.0, 3.0],
[4.0, 5.0, 6.0]])
2. 차원과 모양 변경 (Reshaping)
'''
머신러닝 모델에 데이터를 입력할 때
가장 에러가 많이 나는 부분이 바로 데이터의 '모양(Shape)'이 맞지 않을 때.
X.shape: 배열의 구조(차원) 확인
(예: (100, 32, 32) -> 100장의 32x32 이미지)
X.reshape(): 데이터의 개수는 유지하되 차원을 변경
(예: 2D 이미지를 1D로 평탄화)
Tip: -1을 넣으면 남은 차원으로부터 크기를 자동으로 계산.
X.reshape(-1, 1)은 머신러닝 레이블 벡터를 만들 때
'''
#----------------------------------------------
# 2x3 배열을 6x1 배열로 변환
X_reshaped = X.reshape(-1, 1)
-1의 의미 : "이 자리의 크기는 너가 알아서 계산해"
2x3 배열이므로 reshape(-1,1)을 하면 열 크기를 1로 고정해서 자동으로 6행 1열이 된다.
3. 브로드캐스팅 (Broadcasting)
'''
머신러닝에서 모든 데이터 샘플에 동일한 연산
(예: 평균 빼기, 스케일링)을 적용할 때 루프를 돌릴 필요가 없다.
NumPy는 서로 모양이 다른 배열 간의 연산을 자동으로 확장해서 처리!
'''
#----------------------------------------------
# 모든 데이터에 일괄적으로 편향(Bias) 더하기
biases = np.array([0.5, 1.0, 1.5])
result = X + biases # 각 행에 biases가 알아서 더해짐
#행이 맞지않아도 자동으로 더해짐
biases를 X의 행에 각각 더해준다.
4. 벡터 및 행렬 연산 (Linear Algebra)
'''
딥러닝의 핵심은 행렬 곱(Dot Product).
신경망(CNN)의 순전파(Forward) 연산은 대부분 행렬 곱으로 이루어진다.
순전파는 정방향으로 가는거 ->
역전파는 역방향으로 가는거 <-
np.dot(A, B) 또는 A @ B: 행렬 곱셈 (내적)
A.T: 전치 행렬 (Transposed Matrix, 행과 열을 바꿈)
'''
#----------------------------------------------
W = np.array([[0.1, 0.2],
[0.3, 0.4],
[0.5, 0.6]]) # 가중치 행렬 (3x2)
# 행렬 곱 연산 (2x3) @ (3x2) = (2x2)
output = X @ W
반가운 행렬이 나왔다. 수학 조교할떄가 생각나는군!
5. 집계 함수와 축(Axis) 개념
'''
손실 함수(Loss Function)를 계산하거나
데이터의 특성별 평균을 구할 때 사용.
axis 개념을 정확히 이해하는 것이 중요!!!!!
axis=0: 열(Column) 기준 연산
(행을 따라 내려가며 연산 -> 각 특성별 평균)
axis=1: 행(Row) 기준 연산
(열을 가로지르며 연산 -> 각 샘플별 합계)
'''
#----------------------------------------------
# 각 특성(열)별 평균 계산 -> 머신러닝 정규화(Normalization)의 기초
mean = np.mean(X, axis=0)
6. 조건문과 인덱싱 (Filtering)
'''
데이터셋에서 특정 조건(예: 이상치 제거, 특정 클래스 추출)을 만족하는
데이터만 뽑아낼 때 사용.
불리언 인덱싱(Boolean Indexing): 조건식의 결과가 True인 요소만 추출
np.where(조건, 참일 때 값, 거짓일 때 값): 조건에 따른 데이터 수정 또는 인덱스 찾기
'''
#----------------------------------------------
# 3보다 큰 데이터만 추출
filtered_X = X[X > 3]
# 3보다 큰 값은 1로, 나머지는 0으로 변환 (이진 분류 레이블링 등에 유용)
binary_labels = np.where(X > 3, 1, 0)
where은 삼항연산자랑 똑같음
#행렬
# 1. 전치 행렬 (Transpose, .T)
"""
"가로줄과 세로줄을 통째로 맞바꾸기"
머신러닝에서는 데이터의 형태(shape)를 맞추기 위해 행렬을 휙 돌려야 할 때가 정말 많다.
가로(행)를 세로(열)로, 세로(열)를 가로(행)로 뒤집는 것을 전치
결과: 원래 [1, 2, 3]이었던 가로줄이 세로줄 [1, 2, 3]으로 변경
"""
#----------------------------------------------
import numpy as np
# 2행 3열짜리 행렬 생성
A = np.array([[1, 2, 3],
[4, 5, 6]])
# .T를 붙여서 뒤집기
A_transposed = A.T
print("원본 A (2x3):\n", A)
print("전치 후 A.T (3x2):\n", A_transposed)
#----------------------------------------------
# 2. 행렬 곱 (Dot Product, @)
"""
"앞 행렬의 가로줄과 뒤 행렬의 세로줄을 교차하며 곱하고 더하기"
인공지능 신경망이 '예측'을 할 때 입력 데이터와 가중치(Weight)를 곱하는 핵심 연산.
일반 곱셈(*)처럼 원소끼리 그냥 곱하는 게 아니라, 가로와 세로를 교차하며 곱해 합산.
규칙: 앞 행렬의 가로 길이와 뒤 행렬의 세로 길이가 반드시 같아야 연산이 가능!!
((2x3) @ (3x2) = (2x2))
계산 원리: 결과 창의 첫 번째 칸은 (1*1) + (2*3) + (3*5) = 22
"""
#----------------------------------------------
# 2행 3열 행렬 (예: 데이터 2개)
X = np.array([[1, 2, 3],
[4, 5, 6]])
# 3행 2열 행렬 (예: 가중치)
W = np.array([[1, 2],
[3, 4],
[5, 6]])
# 행렬 곱 실행
result = X @ W
print("행렬 곱 결과 (2x2):\n", result)
#머신러닝 데이터 처리
#----------------------------------------------------------------
# 요약하자면,
# 머신러닝 데이터 처리는
# ".T로 돌리고,
# @로 곱하고,
# 브로드캐스팅으로 알아서 맞춰 더한 뒤,
# axis로 원하는 방향의 평균을 내는 과정"의 반복
#----------------------------------------------------------------
#----------------------------------------------
# 이미지 분석할때
'''
1. 컴퓨터에게 이미지는 그냥 '숫자 행렬'이다
우리 눈에는 예쁜 사진으로 보이지만,
컴퓨터는 이미지를 거대한 숫자 바둑판(행렬)으로 인식.
가로 세로 픽셀마다 밝기나 색상(0~255)이 숫자로 채워져 있다.
예를 들어, 가로 28픽셀, 세로 28픽셀짜리 작은 손글씨 이미지는
컴퓨터에게 28 X 28 크기의 행렬일 뿐이다.
2. 이미지 분석의 핵심: 특징 추출 (합성곱, Convolution)
이미지를 분석하려면 사물의 '테두리(선)', '색상의 변화', '특정 모양' 같은 특징을 찾아내야 한다.
이때 인공지능은 필터(Filter 또는 Kernel)라고 불리는
작은 돋보기 행렬을 사용하는데,
여기서 바로 행렬곱이 쓰인다.
도장 찍기: 이미지 행렬 위에 작은 필터 행렬(예:3X3)을 포갠다.
행렬곱 연산: 포개어진 부분의 이미지 숫자들과 필터의 숫자들을 순서대로 곱하고 모두 더한다.
(우리가 방금 배운 그 행렬곱 방식입니다!)
특징 맵 생성: 이 돋보기를 옆으로, 아래로 한 칸씩 이동하며 이미지 전체에 도장을 찍으면,
특정 특징(예: 세로선)만 뚜렷하게 강조된 새로운 행렬이 만들어진다.
💡 딥러닝에서 이미지 분석에 최고로 꼽히는
**CNN(합성곱 신경망)**의 '합성곱'이 바로 이 필터를 이용한 행렬곱 연산을 의미.
3. 최종 판단: 분류 (Fully Connected Layer)
필터를 통해 이미지에서
"고양이 귀 모양", "고양이 수염 모양" 같은 특징들을 다 뽑아내고 나면,
인공지능은 마지막으로 "그래서 이 사진이 고양이일 확률이 몇 %인가?"를 계산해야 한다.
이때도 마찬가지로
추출된 특징 데이터 행렬과
인공지능이 학습한 가중치(Weight) 행렬을
최종적으로 거대하게 행렬곱(@) 하여
"고양이: 98%, 강아지: 2%" 같은 결론을 도출한다.
'''
#----------------------------------------------
#----------------------------------------------------------------
# 요약하자면,
# 컴퓨터가 이미지를 분석하는 과정은
# "이미지 행렬에
# 필터 행렬을 계속 곱해서(@)
# 중요한 특징을 짜낸 후,
# 마지막 행렬곱을 통해
# 정답을 맞추는 과정"이라고 볼 수 있다.
#----------------------------------------------------------------'파이썬' 카테고리의 다른 글
| 0714 ML/DL(2) (0) | 2026.07.14 |
|---|---|
| 0713 ML/DL (0) | 2026.07.13 |
| 0709 파이썬 기초 문법 복습 (0) | 2026.07.09 |
| 0708 데이터 분석 및 시각화 (0) | 2026.07.09 |
| 0707 Pandas (0) | 2026.07.09 |