사이킷런기반 프레임워크 익히기
1. Estimator 이해 fit(), predict() 메서드
- 사이킷런은 ML 모델 학습을 위해서 fit()을 , 학습된 모델의 예측을 위해 predict() 메서드를 제공.
- 지도학습의 주요 두 축인 분류와 회귀의 다양한 알고리즘을 구현한 모든 사이킷런 클래스는 fit()와 predict() 만을 이용해 간단하게 학습과 예측 결과를 반환
- 사이킷런에선느 분류 알고리즘을 구현한 클래스를 Classifier, 회귀 알고리즘을 구현한 클래스를 Regressor로 지칭
- Classifier 와 Regressor을 합쳐서 Estimator 클래스라고 부른다. 즉 ,지도학습의 모든 알고리즘을 구현한 클래스를 통칭해서 Estimator 라고 부른다.
corss_val_score() 와 같은 evluation 함수, GridSearchCV와 같은 하이퍼 파라미터 튜닝을 지원하는 클래스의 경우이 Estimator 를 인자로 받음 .
사이킷런에서 비지도 학습인 차원 축소, 클러스터링, 피처 추출등을 구현한 클래스 역시 대부분 fit()와 transform을 적용한다.
비지도학습과 피처 추출에서 fit()은 지도학습의 fit()과 같이 학습을 의미하는 것이 아니라 입력 데이터의 형태에 맞춰 데이터를 변환하기 위한 사전 구조를 맞추는 작업이다.
fit()으로 변환을 위한 사전 구조를 맞추면 이후 입력 데이터의 차원 변환, 클러스터링, 피처 추출등의 실제 작업은 transform()도 함께 제공한다.
2. 사이킷런의 주요 모듈
분류 | 모듈명 | 설명 |
---|---|---|
예제 데이터 | sklearn.datasets | 사이킷런에 내장되어 예제로 제공하는 데이터 셋 |
피처처리 | sklearn. preprocessing | 데이터 전처리에 필요한 다양한 가공 기능 제공(문자열을 숫자형 코드 값으로 인코딩, 정규화 스케일링등) |
피처처리 | sklearn. feature_selection | 알고리즘에 큰 영향을 미치는 피처를 우선순위대로 셀렉션 작업을 수행하는 다양한 기능 제공 |
피처처리 | sklearn. feature_extraction | 텍스트 데이터나 이미지 데이터의 벡터화된 피처를 추출하는데 사용됨. |
피처처리 &차원 축소 | sklearn. decomposition | 차원 축소와 관련한 알고리즘을 지원하는 모듈. PCA,NMF,Truncated SVD 등을 통해 차원 축소 기능을 수행 가능. |
데이터 분리, 검증 & 파라미터튜닝 | sklearn. model_selection | 교차 검증을 위한 학습용/테스트용 분리. 그리드 서치로 최적 파라미터 추출 등의 API 제공 |
평가 | sklearn. metrics | 분류, 회귀, 클러스터링, 페어와이즈에 대한 다양한 성능 측정 방법 제공. Accuracy, Precision, Recall, ROC-AUC, RMSE등 제공 |
ML알고리즘 | sklearn. ensemble | 앙상블 알고리즘 제공 랜덤 포레스트, 에이다 부스트, 그래디언트 부스팅 등을 제공 |
ML알고리즘 | sklearn. linear_model | 주로 선형 회귀, 릿지, 라쏘 , 및 로지스틱 회귀 등 회귀 관련 알고리즘을 지원. 또한 SGD관련 알고리즘도 제공 |
ML알고리즘 | sklearn. naive_bayes | 나이브 베이즈 알고리즘 제공. 가우시안 NB 다항분포 NB 등 |
ML알고리즘 | sklearn. neighbors | 최근점 이웃 알고리즘 제공. K-NN등 |
ML알고리즘 | sklearn. svm | 서포트 벡터 머신 알고리즘 제공 |
ML알고리즘 | sklearn. tree | 의사 결정 트리 알고리즘 제공 |
ML알고리즘 | sklearn. cluster | 비지도 클러스터링 알고리즘 제공 유틸리티 |
ML알고리즘 | sklearn. pipeline | 피처 처리 등의 변환과 ML 알고리즘 학습, 예측 등을 함께 묶어서 실행할 수 있는 유틸리티 제공 |
3. 내장된 예제 데이터셋
- 사이킷런에는 예제로 활용할 수 있는 간단하면서도 좋은 데이터 셋이 내장돼 있다.
API 명 | 설 명 |
---|---|
datasets. loda_boston() | 회귀 용도이며, 미국 보스턴의 집 피처들과 가격에 대한 데이터 셋 |
datasets. loda_breast_cancer() | 분류 용도이며, 위스콘신 유방암 피처들과 악성/음성 레이블 데이터 셋 |
datasets. load_diabetes() | 회귀 용도이며, 당뇨 데이터 셋 |
datasets. load_digits() | 분류 용도이며, 0 ~ 9 까지의 숫자의 이미지 픽셀 데이터 셋 |
datasets. load_iris() | 분류 용도이며, 붓꽃에 대한 피처를 가진 데이터 셋 |
- fetch 계열의 명령은 패키지에 처음부터 저장돼 있지 않고 다운받은 후 서브 디렉터리에 저장한 후 추후 불러쓰는 데이터다.
- fetch_covtype() : 회귀 분석용 토지 조사 자료
- fetch_20newsgroups(): 뉴스 그룹 텍스트 자료
- fetch_olivetti_faces() : 얼굴 이미지 자료
- fetch_lfw_people() : 얼굴 이미지 자료
- fetch_lfw_pairs() : 얼굴 이미지 자료
- fetch_rcv1() : 로이터 뉴스 말뭉치
- fetch_mldata() : ML웹사이트에서 다운로드
4. 분류와 클러스터링을 위한 표본 데이터 생성기
표본 데이터생성기는 이밖에도 많으며 , 아래 2개 정도로도 여러가지 사례에 사용할 수있다.
API 명 | 설 명 |
---|---|
datasets. make_classifications() | 분류를 위한 데이터 셋을 만듭니다. 특히 높은 상관도, 불필요한 속성 등의 노이즈 효과를 위한 데이터를 무작위로 생성해 줍니다. |
datasets. make_blobs() | 클러스터링을 위한 데이터 셋을 무작위로 생성. 군집 지정 개수에 따라 여러 가지 클러스터링을 위한 데이터 셋을 쉽게 만들어 줍니다. |
사이킷런에 내장된 데이터 셋의 의미
- data : 피처의 데이터 셋을 가리킵니다.
- target : 분류 시 레이블 값, 회귀일 때는 숫자 결괏값 데이터 셋입니다.
- target_names : 개별 레이블의 이름을 나타냅니다.
- feature_names : 피처의 이름을 나타냅니다.
- DESCR : 데이터 셋에 대한 설명과 각 피처의 설명을 나타냅니다.
from sklearn.datasets import load_iris
iris_data=load_iris()
print(type(iris_data))
<class 'sklearn.utils.Bunch'>
Bunch클래스는 파이썬 딕셔너리 자료형과 유사합니다. 데이터 셋에 내장돼 있는 대부분의 데이터 셋은 이와 같이 딕셔너리 형태의 값을 반환합니다.
딕셔너리 형태이므로 load_iris() 데이터 셋의 key 값을 확인해 보겠습니다.
keys = iris_data.keys()
print('붓꽃 데이터 셋의 키들 :',keys)
붓꽃 데이터 셋의 키들 : dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names', 'filename'])
5. loda_iris() 가 반환하는 객체의 키 출력
print('\n feature_names 의 type:',type(iris_data.feature_names))
print(' feature_names 의 shape:',len(iris_data.feature_names))
print(iris_data.feature_names)
print('\n target_names 의 type:',type(iris_data.target_names))
print(' feature_names 의 shape:',len(iris_data.target_names))
print(iris_data.target_names)
print('\n data 의 type:',type(iris_data.data))
print(' data 의 shape:',iris_data.data.shape)
print(iris_data['data'])
print('\n target 의 type:',type(iris_data.target))
print(' target 의 shape:',iris_data.target.shape)
print(iris_data.target)
feature_names 의 type: <class 'list'>
feature_names 의 shape: 4
['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
target_names 의 type: <class 'numpy.ndarray'>
feature_names 의 shape: 3
['setosa' 'versicolor' 'virginica']
data 의 type: <class 'numpy.ndarray'>
data 의 shape: (150, 4)
[[5.1 3.5 1.4 0.2]
[4.9 3. 1.4 0.2]
[4.7 3.2 1.3 0.2]
[4.6 3.1 1.5 0.2]
[5. 3.6 1.4 0.2]
[5.4 3.9 1.7 0.4]
[4.6 3.4 1.4 0.3]
[5. 3.4 1.5 0.2]
[4.4 2.9 1.4 0.2]
[4.9 3.1 1.5 0.1]
[5.4 3.7 1.5 0.2]
[4.8 3.4 1.6 0.2]
[4.8 3. 1.4 0.1]
[4.3 3. 1.1 0.1]
[5.8 4. 1.2 0.2]
[5.7 4.4 1.5 0.4]
[5.4 3.9 1.3 0.4]
[5.1 3.5 1.4 0.3]
[5.7 3.8 1.7 0.3]
[5.1 3.8 1.5 0.3]
[5.4 3.4 1.7 0.2]
[5.1 3.7 1.5 0.4]
[4.6 3.6 1. 0.2]
[5.1 3.3 1.7 0.5]
[4.8 3.4 1.9 0.2]
[5. 3. 1.6 0.2]
[5. 3.4 1.6 0.4]
[5.2 3.5 1.5 0.2]
[5.2 3.4 1.4 0.2]
[4.7 3.2 1.6 0.2]
[4.8 3.1 1.6 0.2]
[5.4 3.4 1.5 0.4]
[5.2 4.1 1.5 0.1]
[5.5 4.2 1.4 0.2]
[4.9 3.1 1.5 0.2]
[5. 3.2 1.2 0.2]
[5.5 3.5 1.3 0.2]
[4.9 3.6 1.4 0.1]
[4.4 3. 1.3 0.2]
[5.1 3.4 1.5 0.2]
[5. 3.5 1.3 0.3]
[4.5 2.3 1.3 0.3]
[4.4 3.2 1.3 0.2]
[5. 3.5 1.6 0.6]
[5.1 3.8 1.9 0.4]
[4.8 3. 1.4 0.3]
[5.1 3.8 1.6 0.2]
[4.6 3.2 1.4 0.2]
[5.3 3.7 1.5 0.2]
[5. 3.3 1.4 0.2]
[7. 3.2 4.7 1.4]
[6.4 3.2 4.5 1.5]
[6.9 3.1 4.9 1.5]
[5.5 2.3 4. 1.3]
[6.5 2.8 4.6 1.5]
[5.7 2.8 4.5 1.3]
[6.3 3.3 4.7 1.6]
[4.9 2.4 3.3 1. ]
[6.6 2.9 4.6 1.3]
[5.2 2.7 3.9 1.4]
[5. 2. 3.5 1. ]
[5.9 3. 4.2 1.5]
[6. 2.2 4. 1. ]
[6.1 2.9 4.7 1.4]
[5.6 2.9 3.6 1.3]
[6.7 3.1 4.4 1.4]
[5.6 3. 4.5 1.5]
[5.8 2.7 4.1 1. ]
[6.2 2.2 4.5 1.5]
[5.6 2.5 3.9 1.1]
[5.9 3.2 4.8 1.8]
[6.1 2.8 4. 1.3]
[6.3 2.5 4.9 1.5]
[6.1 2.8 4.7 1.2]
[6.4 2.9 4.3 1.3]
[6.6 3. 4.4 1.4]
[6.8 2.8 4.8 1.4]
[6.7 3. 5. 1.7]
[6. 2.9 4.5 1.5]
[5.7 2.6 3.5 1. ]
[5.5 2.4 3.8 1.1]
[5.5 2.4 3.7 1. ]
[5.8 2.7 3.9 1.2]
[6. 2.7 5.1 1.6]
[5.4 3. 4.5 1.5]
[6. 3.4 4.5 1.6]
[6.7 3.1 4.7 1.5]
[6.3 2.3 4.4 1.3]
[5.6 3. 4.1 1.3]
[5.5 2.5 4. 1.3]
[5.5 2.6 4.4 1.2]
[6.1 3. 4.6 1.4]
[5.8 2.6 4. 1.2]
[5. 2.3 3.3 1. ]
[5.6 2.7 4.2 1.3]
[5.7 3. 4.2 1.2]
[5.7 2.9 4.2 1.3]
[6.2 2.9 4.3 1.3]
[5.1 2.5 3. 1.1]
[5.7 2.8 4.1 1.3]
[6.3 3.3 6. 2.5]
[5.8 2.7 5.1 1.9]
[7.1 3. 5.9 2.1]
[6.3 2.9 5.6 1.8]
[6.5 3. 5.8 2.2]
[7.6 3. 6.6 2.1]
[4.9 2.5 4.5 1.7]
[7.3 2.9 6.3 1.8]
[6.7 2.5 5.8 1.8]
[7.2 3.6 6.1 2.5]
[6.5 3.2 5.1 2. ]
[6.4 2.7 5.3 1.9]
[6.8 3. 5.5 2.1]
[5.7 2.5 5. 2. ]
[5.8 2.8 5.1 2.4]
[6.4 3.2 5.3 2.3]
[6.5 3. 5.5 1.8]
[7.7 3.8 6.7 2.2]
[7.7 2.6 6.9 2.3]
[6. 2.2 5. 1.5]
[6.9 3.2 5.7 2.3]
[5.6 2.8 4.9 2. ]
[7.7 2.8 6.7 2. ]
[6.3 2.7 4.9 1.8]
[6.7 3.3 5.7 2.1]
[7.2 3.2 6. 1.8]
[6.2 2.8 4.8 1.8]
[6.1 3. 4.9 1.8]
[6.4 2.8 5.6 2.1]
[7.2 3. 5.8 1.6]
[7.4 2.8 6.1 1.9]
[7.9 3.8 6.4 2. ]
[6.4 2.8 5.6 2.2]
[6.3 2.8 5.1 1.5]
[6.1 2.6 5.6 1.4]
[7.7 3. 6.1 2.3]
[6.3 3.4 5.6 2.4]
[6.4 3.1 5.5 1.8]
[6. 3. 4.8 1.8]
[6.9 3.1 5.4 2.1]
[6.7 3.1 5.6 2.4]
[6.9 3.1 5.1 2.3]
[5.8 2.7 5.1 1.9]
[6.8 3.2 5.9 2.3]
[6.7 3.3 5.7 2.5]
[6.7 3. 5.2 2.3]
[6.3 2.5 5. 1.9]
[6.5 3. 5.2 2. ]
[6.2 3.4 5.4 2.3]
[5.9 3. 5.1 1.8]]
target 의 type: <class 'numpy.ndarray'>
target 의 shape: (150,)
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2]
'머신러닝' 카테고리의 다른 글
numpy, pandas 기초 (0) | 2020.08.20 |
---|---|
타이타닉 생존자 예측 -사이킷런 (0) | 2020.08.19 |
데이터 전처리 (0) | 2020.08.19 |
사이킷런의 Model Selection 모듈 (0) | 2020.08.19 |
사이킷런을 이용한 머신러닝 (0) | 2020.08.19 |