Bike Sharing Demand
https://www.kaggle.com/code/lana5959/bike-sharing-demand1/edit
TODO: 이전 글 보면서 remind
Machine Learning
수업자료
https://github.com/good593/class_ML
GitHub - good593/class_ML
Contribute to good593/class_ML development by creating an account on GitHub.
github.com
머신러닝 개요
class_ML/1. Basic ML/1. 머신러닝 개요.ipynb at main · good593/class_ML
Contribute to good593/class_ML development by creating an account on GitHub.
github.com
- 100년도 안된 인공지능. 대부분은 과거 인공지능 초창기에 개발됨.
- 과거엔 ( I > 컴 > O ), 지금은 ( I/O >컴> 프로그램 ) 방식으로 programming 돌린다.
- 모델 학습은 로스(실제값과 예측값의 차이) 를 줄이는 방향으로 모델 파라미터 업뎃하는 것!
- 학습 유형: 지도 (분류/회귀) /비지도(클러스터링)/강화
- 용어
- x(feature) > y (label,class), loss (정답과 예측 차이), metric (평가지표)
- parameter:
- 시스템 동작 방식이나 특성 설명하는데 필요한 값,
- 모델 학습 과정중 데이터에 따라 최적화되는 값
- hyperparameter:
- hyper (다른 차원에 있는)
- 모델 학습 과정과 구조 관련 parameter보다 더 높은 수준에서 설정해야하는 파라미터
- 모델 학습법,학습 속도,네트워크 구조 조정
scikit-learn
https://github.com/good593/class_ML/blob/main/1.%20Basic%20ML/2.%20Scikit-learn%20Quickstart.ipynb
class_ML/1. Basic ML/2. Scikit-learn Quickstart.ipynb at main · good593/class_ML
Contribute to good593/class_ML development by creating an account on GitHub.
github.com
- random key (seed) 보통은 고정하지 않는다. 특수상황 (경진대회, 강의)할 때는 증명을 위해서 고정한다.
- 모델에서 "시드(seed)"란 난수 생성의 시작점을 설정하는 값을 의미합니다. 주로 머신러닝, 데이터 분할, 모델 훈련 등에서 사용되며, 재현 가능한 실험 결과를 얻기 위해 중요합니다.
- 재현성: 같은 시드를 사용하면 여러 번 실행하더라도 동일한 결과를 얻을 수 있어, 실험이나 분석 결과를 확인하거나 재현하는 데 유용합니다.
- 비교: 서로 다른 모델이나 알고리즘을 비교할 때 동일한 데이터와 조건에서 테스트할 수 있도록 합니다.
- 디버그: 모델이 작동하는 방식을 이해하거나 오류를 찾아내는 데 도움이 됩니다. 같은 시드로 테스트하면 변수가 줄어들어 문제를 더 쉽게 식별할 수 있습니다.
- 데이터셋을 훈련 세트와 테스트 세트로 나눌 때 시드를 설정하면 항상 같은 데이터가 각 세트에 할당됩니다.
- 랜덤 초기화를 하는 신경망 모델에서는 시드를 통해 초기 가중치가 동일하게 설정됩니다.
- 난수 생성기는 복잡한 수학적 알고리즘을 통해 무작위 숫자를 생성합니다. 시드를 지정하면 난수 생성기가 같은 순서와 같은 결과를 반환하게 됩니다. 이렇게 하면 다음과 같은 몇 가지 장점이 있습니다:
학습 과정
- 데이터 수집
- 학습/검증 데이터 분리
- train data 점검/탐색
- 전처리/정제 (train,test 분리,shape 맞춰줘야 함)
- 모델링 (LogisticRegression)
- 평가 (accuracy)
Numpy
https://github.com/good593/class_ML/tree/main/1.%20Basic%20ML/1.%20numpy
class_ML/1. Basic ML/1. numpy at main · good593/class_ML
Contribute to good593/class_ML development by creating an account on GitHub.
github.com
선형대수학
- scalar (0 차원, 값, 점)
- vector (1차원, 값+방향, 집합(리스트) 개념, 선)
- matrix (2차원, 행렬)
- 대각행렬 : 스케일 변환, 즉 각각 방향으로 벡터의 크기 조정함. 대각행렬의 각 숫자는 조정 비율임.
- 정방행렬 :정사각형/ (i,i) 원소= 주대각 원소
- 단위행렬 : 대각행렬, 대각선 항 모두 1인 정방행렬, 항등행렬
- 영행렬 : zero 정방행렬
- 전치행렬: Transpose, 행과 열이 전치 됨.
- 대칭행렬: 정방행렬이 자신의 전치행렬과 같을 때
- 직교행렬: 선형 변환 중 회전 변환, 벡터 사이 각도 90도, 길이가 1인 벡터로 구성.
numpy
- numpy는 효율적 배열 처리와 수치 계산을 위한 파이썬 라이브러리. 다차원 배열 객체와 다양한 수치 연산 기능 제공
- arr = np.array( [ [1,2,3] , [4,5,6] ] )
- arr.size (scalar num), arr.ndim (dimension num), arr.shape (vec num, scalar num)
- 차원변환
- 차원추가: arr[:, np.newaxis], np.expand_dims(arr, axis=1)
- arr.resize((row,col)) / 원본 바뀜
- arr.ravel() : flattened
- arr.T : Transpose
- arr.reshape(4,-1) : -1은 알아서 차원 계산해서 넣어줌/ 원본 유지. copy 가 나옴.
- data type
- arr.dtype : data type 확인
- arr.astype(np.float32): 타입 변환 (3 :int, 3.0: float)
- np.int8(arr) 같은 것도 가능하다.
- np.power(100,8,np.int64) vs np.power(100,8,np.int32) => data type을 널널하게 해야 오류 안남.
- np.iinfo(np.uint8) : => iinfo(min=0, max=255, dtype=uint8) : 범위 확인
여기 있는 거 다 공부할 필요 없다. 내 스타일에 맞게 골라서 쓰면 된다. 다만 공부할 땐 다른 사람 코드 볼 때 해석이 가능해야하기 때문에 알아둬야 한다.
- slicing / indexing
lst = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
arr = np.array(lst)
arr[:,::-1]
array([[3, 2, 1],
[6, 5, 4],
[9, 8, 7]])
arr[::2, :]
array([[1, 2, 3],
[7, 8, 9]])
- 배열 조건 연산
- arr[ (arr > 2) & (arr <11) ]
- arr[ (arr > 2) | (arr <11) ]
- np.where (arr>5,1,0) : 조건/참인 경우/거짓 경우 반환값
- np.any() : or 조건, np.all() : and 조건
- np.inf: 무한, np.nan 결측치
- np.isinf(), np.isnan(), np.isfinite() : 무한이냐, nan값이냐, 유한이냐 => 마스킹
-
is_nan = np.isnan(arr)np.any(is_nan), np.all(is_nan)
-
- Broadcasing
- 두 배열의 모양이 달라도 특정 조건(벡터 길이동일) 만족시 작은 배열을 자동으로 큰 배열 크기에 맞춘다.
-
arr1 = np.array([[ 0.0, 0.0, 0.0],[10.0, 10.0, 10.0],[20.0, 20.0, 20.0],[30.0, 30.0, 30.0]])arr2 = np.array([1.0, 2.0, 3.0])arr1 + arr2array([[ 1., 2., 3.], [11., 12., 13.], [21., 22., 23.], [31., 32., 33.]])
-
arr1 = np.array([0.0, 10.0, 20.0, 30.0])arr2 = np.array([1.0, 2.0, 3.0])arr1[:, np.newaxis] + arr2array([[ 1., 2., 3.], [11., 12., 13.], [21., 22., 23.], [31., 32., 33.]])
주어진 코드에서 NumPy 배열을 이용하여 브로드캐스팅(broadcasting)을 활용하는 과정을 단계별로 설명하겠습니다.
1단계: 배열 생성
먼저 두 개의 NumPy 배열을 생성합니다.
import numpy as np
arr1 = np.array([0.0, 10.0, 20.0, 30.0]) # 1차원 배열, shape은 (4,)
arr2 = np.array([1.0, 2.0, 3.0]) # 1차원 배열, shape은 (3,)
2단계: np.newaxis 사용
arr1[:, np.newaxis] 코드에서 np.newaxis를 사용하여 arr1의 차원을 변경합니다.
arr1[:, np.newaxis]
이 부분은 arr1을 2차원 배열로 변환합니다. 따라서 arr1의 shape은 (4, 1)로 변화합니다. 결과는 다음과 같습니다:
3단계: 브로드캐스팅
이제 두 배열을 더하는 과정입니다. arr1은 (4, 1) 형상이고 arr2는 (3,) 형상입니다. NumPy는 브로드캐스팅을 통해 배열의 모양을 맞춰줍니다.
- 브로드캐스팅:
- arr1의 shape이 (4, 1) -> 각 행을 복제하여 (4, 3)으로 변형
- arr2는 기본적으로 (3, )에서 (1, 3)으로 변형 후, arr1과 같은 형태를 가집니다.
결과적으로:
arr1[:, np.newaxis] + arr2
는 다음과 같이 계산됩니다:
[ \begin{pmatrix} 0 \ 10 \ 20 \ 30 \ \end{pmatrix} + \begin{pmatrix} 1 & 2 & 3 \ \end{pmatrix} = \begin{pmatrix} 0 + 1 & 0 + 2 & 0 + 3 \ 10 + 1 & 10 + 2 & 10 + 3 \ 20 + 1 & 20 + 2 & 20 + 3 \ 30 + 1 & 30 + 2 & 30 + 3 \ \end{pmatrix} = \begin{pmatrix} 1 & 2 & 3 \ 11 & 12 & 13 \ 21 & 22 & 23 \ 31 & 32 & 33 \ \end{pmatrix} ]
4단계: 결과
결과적으로 최종 배열은 다음과 같습니다:
array([[ 1., 2., 3.],
[11., 12., 13.],
[21., 22., 23.],
[31., 32., 33.]])
요약
- arr1을 2차원 배열로 변환하여 각각의 숫자를 새로운 행으로 만들었습니다.
- arr2의 값을 각 숫자에 더하면서 각 행마다 연산이 이루어집니다.
- 최종 결과는 두 배열을 브로드캐스팅하여 연산한 새로운 2차원 배열입니다.
추가 질문이 있으시면 언제든지 말씀해 주세요!
'개발공부 > SK Networks Family AI bootcamp 강의노트' 카테고리의 다른 글
17-18일차 [ 타이타닉 데이터 재분석 ] (0) | 2025.02.06 |
---|---|
17일차 [ numpy 심화 ] (0) | 2025.02.06 |
16일차 [ Seaborn, EDA ] (1) | 2025.02.05 |
15일차 [ 데이터 시각화 심화 ] (0) | 2025.02.05 |
15일차 [ matplotlib ] (0) | 2025.02.04 |