datasets.load_boston() |
회귀 |
datasets.load_breast_cancer() |
분류 |
datasets.load_diabetes() |
회규 |
datasets.load_digits() |
분류 |
datasets.load_iris() |
분류 |
- 데이터프레임에서 feature랑 target 값 나눠주기 + train_test_split 해주기
ftr_df = iris_df.iloc[:, :-1]
tgt_df = iris_df.iloc[:, -1]
X_train, X_test, y_train, y_test = train_test_split(ftr_df, tgt_df, test_size=0.3)
- stratified K-fold : 불균형한 분포도를 가진 레이블 데이터 집합을 위한 폴드 방식. 학습데이터와 검증데이터 세트가 가지는 레이블 분포도가 유사하도록 검증데이터 추출.
from sklearn.model_selection import KFold
from sklearn.model_selection import StratifiedKFold
dt_clf = DecisionTreeClassifier(random_state=156)
skfold = StratifiedKFold(n_splits=3)
n_iter=0
cv_accuracy=[]
# StratifiedKFold의 split( ) 호출시 반드시 레이블 데이터 셋도 추가 입력 필요
for train_index, test_index in skfold.split(features, target):
# split( )으로 반환된 인덱스를 이용하여 학습용, 검증용 테스트 데이터 추출
X_train, X_test = features[train_index], features[test_index]
y_train, y_test = label[train_index], label[test_index]
#학습 및 예측
dt_clf.fit(X_train , y_train)
pred = dt_clf.predict(X_test)
# 반복 시 마다 정확도 측정
n_iter += 1
accuracy = np.round(accuracy_score(y_test,pred), 4)
train_size = X_train.shape[0]
test_size = X_test.shape[0]
print('\n#{0} 교차 검증 정확도 :{1}, 학습 데이터 크기: {2}, 검증 데이터 크기: {3}'
.format(n_iter, accuracy, train_size, test_size))
cv_accuracy.append(accuracy)
# 교차 검증별 정확도 및 평균 정확도 계산
print('\n## 교차 검증별 정확도:', np.round(cv_accuracy, 4))
print('## 평균 검증 정확도:', np.mean(cv_accuracy))
- cross_val_score(estimate, X, y=None, scoring=None, cv=None, n_jobs=1, verbose=0, fit_params=None, pri_dispatch='2*n_jobs')
- estimator : 로지스틱, 결정트리, 랜덤트리 등
- scoring : accuracy, precision, recall, f-1 score 등
- cv : 몇 개의 폴드를 만들 것인지
- classifier나 regressor와 같은 알고리즘에 사용되는 하이퍼 파라미터를 순차적으로 입력해서 최적의 파라미터를 도출할 수 있음.
from sklearn.model_selection import cross_val_score
scores = cross_val_score(dt_clf , data , label , scoring='accuracy',cv=3)
print('교차 검증별 정확도:',np.round(scores, 4))
print('평균 검증 정확도:', np.round(np.mean(scores), 4))
- GridSearchCV : parameters는 반드시 딕셔너리 형태, refit은 최적의 파라미터 찾으면 그걸로 학습시켜 버리는 거.
from sklearn.model_selection import GridSearchCV, train_test_split
# 데이터를 로딩하고 학습데이타와 테스트 데이터 분리
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris_data.data, iris_data.target,
test_size=0.2, random_state=121)
dtree = DecisionTreeClassifier()
parameters = {'max_depth':[1, 2, 3], 'min_samples_split':[2,3]}
grid_dtree = GridSearchCV(dtree, param_grid=parameters, cv=3, refit=True, return_train_score=True)
grid_dtree.fit(X_train, y_train)
# GridSearchCV 결과는 cv_results_ 라는 딕셔너리로 저장됨. 이를 DataFrame으로 변환
scores_df = pd.DataFrame(grid_dtree.cv_results_)
print('GridSearchCV 최적 파라미터:', grid_dtree.best_params_)
print('GridSearchCV 최고 정확도: {0:.4f}'.format(grid_dtree.best_score_))
# refit=True로 설정된 GridSearchCV 객체가 fit()을 수행 시 학습이 완료된 Estimator를 내포하고 있으므로 predict()를 통해 예측도 가능.
pred = grid_dtree.predict(X_test)
print('테스트 데이터 세트 정확도: {0:.4f}'.format(accuracy_score(y_test,pred)))
# GridSearchCV의 refit으로 이미 학습이 된 estimator 반환
estimator = grid_dtree.best_estimator_
"""
DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=3,
max_features=None, max_leaf_nodes=None,
min_impurity_decrease=0.0, min_impurity_split=None,
min_samples_leaf=1, min_samples_split=2,
min_weight_fraction_leaf=0.0, presort=False,
random_state=None, splitter='best')
"""
# GridSearchCV의 best_estimator_는 이미 최적 하이퍼 파라미터로 학습이 됨
pred = estimator.predict(X_test)
print('테스트 데이터 세트 정확도: {0:.4f}'.format(accuracy_score(y_test,pred)))
- 표준화 : 피처 각각의 평균이 0, 분산이 1인 정규분포를 따르도록 변환 [20, 30, 40] -> [-1.22, 0, 1.22]
- 정규화 : 각각 다른 피처들의 크기를 통일하기 위해(단위를 통일하기 위해) [20, 30, 40] -> [0, 0.5, 1]
댓글