- 지도학습 (Supervised Learning)
- 분류 (Classification)
- 회귀 (Regression)
- 예측 (Forecasting)
- 비지도 학습 (Unsupervised Learning)
- 클러스터링
- 차원 축소
- 강화 학습 (Reinforcement Learning)
- Monte Carlo methods
- Q-Learning
- Policy Gradient methods
사진 출처 : http://https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html
사이킷런에서는 numpy의 ndarray, Pandas의 dataFrame, SciPy의 Sparse Matrix를 이용해 나타낼 수 있다.
대표적인 표현방식 2가지
import numpy as np import matplotlib.pyplot as plt r = np.random.RandomState(10) x = 10 * r.rand(100) y = 2 * x - 3 * r.rand(100) plt.scatter(x,y)
머신러닝 모델을 사용하기 위해 모델 객체를 생성해준다.
from sklearn.linear_model import LinearRegression model = LinearRegression()
여기서 그냥 fit() 메서드에 입력 데이터 x를 그대로 넣으면 에러가 발생한다.
x의 모양은 (100,)으로 1차원 벡터이기 때문이다. 행렬 형태의 입력데이터와 1차원 벡터 모양의 라벨을 넣어줘야 한다.
X = x.reshape(100,1) model.fit(X,y)
이제 새로운 데이터를 넣고 예측을 해보려 한다. np.linspace()를 이용해 생성한다.
x_new = np.linspace(-1, 11, 100) X_new = x_new.reshape(100,1) y_new = model.predict(X_new) plt.scatter(x, y, label='input data') plt.plot(X_new, y_new, color='red', label='regression line')
input :
from sklearn.datasets import load_wine data = load_wine() type(data)
output :
sklearn.utils.Bunch
여기서 Brunch는 파이썬의 딕셔너리와 유사한 형태의 데이터 타입니다.
input :
print(data.keys())
ouput :
dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names'])
보통 훈련 데이터와 테스트 데이터의 비율은 8:2 비율로 분할한다.
validation데이터가 있을경우 train, validation, test를 각각 6:2:2로 분할한다.
from sklearn.datasets import load_wine data = load_wine() print(data.data.shape) print(data.target.shape)
(178, 13) (178,)
전체 데이터 갯수는 178개이다 train과 test데이터를 8:2비율로 분할하면
train 142개 test 36개로 나뉜다.
X_train = data.data[:142] X_test = data.data[142:] y_train = data.target[:142] y_test = data.target[142:]
훈련 데이터와 테스트 데이터 분리가 끝났으므로, 다시 훈련과 예측을 진행 해보자.
from sklearn.ensemble import RandomForestClassifier model = RandomForestClassifier() model.fit(X_train, y_train) y_pred = model.predict(X_test)
정확도를 평가해보면,
from sklearn.metrics import accuracy_score print("정답률=", accuracy_score(y_test, y_pred))
output :
정답률= 0.9444444444444444
사이킷런 에서는 train 데이터와 test 데이터를 분리해주는 기능을 API로 제공한다.
from sklearn.model_selection import train_test_split result = train_test_split(X, y, test_size=0.2, random_state=42) print(result[0].shape) print(result[1].shape) print(result[2].shape) print(result[3].shape)
(142, 13) (36, 13) (142,) (36,)
0번째 원소부터 순서대로 train 데이터 특성행렬, test 데이터 특성행렬, train 데이터 타겟벡터, test 데이터 타겟벡터다. 보통 사용자들은 아래와 같이 언패킹해서 사용한다.
from sklearn.model_selection import train_test_split from sklearn.datasets import load_wine from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score
data = load_wine() X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2, random_state=11) model = RandomForestClassifier() model.fit(X_train, y_train) y_pred = model.predict(X_test) print("정답률=", accuracy_score(y_test, y_pred))