from sklearn.datasets import load_iris
iris = load_iris()
pd.Dataframe(iris.data, columns=iris.feature_names)
로 치환하여 사용과적합 문제 발생 해결을 위한 데이터 분리
Scikit Learn
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size=0.2, stratify=labels, random_state=13)
* stratify : 클래스별 분포를 맞추기 위한 옵션
Decision Tree 적용
tree = DeicisionTreeClassifier(max_depth = n, random_state=n)
tree.fit(X_train, y_train)
※ 한눈에 보기
from skelarn.preprocessiong import LabelEncoder
le = LabelEncoder()
le.fit(column)
le.transform(column)
le.fit_transform(column)
le.classes_
: 클래스 보기le.inverse_transform(column)
: 숫자를 문자로 다시 변환from sklearn.preprocessing import MinMacSclaer
mms = MinMaxScaler()
mms.fit(df)
mms.transform(df)
mms.fit_transform(df)
mms.data_min_
: 최소값 보기mms.data_max_
: 최대값 보기mms.data_range_
: 크기 보기mms.inverse_transform(df)
: 숫자를 문자로 다시 변환from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
ss.fit(df)
ss.transform(df)
ss.fit_transform(df)
ss.mean_
: 평균 보기ss.scale_
: 표준편차 보기ss.inverse_transform(df)
: 숫자를 문자로 다시 변환 from sklearn.preprocessing import RobustScaler
rs = RobustScaler()
rs.fit(df)
rs.transform(df)
rs.fit_transform(df)
ss.mean_
: 평균 보기ss.scale_
: 표준편차 보기ss.inverse_transform(df)
: 숫자를 문자로 다시 변환 Scikit Learn
설정
from sklearn.pipeline import Pipeline
estimators = [('scaler', : Scaler()), ('clf' : Classifier())]
pipe = Pipeline(estimators)
속성값 지정
pipe.set_params(step__max_depth = n)
pipe.set_params(step__random_satate=n)
학습
pipe.fit(X, y)
추론
pipe.predict(X, y)
* 그 외
pipe.steps
: 파이프 스텝확인
pipe[step1]
: 첫번째 파이프라인 스텝 확인
k-fold / stratified k-fold
개념
Scikit Learn 코드
from sklearn.model_selection import KFold
kfold = KFold(n_splits = 5)
cv_accuracy = []
for train_idx, text_idx in kfold.split(X):
X_train, X_test = X.iloc[train_idx], X.iloc[test_idx]
y_train, y_test = y.iloc[train_idx], y.iloc[test_idx]
tree.fit(X_train, y_train)
y_pred = tree.predict(X_test)
cv_accuracy.append(accuracy_score(y_test, y_pred)
np.mean(cv_accuracy)
from sklearn.model_selection import cross_val_score
cross_val_score(tree, X, y, cv=skfold)
train_score와 같이볼 때
from sklearn.model_selection import cross_validate
cross_validate(tree, X, y, cv=skfold, return_train_score = True)
from sklearn.model_selection import GridSearchCV
params = {parameter : []}
gridsearch = GridSearchCV(tree, param_grid = params, cv= 5)
gridsearch.fit(X, y)
gridsearch.cv_results_
gridsearch.best_estimator_
: 최고 성능의 모델gridsearch.best_score
: 최고 성능 값gridsearch.best_params_
: 최고 성능 파라미터params = [{step__parameter : []}]
gridsearch = GridSearchCV(pipe ,param_grid
이진 분류 모델의 평가 요소
모델 평가의 종류
threshold
F1 - Score
ROC 곡선과 AUC
FPR(False Positive Rate/Fall out) 이 변할 때, TPR(True Positive Rate/Recall)의 변화를 그린 그림
직선에 가까울 수록 모델 성능이 떨어짐
AUC
ROC 커브 그리기
from sklearn.metrics import roc_curve
fpr, tpr, thresholds = roc_curve(y_test, y_pred_proba)
plt.plot(fpr, tpr)
모델 평가 보기
from sklearn.metrics import classification_report
print(classification_report(y_test, model.predict(X_test))
from sklearn.metrics import confusion_matrix
print(confusion_matrix(y_test, model.predict(X_test))
Threshold 조정하기
from sklearn.preprocessing import Binarizer
binarizer = Binarizer(threshold = n).fit(pred_proba)
pred_bin = binarizer.transform(pred_proba)
np.percentile(x, 25)
np.median(x)
np.median(x, 75)