
머신 러닝의 알고리즘은 크게 3 종류로 나눌 수 있다.
지도학습,비지도학습,강화학습
라벨(정답)의 존재 유무에 따라 머신러닝을 지도학습과 비지도학습으로 나눠진다.
정답 유무, 데이터의 종류, 특성, 문제 정의에 따라 머신러닝 알고리즘은 복합적으로 사용
알고리즘은 상황에 따라 변경하거나 중복하여 사용할 수 있다.
분류(Classification) : 예측해야할 데이터가 범주형(categorical) 변수일때회귀(Regression) : 예측해야할 데이터가 연속적인 값 일때 예측(Forecasting) : 과거 및 현재 데이터를 기반으로 미래를 예측하는 과정
클러스터링 : 특정 기준에 따라 유사한 데이터끼리 그룹화함차원축소 : 고려해야할 변수를 줄이는 작업, 변수와 대상간 진정한 관계를 도출하기 용이
환경을 관찰해서 에이전트가 스스로 행동하게 한다.
모델은 그 결과로보상을 받고, 이 보상을 최대화 하도록 학습한다.
에이전트(Agent): 학습 주체 (혹은 actor, controller)
환경(Environment): 에이전트에게 주어진 환경, 상황, 조건
행동(Action): 환경으로부터 주어진 정보를 바탕으로 에이전트가 판단한 행동
보상(Reward): 행동에 대한 보상을 머신러닝 엔지니어가 설계
강화학습 알고리즘: Monte Carlo methods, Q-Learning, Policy Gradient methods
파이썬 기반 머신러닝 라이브러리.
Classification, Regression, Clustering, Dimensionality ReductionClassification용 알고리즘Regression용 알고리즘
# 사이킷런 설치
!pip install scikit-learn
#!conda install scikit-learn
# import
import sklearn
train_test_split : Scikit-Learn에서 훈련 데이터와 테스트 데이터를 나누는 기능을 제공하는 함수
transformer(): ETL(Extract Transform Load) 기능을 수행하는 함수
Estimator: 모델(Model)로 표현되는 클래스
(메소드 fit(), predict()가 있다)
Pipeline, meta-estimator: Estimator와 transformer() 2가지 기능을 수행하는 scikit-learn의 API
훈련과 예측이 끝나면 이 2가지 작업을 Pipeline으로 묶어 검증을 수행
데이터셋은 NumPy의 ndarray, Pandas의 DataFrame, SciPy의 Sparse Matrix를 이용해 나타낼 수 있다.
CoreAPI: fit(), transfomer(), predict() (훈련, 예측 등 머신 러닝 모델을 다룰 때 사용)
사이킷런에서는 데이터 표현 방식: 특성행렬(Feature Matrix), 타겟벡터(Target Vector)

주로 사용하는 API (출처: AIFFEL FUNDAMENTAL_SSAC2 11. 사이킷런으로 구현해보는 머신러닝)
입력 데이터를 의미
특성(feature): 데이터에서 수치 값, 이산 값, 불리언 값으로 표현되는 개별 관측치를 의미.
특성 행렬에서는 열에 해당하는 값
표본(sample): 입력 데이터, 특성 행렬의 행에 해당하는 값
n_samples: 행의 개수(표본의 개수)
n_features: 열의 개수(특성의 개수)
X: 통상 특성 행렬은 변수명 X로 표기
[n_samples, n_features]은 [행, 열]형태의 2차원 배열 구조를 사용
입력 데이터의 라벨(정답) 을 의미
표(Target): 라벨, 타겟값, 목표값이라고도 부르며 특성 행렬(Feature Matrix)로부터 예측하고자 하는 것
n_samples: 벡터의 길이(라벨의 개수)
타겟 벡터에서 n_features는 없다.
y: 통상 타겟 벡터는 변수명 y로 표기
타겟 벡터는 보통 1차원 벡터로 나타냄
이는 NumPy의 ndarray, Pandas의 Series를 사용하여 나타낼 수 있다.
타겟 벡터는 경우에 따라 1차원으로 나타내지 않을 수도 있다.
특성행렬 X의 n_samples와 타겟벡터 y의 n_samples는 동일해야 한다.

[출처: https://jakevdp.github.io/PythonDataScienceHandbook/06.00-figure-code.html#Features-and-Labels-Grid]
사이킷런 머신러닝 모델을 사용을 위해 모델 객체를 생성
LinearRegression: 회귀 모델
(Estimator 객체)
fit() : 훈련 메소드. 인자로 특성 행렬, 타겟 벡터를 받음
Reshape() 를 통해 ndarray 타입 입력값을 행렬록 변환하기
(나머지 숫자를 -1로 넣으면 자동으로 남은 숫자를 계산)
rand(): 0 이상 1 미만의 실수인 난수를 반환
linspace(start, stop, num): start를 배열의 시작값, stop을 배열의 끝값으로 하여 start와 stop 사이를 num개의 일정한 간격으로 1차원 배열로 반환
성능 평가 관련 모듈은 sklearn.metrics에 저장
회귀 모델의 경우 성능 평가에 RMSE(Root Mean Square Error)를 사용
RMSE가 낮을수록 정확도가 높다고 판단
mean_squared_error
# 행렬 변환
X = x.reshape(100,1)
## RMSE 구하기
from sklearn.metrics import mean_squared_error
RMSE = mean_squared_error(y, y_pred)**0.5
RandomForestClassifier: 분류 모델
(Estimator 객체)
sklearn.metrics로 성능 평가를 한다
(분류 문제는classification_report, accuracy_score 사용)
# 성능 평가를 위한 모듈 import
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
print(classification_report(라벨y, 예측값y))
# 정확도 확인
print("accuracy = ", accuracy_score(라벨y, 예측값y))
sklearn.datasets모듈: dataset loaders, dataset fetchers
(각각 Toy dataset, Real World dataset 제공)
sklearn.utils.Bunch
빌트인 (Built-in) 데이터셋의 자료구조.
key-value 형식으로 구성, 사전(dict)형 타입과 유사한 구조
keys() 메소드 사용 가능
. 을 사용해 키에 접근
DESCR(describe): 데이터에 대한 설명
Estimator 객체: 데이터셋을 기반으로 하여 머신러닝 모델의 파라미터를 추정
Estimator 객체 사용 시 비지도학습, 지도학습에 관계 없이 학습과 예측 가능
비지도 학습은 정답데이터가 없기 때문에 훈련 Target Vector가 인자(fit 메소드)로 들어가지 않음
훈련에 쓰이는 데이터와 예측에 쓰이는 데이터를 구분하여 사용하여야 한다.
일반적으로 train: test = 8:2 비율로 많이 설정한다고 한다.
# 훈련 데이터와 테스트 데이터 분리하기
X_train = data.data[:원하는 슬라이싱 기준치]
X_test = data.data[원하는 슬라이싱 기준치:]
print(X_train.shape, X_test.shape)
y_train = data.data[:원하는 슬라이싱 기준치]
y_test = data.data[원하는 슬라이싱 기준치:]
print(y_train.shape, y_test.shap
# 훈련하기
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier()
model.fit(X_train, y_train)
# 예측하기
y_pred = model.predict(X_test)
# train_test_split 사용을 위한 모듈 import
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=원하는 비율, random_state=seed번호)
Scikit-learn: Choosing the right estimator
np.random.RandomState(seed)를 이용해서 난수를 생성합시다.
Scikit-learn: Mean Squared Error