예측 프로세스
1. 데이터 셋 분리
(train data, test data로 분리)
↓
2. 모델 학습
(train data 기반 ML 알고리즘을 적용해 모델을 학습)
↓
3. 예측 수행
(학습된 ML 모델로 test data 예측)
↓
4. 평가
(예측된 test data의 결과와 실제 test data의 결과 비교 후 성능 평가)
Skitlearn
- Estimator
- fit() : 학습
- predict() : 예측
- Classifier (분류)
- DecisionTreeClassifier
- RandomForestClassifier
- GradientBoostingClassifier
- GaussianNB
- SVC
- Regressor (회귀)
- LinearRegression
- Ridge
- Lasso
- RandomForestRegressor
- GradientBoostingRegressor
1. 데이터 셋
from sklearn.datasets import load_iris
iris_data = load_iris()
keys = iris_data.keys()
print('붓꽃 데이터 세트의 키들:', keys)
>>
붓꽃 데이터 세트의 키들: dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names', 'filename'])
키는 보통 data, target, target_names, feature_names, DESCR로 구성돼 있습니다. 개별 키가 가리키는 의미는 다음과 같습니다.
- data는 피처의 데이터 세트를 가리킵니다.
- target은 분류 시 레이블 값, 회귀일 때는 숫자 결과값 데이터 세트입니다.
- target_names는 개별 레이블의 이름을 나타냅니다.
- feature_names는 피처의 이름을 나타냅니다.
- DESCR은 데이터 세트에 대한 설명과 각 피처의 설명을 나타냅니다.
2. train_test_split() : train data, test data 분리
test_size : 전체 데이터에서 테스트 데이터 세트 크기를 얼마로 샘플링할 것인가? (디폴트는 0.25)
train_size : 전체 데이터에서 학습용 데이터 세트 크기를 얼마로 샘플링할 것인가? (잘 사용 하지 않음, test_size 이용하기 떄문에)
shuffle : 데이터를 분리하기 전에 섞을지 말지 결정한다. 데이터 분산시켜서 효율적인 학습이 되게 하기 위해서.(디폴트는 True)
random_state : 동일한 학습/테스트용 데이터 세트를 생성하기 위한 난수 값.
train_test_split()은 호출 시 무작위로 데이터를 분리하므로 random_state를 지정하지 않으면 수행할 때마다 다른 train/test 데이터를 생성한다.
2.1. ndarray(넘파이) 데이터 셋 분리
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
dt_clf = DecisionTreeClassifier( )
iris_data = load_iris()
# 1. 분리
X_train, X_test,y_train, y_test= train_test_split(iris_data.data, iris_data.target,
test_size=0.3, random_state=121)
# 2. 학습
dt_clf.fit(X_train, y_train)
# 3. 예측
pred = dt_clf.predict(X_test)
# 4. 평가
print('예측 정확도: {0:.4f}'.format(accuracy_score(y_test,pred)))
2.2. DataFrame(판다스) 데이터 셋 분리
import pandas as pd
iris_df = pd.DataFrame(iris_data.data, columns=iris_data.feature_names)
iris_df['target']=iris_data.target
iris_df.head()
ftr_df = iris_df.iloc[:, :-1] # 피쳐 데이터 추출 [:(전체행),:-1(맨오른쪽하나 빼고)]
tgt_df = iris_df.iloc[:, -1] # 타겟 데이터 추출 [:, -1(맨오른쪽만)]
# 1. 분리
X_train, X_test, y_train, y_test = train_test_split(ftr_df, tgt_df,
test_size=0.3, random_state=121)
# 2. 학습
dt_clf = DecisionTreeClassifier( )
dt_clf.fit(X_train, y_train)
# 3. 예측
pred = dt_clf.predict(X_test)
# 4. 평가
print('예측 정확도: {0:.4f}'.format(accuracy_score(y_test,pred)))
'💡 AI > ML' 카테고리의 다른 글
ML - 레이블 인코딩, 원핫 인코딩 (0) | 2021.09.15 |
---|---|
ML - 교차 검증 (0) | 2021.08.26 |
ML - pandas 기본 (0) | 2021.08.24 |
ML - 머신러닝과 numpy 기본 (0) | 2021.08.23 |
기계학습기초2 정리 (0) | 2021.06.16 |