생활코딩에서 여러번 보고 들으면서 앞부분(머신러닝에 관한 간단한 설명)은 쉽게쉽게 읽어나가면서 소화한 듯
1. 머신러닝의 개념
컴퓨터에게 수많은 데이터를 학습시켜서 모델을 만들고(패턴파악) 미래(결과)를 예측하게끔
ex)금융사기 방지 알고리즘 : 정교하고 복잡한 소스코드보다 이를 관통하는 일정한 패턴을 찾아 응용하게끔
but 데이터에 매우 의존적(Garbage in Garbage out)-> 결국은 데이터..
2. 파이썬 머신러닝 생태계를 구성하는 주요 패키지
패키지 종류는 나중에 각각의 패키지 다룰 때 자세하게 하고 일단 기본 개념부너 다시 짚고 넘어가자(이때 아니면 영원히 안찾아볼 듯)
패키지(Package) : 여러 사람들에 의해서 만들어지는 클래스들. 이름이 똑같아서 충돌할 때 이때 패키지로 묶어서 충돌을 막아준다. (대출 클래스들을 일괄적으로 묶어놓은 상위의 무언가로 이해하면 되는 듯하다)
인터페이스(Interface) : 기능으로서의 인터페이스만 보자면, "규제". 어떤 클래스가 있고 그 클래스가 특정한 인터페이스를 사용한다면 그 클래스는 반드시 그 인터페이스에 속해있는 메소드를 구현해야한다. 만약 그 인터페이스가 강제하고 있는 메소드를 구현하지 않으면 컴파일 조차 되지 않는다.
API (Application Programming Interface): 파이썬이 제공하는 함수들을 부품으로 응용해서 컴퓨터가 제공하지 않는 새로운 기능을 만들 수 있어. 결국 application: 기존의 기능을 응용해서/ program: 시간의 순서에 따라 동작하는 일들-> application을 구현하기 위해 시간의 순서대로 배치할 기능들.
print, list등의 부품(문법적 요소)들은 파이썬이 내장하는 api들
-> 이 부품들을 응용해서 새로운 함수를 만들고 그 함수를 타인이 사용할 수 있도록 공개하면 타인은 우리가 제공하는 함수를 통해 application을 만들 수 있게 됨. 이때 우리가 부품을 응용하고 결함해서 만든 기능이 api라는 것
=> 뭔가 돌고 도는 느낌이다?..
3. 넘파이(ndarray)
⊙머신러닝의 이론적 백그라운드는 선형개수와 통계로 이루어져있는게 이 이론을 다루는 패키지. Numercial Python
⊙ndarray는 Numpy의 핵심인 다차원 행렬 자료구조 클래스(그래서 차원을 이해하는 것이 중요). 계산하는 라이브러리라고 생각하면 편함.
1) ndarray 활용하기
-ndim
행과 열의 수를 튜플형태로 가지고 있기 때문에 배열의 차원을 알 수 있다.
import numpy as np array1=np.arrapy([1,2,3]) array2=np.arrapy([1,2,3],[2,3,4]) array3=np.arrapy([[1,2,3]]) print('array1: {:0}차원, array2: {:1}차원, array3: {:2'}차원.format(array1.ndim, array2.ndim, array2.ndim)) |
<output> array1: 1차원, array2: 2차원, array3: 2차원 |
array3가 2차원인 이유는 리스트 안에 리스트가 존재하기 때문
-astype() : 데이터 타입 확인
ndarray는 모든 데이터 유형 가능. 데이터 유형이 섞여있는 리스트를 ndarray로 변경하면 데이터 크기가 더 큰 데이터 타입으로 형 변환을 함. 이때 원하는 타입을 문자열로 지정
array_int=np.array([1,2,3]) array_float=array_int.astype('float64') array_int1=array_float.astype('int32') print(array_float, array_float.dtype) print(array_int1, array_int1.dtype) |
<output> [1. ,2. ,3.] float64 [1,2,3] int32 |
그런데 이렇게 하면 메모리를 얼마나 줄일 수 있으려나..
-arange(): ndarray생성
0부터 순서대로 나타내준다
-reshape(): 차원과 크기를 변경
array1=np.arange(10) print(array1) array.reshape(2, 5) |
<output> [0 1 2 3 4 5 6 7 8 9] [[0 1 2 3 4] [55 6 7 8 9]] |
-indexing 슬라이싱: 데이터 세트 선택하기
일단 데이터 가져오는 방식 리마인딩-순서는 0부터 시작, -(마이너스)붙으면 역순으로. 역순일 때에는 -1부터 시작
array(□:△)->□번째부터 △-1번째 까지
array1=np.arange(start=1, stop=10) array2=array1.reshape(3,3) print(array2) print('indexing: ', array2[0,0], array2[0,1], array2[1,0], array2[2,2]) print('array2[0:2,0:2]|n', array2[0:2,0:2]) print('array3[1:3,0:3]|n', array3[1:3,0:3]) |
<output> [[1 2 3] [4 5 6] [7 8 9]] indexing: 1,2,4,9 array2[0:2,0:2] [[1 2] [4 5]] array3[1:3,0:3] [[4 5 6] 7 8 9]] |
-sort(), agsort(): 행렬의 정렬
np.sort()는 원 행렬을 그대로 유지한 채 반환, ndarray.sort()는 변환은 하지만 반환은 x
org_array=np.array([3, 1, 9, 5]) sort_array1_desc=np.sort(org_array)[::-1] print('내림차순으로 정렬: ',sort_array1_desc) |
내림차순으로 정렬: [9 5 3 1] |
2) 선형대수 연산
-행렬 내적(행렬 곱)
np.dot()를 이용
행과 열의 원소를 순차적으로 곱한 뒤 다 더하면 됨
-전치행렬
tranpose()를 이용
행과 열의 위치를 바꿔서...(왜....이걸 사용하는지...는 모르겠다.. 스터디때 건휘가 찾아와주겠디)
'cs,코딩,알고리즘 > <파이썬 머신러닝 완벽 가이드>스터디' 카테고리의 다른 글
피마 인디언 당뇨병 예측 (0) | 2021.09.25 |
---|---|
2. 사이킷런-붓꽃 품종 분류하기 (0) | 2021.09.20 |
2. 사이킷런으로 시작하는 머신러닝(1)붓꽃분류 (0) | 2021.09.19 |
1. 파이썬 기반의 머신러닝과 생태계의 이해(2)pandas (0) | 2021.09.11 |
0. 스터디 시작 (0) | 2021.09.09 |