728x90
01. 머신러닝의 개념¶
◎ 머신러닝¶
- 머신러닝 : 데이터를 기반으로 패턴을 학습하고 결과를 예측하는 알고리즘 기법을 통칭합니다.
- 머신러닝의 분류 : 일반적으로 머신러닝은 지도학습, 비지도학습, 강화학습으로 나뉩니다.
- 지도학습 : 분류, 회귀, 추천 시스템, 시각/음성 감지/인지, 텍스트 분석, NLP로 나눌 수 있습니다.
- 비지도학습 : 클러스터링, 차원 축소, 강화학습으로 나눌 수 있습니다.
- 머신러닝의 가장 큰 단점은 데이터에 매우 의존적입니다. {Garbage IN, Garbage OUT}
◎ 파이썬과 R 비교¶
- R은 통계 전용 프로그램 언어, 파이썬은 개발 전문 프로그램 언어입니다.
- 파이썬의 장점 : 쉽고 뛰어난 개발 생산성, 인터프리터 언어(interpreter Language)의 특성상 속도는 느리지만, 뛰어난 확장성, 유연성, 호환성으로 인해 다양한 영역에서 사용, 다양한 애플리케이션 개발이 가능, 다양한 기업 환경으로의 확산이 가능 + 텐서플로(TensorFlow), 케라스(Keras), 파이토치(PyTorch) 등에서 파이썬 우선 정책으로 파이썬을 지원
02. 파이썬 머신러닝 생태계를 구성하는 주요 패키지¶
◎ 파이썬 기반 머신러닝을 위해 필요한 패키지¶
- 머신러닝 패키지 : 가장 대표적인 머신러닝 패키지는 사이킷런(Scikit-Learn)이라고 생각합니다.
- 행렬/선형대수/통계 패키지 : 파이썬의 대표 행렬과 선형대수 패키지는 넘파이(NumPy)입니다.
- 데이터 핸들링 : 파이썬 세계의 대표적인 데이터 처리 패키지는 판다스입니다. 판다스는 2차원 데이터 처리에 특화되어 있습니다.
- 시각화 : 대표 시각화 패키지는 맷플롯립입니다. 맷플롯립은 너무 세분화된 API로 익히기가 번거로우며 시각적인 디자인 부분에서도 투박한 편입니다. 단순히 시각화를 위해 작성하는 코드가 길어지는 불편함이 있어 이를 보완하고자 시본(Seaborn) 같은 시각화 패키지가 출시되고 있습니다.
- 아이파이썬 툴 : 아이파이썬은 대화형 파이썬 툴을 지칭하며 대표인 아이파이썬 지원 툴로 주피터 노트북이 있습니다. 코드 단위로 설명을 적고 코드를 수행해 그 결과를 볼 수 있게 만들어서 직관적으로 어떤 코드가 어떤 역할을 하는지 매우 쉽게 이해할 수 있도록 지원
◎ 파이썬 머신러닝을 위한 S/W 설치¶
- 위 내용은 생략하겠습니다.
◎ 넘파이¶
- 넘파이(Numpy)는 파이썬에서 선형대수 기반의 프로그램을 쉽게 만들 수 있도록 지원하는 대표적인 패키지입니다. (루프[반복문]을 사용하지 않고도 빠른 배열 연산이 가능)
- 넘파이는 판다스의 편리성에는 미치지 못한다.
03. 넘파이 ndarray¶
◎ ndarry¶
- import numpy as np
- 넘파이의 기반 데이터 타입은 ndarray입니다. ndarray를 이용해 넘파이에서 다차원배열을 쉽게 생성하고 다양한 연산을 수행할 수 있습니다.
- ndarray내의 데이터값은 숫자, 문자열, 불 등이 모두 사용 가능합니다.
- ndarray내의 데이터 타입은 같은 데이터 타입만 연산이 가능합니다. (dtype를 통해 속성 확인 가능)
- 다른 데이터 유형이 섞여 있는 리스트를 ndarray로 변경하면 데이터 크기가 더 큰 데이터 타입으로 형 변환을 일괄 적용합니다.
- ndarray 내 데이터값의 타입 변경은 astype() 메서드를 이용해 할 수 있습니다. 이를 통해 메모리를 더 절약할 수 있습니다.
- 특정 크기와 차원을 가진 ndarray를 연속값이나 0또는 1로 초기화하고 싶을때 arange(), zeros(), ones()를 이용하면 됩니다.
- 차원과 크기를 변경하고자 하면 reshape() 사용 (reshape()에 -1값을 인자로 적용하면 자동으로 shape에 맞게 변경 가능) + reshape(-1,1)은 원본 ndarray가 어떤 형태라도 2차원이고, 여러 개의 로우를 가지되 반드시 1개의 칼럼을 가진 ndarray로 변환됨을 보장합니다.
- 특정 데이터 세트만 선택할 시 사용하는 인덱싱(Indexing), 팬시 인덱싱은 리스트나 ndarray로 인덱스 집합을 지정하면 해당 위치의 인덱스에 해당하는 ndarry를 반환하는 인덱싱 방식입니다.
- 불린 인덱싱(Boolean indedxing)은 조건 필어팅과 검색을 동시에 할 수 있기 때문에 매우 자주 사용되는 인덱싱 방식입니다. 원하는 필터링 조건만 넣으면 해당 조건을 만족하는 ndarry 데이터 세트를 반환하기 때문에 사용자는 내부 로직에 크게 신경 쓰지 않고 쉽게 코딩할 수 있습니다.
◎ 행렬의 정렬¶
- np.sort()는 원본 행렬을 변경하지 않고 정렬된 형태로 반환, ndarray.sort()는 원본 행렬 자체를 정렬한 값으로 변환합니다. 두 함수 모두 오름차순으로 행렬 내 원소를 정렬하며 내림차순으로 정렬하기 위해서는 [::-1]을 적용합니다.
- 2차원 이상일 경우 axis 축 값 설정을 통해 로우 방향, 또는 칼럼 방향으로 정렬을 수행할 수 있습니다.
- np.argsort()는 정렬 행렬의 원본 행렬 인덱스를 ndarray 형으로 반환합니다.
◎ 선형대수 연산¶
- 행렬 내적 : 행렬의 곱이며 np.dot()을 이용해 계산이 가능합니다.
- 전치 행렬 : 원 행렬에서 행과 열 위치를 교환한 원소로 구성한 행렬을 그 행렬의 전치 행렬이라고 하며 np.transpose()를 이용해 계산이 가능합니다.
04 데이터 핸들링 - 판다스¶
◎ 판다스(Pandas)¶
- 판다스는 파이썬에서 데이터 처리를 위해 존재하는 가장 인기 있는 라이브러리입니다.
- 판다스는 2차원 데이터를 효율적으로 가공/처리할 수 있는 다양하고 훌륭한 기능을 제공합니다. 넘파이는 저수준 API가 대부분이며 판다스는 훨씬 유연하고 편리하게 데이터 핸들링을 가능하게 해줍니다.
- 판다스는 파이썬의 리스트, 컬렉션, 넘파이 등의 내부 데이터뿐만 아니라 CSV 등의 파일을 쉽게 DataFrame으로 변경해 데이터의 가공/분석을 편리하게 수행할 수 있게 만들어줍니다.
- 판다스의 핵심 객체는 DataFrame으로 여러 개의 행과 열로 이뤄진 2차원 데이터를 담는 데이터 구조체입니다.
- 판다스는 read_csv(), read_table(), read_fwf() 등 다양한 포맷으로 된 파일을 DataFrame으로 로딩할 수 있는 편리한 API를 제공합니다. 구체적으로 read_csv() 와 read_table()은 기능상 큰 차이가 없으며 read_fwf()는 고정 길이 기반의 칼럼 포맷을 Dataframe으로 로딩하기 위한 API입니다.
- info() 메서드를 통해서 총 데이터 건수와 데이터 타입, NULL 건수를 알 수 있습니다. describe() 메서드는 컬럼별 숫자형 데이터값의 n-percentile 분포도, 평균값, 최댓값, 최솟값을 나타냅니다. 이런 함수를 통해 데이터의 개략적인 분포도를 확인할 수 있습니다.
- value_counts() 메서드는 해당 칼럼값의 유형과 건수를 확인할 수 있습니다.
◎ DataFrame과 리스트, 딕셔너리, 넘파이 ndarray 상호 변환¶
- DataFrame은 행과 열을 가지는 2차원 데이터로 리스트와 넘파이 ndarray와 다르게 칼럼명을 가지고 있습니다. 따라서 2차원 이하의 데이터들만 DataFrame으로 변환될 수 있습니다. pd.DataFrame() 사용
- 딕셔너리를 DataFrame으로 변환 시에는 딕셔너리의 키(Key)는 칼럼명으로, 딕셔너리의 값(Value)는 키에 해당하는 칼럼 데이터로 변환됩니다.
- 반대로 DataFrame을 리스트로 변환할라면 tolist(), DataFrame을 딕셔너리로 변활할라면 to_dict()를 사용합니다.
◎ DataFrame 데이터 삭제¶
- DataFrame에서 데이터의 삭제는 drop() 메서드를 이용합니다. 그중 파라미터 axis 값에 따라서 특정 칼럼 또는 특정 행을 드롭합니다. (axis = 0은 로우 방향 축, axis = 1은 칼럼 방향 축입니다.)
- inplace = True로 설정하면 자신의 DataFrame의 데이터를 삭제합니다.
◎ Index 객체¶
- 판다스의 Index 객체는 DataFrame, Series의 레코드를 고유하게 식별하는 객체입니다. Index 객체는 식별성 데이터를 1차원array로 가지고 있습니다. 또한 ndarray와 유사하게 단일 값 반환 및 슬라이싱도 가능합니다.
◎ 데이터 셀렉션 및 필터링¶
- 넘파이의 경우 '[]' 연산자 내 단일 값 추출, 슬라이싱, 팬시 인덱싱, 불린 인덱싱을 통해 데이터를 추출했습니다. 판다스의 경우 ix[], iloc[], loc[] 연산자를 통해 동일한 작업을 수행합니다.
- DataFrame 바로 뒤의 [] 내 입력 값은 칼럼명을 지정해 칼럼 지정 연산에 사용하거나 불린 인덱스 용도로만 사용해야 합니다. DataFrame[0:2]와 같은 슬라이싱 연산으로 데이터를 추출하는 방법은 사용하지 않는 게 좋습니다.
- ix[]는 행 위치 지정으로 인덱스값 열 위치 지정으로 칼럼 명 또는 칼럼의 위치 값 지정으로 원하는 값 추출하는 함수입니다. 가독성이 떨어지는 ix[]는 현재 판다스에서 사라지게 되었습니다.
- 이를 대신할 칼럼 명칭 기반 인덱싱 연산자 loc[]와 칼럼 위치 기반 인덱싱 연산자 iloc[]가 새롭게 만들어졌습니다.
- loc[]에 슬라이싱 기호를 적용하면 종류 값-1이 아니라 종료 값까지 포함하는 것을 의미합니다. 이는 명칭은 숫자 형이 아닌 수 있기 때문에 -1을 할 수가 없기에 명칭 기반 인덱싱의 특성 때문입니다. 반면, iloc[]는 종료 값-1까지 포함합니다.
◎ 불린 인덱싱¶
- 불린 인덱싱은 [], ix[], loc[]에서 공통으로 지원하지만 iloc[]는 정수형 값이 아닌 불린 값에 대해서는 지원하지 않기 때문에 불린 인덱싱이 지원되지 않습니다.
◎ 정렬, Aggregation 함수, GroupBy 적용¶
- DataFrame과 Series의 정렬을 위해서 sort_values() 메서드를 이용합니다. ascending = True로 설정하면 오름차순으로 정렬 반대는 내림차순으로 정렬하며 정렬 결과 변경 여부는 inplace를 통해 적용합니다.
- min(), max(), sum(), count()와 같은 aggregation 함수는 모든 칼럼에 적용합니다. 따라서 특정 칼럼에 aggregation 함수를 적용하기 위해서는 DataFrame에 대상 칼럼들만 추출해 적용하면 됩니다,
- groupby() 적용 : DataFrame에 groupby()를 호출해 반환된 결과에 aggregation 함수를 호출하면 groupby() 대상 칼럼을 제외한 모든 칼럼에 해당 aggregation 함수를 적용합니다. 여러 개의 aggregation 함수명은 agg() 내에 인자로 입력해서 사용합니다.
◎ 결손 데이터 처리하기¶
- 판다스는 결손 데이터를 처리하는 편리한 API를 제공합니다. 기본적으로 머신러닝 알고리즘은 이 NaN 값을 처리하지 않으므로 이 값을 다른 값으로 대체해야 합니다. 또한 NaN 값은 평균, 총합 등의 함수 연산 시 제외가 됩니다.
- isna()를 통해 NaN 여부를 확인하며 fillna()를 통해 다른 값으로 대체합니다.
◎ apply lambda 식으로 데이터 가공¶
- 판다스는 apply 함수에 lambda 식을 결합해 DataFrame이나 Series의 레코드별로 데이터를 가공하는 기능을 제공합니다.
- lambda 식은 파이썬에서 함수형 프로그래밍을 지원하기 위해 만들었습니다. lambda는 함수 내의 처리를 한 줄의 식으로 쉽게 변환하는 식입니다. e.f) lambda_square = lambda x : x ** 2
- lambda 식을 이용할 때 여러 개의 값을 입력 인자로 사용해야 할 경우에는 map() 함수를 결합해서 사용합니다.
- if 절의 사용하는 경우 if 식보다 반환 값을 먼저 기술해서 사용합니다.lambda x : 'child' if x <= 15 else 'Adult'
- if, else만 지원하고 if, else if, else와 같이 else if는 지원하지 않습니다.
05 정리¶
- 파이썬 머신러닝을 구성하는 다양한 패키지에 대해 알아봤습니다.
- 실제로 ML 모델을 생성하고 예측을 수행하는 데 있어서 ML 알고리즘이 차지하는 비중보다 데이터를 전처리하고 적절한 피처를 가공/추출하는 부분이 훨씬 많은 비중을 차지합니다. 따라서 사이킷런에 대한 이해도도 중요하지만 데이터의 구조를 파악하는 데 도움을 주는 넘파이, 판다스, 맷플롯립/시본과 같은 패키지에 대한 이해 역시 매우 중요합니다.
728x90
'Book report > 파이썬 머신러닝 완벽가이드' 카테고리의 다른 글
[파이썬 머신러닝 완벽가이드] 06. 차원 축소 (0) | 2022.09.12 |
---|---|
[파이썬 머신러닝 완벽가이드] 05. 회귀 (0) | 2022.09.11 |
[파이썬 머신러닝 완벽가이드] 04. 분류 (0) | 2022.04.24 |
[파이썬 머신러닝 완벽가이드] 03. 평가 (0) | 2022.04.10 |
[파이썬 머신러닝 완벽가이드] 02. 사이킷런으로 시작하는 머신러닝 (0) | 2022.03.27 |