목차
머신러닝 분류
1. 지도학습
- 분류
- 회귀
- 추천 시스템
- 시각/음성 감지/인식
- 텍스트 분석(NLP)
2. 비지도학습
- 클러스터링
- 차원 축소
3. 강화학습
넘파이
넘파이의 기반 데이터 타입은 ndarray다.
ndarray로 다차원 배열을 생성할 수 있다.
#배열 생성
array1=np.array([1,2,3])
#배열의 형태 확인
print(array1.shape)
array1은 1차원이고 3개의 데이터를 가지기 때문에
출력 결과물은 (3, ) 이다.
ndarray에 들어갈 수 있는 데이터 타입으로는 숫자, 문자열, bool 등 모두 가능하다.
ndarray 안에서는 연산을 위해서 같은 데이터 타입만 존재해야 한다.
그렇다면 ndarray를 만들 때 다른 타입의 데이터가 들어간 경우 어떻게 되는지 확인해보자.
list2=[1, 2, 'test']
array2=np.array(list2)
print(array2.dtype)
이 경우 int형의 데이터인 1과 2가 유니코드 문자열 값으로 변환한다.
따라서 출력 결과물은 <U11 이다.
nparray를 편하게 생성하는 방법
np.arange(10) #0부터 9까지 nparray의 데이터로 만들어줌
np.zeros((3,2), dtype='int32') #(3,2)의 shape을 가지고 0으로 채원진 ndarray 생성
np.ones((3,2)) # (3,2)의 shape을 가지고 1로 채워진 ndarray 생성
- arange() : 연속적인 값으로 nparray 생성 가능
- zeros() : 0으로 초기화해서 nparray 생성 가능
- ones() : 1로 초기화해서 nparray 생성 가능
위 코드에서 zeros 함수를 사용할 때 데이터 타입을 지정했는데, 만약 데이터 타입을 지정하지 않았을 경우 디폴트 값은 float64다.
nparray의 차원과 크기 변경
array1=np.arange(10)
array2=array1.reshape(2,5)
reshape() 함수를 사용하면 ndarray의 차원과 크기를 변환할 수 있다.
array1은 1차원이고 데이터가 10개라서 2*5, 5*2 등으로 변환할 수 있다.
만약 10*3으로 변환하려고 하면 오류가 발생하고 변경이 불가능하다.
nparray를 효율적으로 사용하는 방법은 인자로 -1을 사용하는 것이다.
array1=np.arange(10)
array2=array1.reshape(-1, 5)
array3=array1.reshpae(5,-1)
print(array2.shape)
print(array3.shape)
첫 번째 출력 결과 : (2,5)
두 번째 출력 결과 : (5,2)
array2는 칼럼 인자인 5에 맞춰서 자동으로 변환하라는 뜻이고
array3은 로우 인자인 5에 맞춰서 자동으로 변환하라는 뜻이다.
넘파이에서 인덱싱하기
1차원 ndarray에서 데이터 추출하기
#단일 값 추출
array1=np.arange(10)
print(array1[2])
array1은 [0 1 2 3 4 5 6 7 8 9]이기 때문에 해당 값의 결과는 1이다.
인덱스로 접근해서 데이터 수정도 가능하다.
그렇다면 1차원이 아닌 2차원의 ndarray에서 데이터를 추출해보자.
#앞에서 만든 array1을 변환해 array2를 만든다.
array2=array1.reshape(3,3)
print(array2[1,0])
해당 값의 결과는 3이다
col 0 | col 1 | col 2 | |
row 0 | 0 | 1 | 2 |
row 1 | 3 | 4 | 5 |
row 2 | 6 | 7 | 8 |
불린 인덱싱
조건 필터링과 검색에 사용할 수 있기 때문에 자주 사용되는 인덱싱이다.
array1=np.arange(10)
array2=array1[array1>5]
print(array2)
print(array1>5)
첫번째 출력 결과 : [6 7 8 9]
두번째 출력 결과 : [False, False, False, False, False, False, True, True, True, True]
행렬 정렬
np.sort()와 ndarray.sort()를 사용해서 행렬을 정렬할 수 있다.
array1=np.array([3,1,9,5])
sort_array1=np.sort(array1)
print(sort_array1)
출력 결과 : [1 3 5 9]
*np.sort()와 ndarray.sort()의 차이점
np.sort()는 원본 행렬은 변경하지 않고 정렬된 행렬을 반환한다.
ndarray.sort()는 원본 행렬 자체를 정렬한다.
두 함수 모두 디폴트가 오름차순이기 때문에 내림차순으로 정렬하고 싶으면[::-1]을 사용하면 된다.
sort_array1=np.sort(array1)[::-1]
행렬의 곱과 전치 행렬 구하기
두 행렬을 곱하려면 다음과 같이 왼쪽 행렬의 행과 오른쪽 행렬의 열이 같아야 한다.
A=np.array( [[1,2,3],[4,5,6]] )
B=np.array( [[7,8],[9,10],[11,12]] )
#행렬 곱
dot_result=np.dot(A,B)
행렬 곱을 할 때는 dot() 함수를 사용한다.
*전치 행렬이란?
원래 행렬에서 행과 열 위치를 교환한 원소로 구성한 행렬을 말한다.
transpose()를 사용해서 전치 행렬을 구할 수 있다.
A=np.array([[1,2], [3,4]])
transpose_result=np.transpose(A)
참고자료 : 파이썬 머신러닝 완벽 가이드
'Study > 머신러닝' 카테고리의 다른 글
[3] 머신러닝 - 판다스 기초(2) (0) | 2021.05.16 |
---|---|
[2] 머신러닝 - 판다스 기초(1) (0) | 2021.05.11 |
[PyTorch] torchvision을 활용한 image transform (0) | 2021.01.31 |
[tensorflow] 텐서플로우 콜백함수(Callbacks) (0) | 2021.01.31 |
[tensorflow] tf.data를 사용해 이미지 데이터 학습시키기 (0) | 2021.01.25 |