빅데이터분석기사

[빅분기 실기] 데이터마님 - Scikit-learn 패키지

프로그린 2024. 6. 17. 21:44

모듈리스트

sklearn
│
├── 01 preprocessing (전처리)
│   │
│   ├── 스케일러
│   │   ├── MinMaxScaler
│   │   ├── RobustScaler
│   │   └── StandardScaler
│   │
│   └── 인코더
│       ├── LabelEncoder
│       └── OneHotEncoder
│  
├── 02 model_selection (모델링 전처리)
│   │
│   ├── 데이터셋 분리
│   │   ├── KFold
│   │   ├── StratifiedKFold
│   │   └── train_test_split
│   │
│   └── 하이퍼파라미터 튜닝
│       └── GridSearchCV
│
├── 03 모델학습
│   │
│   ├── ensemble
│   │   ├── AdaBoostClassifier
│   │   ├── GradientBoostingClassifier
│   │   ├── RandomForestClassifier
│   │   └── RandomForestRegressor
│   │
│   ├── linear_model
│   │   ├── LogisticRegression
│   │   └── RidgeClassifier
│   │
│   ├── neighbors
│   │   └── KNeighborsClassifier
│   │
│   ├── svm
│   │   ├── SVC
│   │   └── SVR
│   │
│   └── tree
│       ├── DecisionTreeClassifier
│       ├── DecisionTreeRegressor
│       ├── ExtraTreeClassifier
│       └── ExtraTreeRegressor
│
├── 04 모델평가
│   │
│   ├── metrics
│   │   ├── accuracy_score
│   │   ├── classification_report
│   │   ├── confusion_matrix
│   │   ├── f1_score
│   │   ├── log_loss
│   │   ├── mean_absolute_error
│   │   ├── mean_squared_error
│   │   └── roc_auc_score
│   │
│   └── model (정의된 모델에서 추출)
│       ├── predict
│       └── predict_proba
│
└── 05 최종앙상블
    │
    └── ensemble
        ├── StackingClassifier
        ├── StackingRegressor
        ├── VotingClassifier
        └── VotingRegressor

 

01 데이터 전처리

MinMaxScaler

# 데이터 로드
import pandas as pd
train = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/airline/x_train.csv')
test = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/airline/x_test.csv')
display(train.head(5))
[output]

 

1. train 데이터의 Flight Distance 컬럼을 사이킷런 모듈을 이용하여 최솟값을 0 최댓값을 1값로 하는 데이터로 변환하고 scaling을 이름으로 하는 컬럼으로 데이터프레임에 추가하라.

from sklearn.preprocessing import MinMaxScaler

mm = MinMaxScaler()
train['scaling'] = mm.fit_transform(train['Flight Distance'].values.reshape(-1, 1))

# 시각화
import matplotlib.pyplot as plt
fig , ax = plt.subplots(1, 2)
ax[0].boxplot(train['Flight Distance'])
ax[0].set_xticklabels(['Raw'])
ax[1].boxplot(train['scaling'])
ax[1].set_xticklabels(['Scaling data'])
plt.show()
[output]

 

2. train 데이터의 Flight Distance 컬럼을 pandas의 내장함수만을 이용하여 최솟값을 0 최댓값을 1값로 하는 데이터로 변환하고 scaling을 이름으로 하는 컬럼으로 데이터프레임에 추가하라.

nom = train['Flight Distance'] - train['Flight Distance'].min()
denom = train['Flight Distance'].max() - train['Flight Distance'].min()
train['scaling'] = nom / denom


# 시각화
import matplotlib.pyplot as plt
fig , ax = plt.subplots(1, 2)
ax[0].boxplot(train['Flight Distance'])
ax[0].set_xticklabels(['Raw'])
ax[1].boxplot(train['scaling'])
ax[1].set_xticklabels(['Scaling data'])
plt.show()
[output]

 

3. train 데이터의 Age컬럼을 MinMax 스케일링 진행 하고 age_scaling컬럼에 추가하고 train셋과 같은 기준으로 test데이터의 Age를 스케일링하여 age_scaling에 추가하라.

from sklearn.preprocessing import MinMaxScaler

mm = MinMaxScaler()
mm.fit(train['Age'].values.reshape(-1,1))

train['age_scaling'] = mm.transform(train['Age'].values.reshape(-1, 1))
test['age_scaling'] = mm.transform(test['Age'].values.reshape(-1, 1))

display(test[['ID', 'age_scaling']].head(5))
[output]

 

StandardScaler

4. train 데이터의 Age컬럼을 pandas 기본 내장 모듈을 이용하여 정규화 스케일링을 진행 하고 age_scaling컬럼에 추가하라.

train['scaling'] = (train['Age'] - train['Age'].mean())/(train['Age'].std())

# 시각화
import matplotlib.pyplot as plt
fig , ax = plt.subplots(1, 2)
ax[0].boxplot(train['Age'])
ax[0].set_xticklabels(['Raw'])
ax[1].boxplot(train['scaling'])
ax[1].set_xticklabels(['Scaling data'])
plt.show()
[output]

 

5. train 데이터의 Age컬럼을 sklearn 모듈을 이용하여 정규화 스케일링을 진행 하고 age_scaling컬럼에 추가하고 train셋과 같은 기준으로 test데이터의 Age를 스케일링하여 age_scaling에 추가하라.

from sklearn.preprocessing import StandardScaler

sc = StandardScaler()
sc.fit(train['Age'].values.reshape(-1, 1))

train['age_scaling'] = sc.transform(train['Age'].values.reshape(-1, 1))
test['age_scaling'] = sc.transform(test['Age'].values.reshape(-1, 1))

display(test[['ID','age_scaling']].head(5))

# 시각화
import matplotlib.pyplot as plt
fig , ax = plt.subplots(1, 2)
ax[0].boxplot(train['Age'])
ax[0].set_xticklabels(['Raw'])
ax[1].boxplot(train['age_scaling'])
ax[1].set_xticklabels(['age_scaling'])
plt.show()
[output]

 

02 모델링 전처리

train_test_split

# 데이터 로드
import pandas as pd
x = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/drug/x_train.csv')
y = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/drug/y_train.csv')[['Drug']]
display(x.head(5))
display(y.head(5))
[output]

 

6. x,y데이터에서 train,test세트를 구분하고 train셋의 y값과 test셋의 y값의 unique한 value 값의 숫자를 출력하라. train:test는 7:3비율 , random_state =42로 고정

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3, random_state = 42)

t = pd.concat([y_train.value_counts(), y_test.value_counts()], axis = 1).rename(columns = {0:'train', 1:'test'}).reset_index()
display(t)
[output]

 

7. x,y데이터에서 train,test세트를 구분하고 train셋의 y값과 test셋의 y값의 unique한 value 값의 비율을 동일하게 추출하라. 7:3비율 , random_state =42로 고정

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3,random_state = 42, stratify = y)

t = pd.concat([y_train.value_counts(), y_test.value_counts()], axis = 1).rename(columns = {0:'train', 1:'test'}).reset_index()
display(t)
[output]

 

03 모델링

모델링의 기본 골격

  1. model import
  2. model 선언, 초기 하이퍼 파라미터 지정
  3. model.fit(x_train,y_train)을 통한 모델 학습
  4. 회귀, 분류 문제 모두 model.predict(x_validation) 을 통한 예측
  5. auc값을 구해야하는 경우 model.predict_proba(x_validation)을 통한 확률 추출 (svm모델의 경우 학습시 probability=True옵션 추가)
  6. 원하는 metric으로 모델 평가 eg) accuracy_score(y_validation, model.predict(x_validation))

sklearn 학습 모듈 모음

분류문제의 경우 -Classifier , 회귀문제의 경우 -Regressor 형식

#ensemble
from sklearn.ensemble import AdaBoostClassifier
from sklearn.ensemble import AdaBoostRegressor
from sklearn.ensemble import BaggingClassifier
from sklearn.ensemble import BaggingRegressor
from sklearn.ensemble import ExtraTreesClassifier
from sklearn.ensemble import ExtraTreesRegressor
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import RandomForestRegressor



#linear_model
from sklearn.linear_model import BayesianRidge
from sklearn.linear_model import ElasticNet
from sklearn.linear_model import GammaRegressor
from sklearn.linear_model import HuberRegressor
from sklearn.linear_model import Lasso
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import LogisticRegression    # 분류
from sklearn.linear_model import Ridge
from sklearn.linear_model import SGDRegressor
from sklearn.linear_model import SGDClassifier # 분류


#neighbors
from sklearn.neighbors import KNeighborsClassifier
from sklearn.neighbors import KNeighborsRegressor
from sklearn.neighbors import KNeighborsTransformer
from sklearn.neighbors import NearestNeighbors


#svm
from sklearn.svm import LinearSVC
from sklearn.svm import LinearSVR
from sklearn.svm import OneClassSVM
from sklearn.svm import SVR   # regression
from sklearn.svm import SVC   # classfier


#tree
from sklearn.tree import BaseDecisionTree
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import DecisionTreeRegressor
from sklearn.tree import ExtraTreeClassifier
from sklearn.tree import ExtraTreeRegressor

 

04 모델 평가

import sklearn.metrics
dir(sklearn.metrics)
[output]
['ConfusionMatrixDisplay',
'DetCurveDisplay',
'PrecisionRecallDisplay',
'RocCurveDisplay',
'SCORERS',
'__all__',
'__builtins__',
'__cached__',
'__doc__',
'__file__',
'__loader__',
'__name__',
'__package__',
'__path__',
'__spec__',
'_base',
'_classification',
'_pairwise_fast',
'_plot',
'_ranking',
'_regression',
'_scorer',
'accuracy_score',
'adjusted_mutual_info_score',
'adjusted_rand_score',
'auc',
'average_precision_score',
'balanced_accuracy_score',
'brier_score_loss',
'calinski_harabasz_score',
'check_scoring',
'classification_report',
'cluster',
'cohen_kappa_score',
'completeness_score',
'confusion_matrix',
'consensus_score',
'coverage_error',
'davies_bouldin_score',
'dcg_score',
'det_curve',
'euclidean_distances',
'explained_variance_score',
'f1_score',
'fbeta_score',
'fowlkes_mallows_score',
'get_scorer',
'hamming_loss',
'hinge_loss',
'homogeneity_completeness_v_measure',
'homogeneity_score',
'jaccard_score',
'label_ranking_average_precision_score',
'label_ranking_loss',
'log_loss',
'make_scorer',
'matthews_corrcoef',
'max_error',
'mean_absolute_error',
'mean_absolute_percentage_error',
'mean_gamma_deviance',
'mean_poisson_deviance',
'mean_squared_error',
'mean_squared_log_error',
'mean_tweedie_deviance',
'median_absolute_error',
'multilabel_confusion_matrix',
'mutual_info_score',
'nan_euclidean_distances',
'ndcg_score',
'normalized_mutual_info_score',
'pair_confusion_matrix',
'pairwise',
'pairwise_distances',
'pairwise_distances_argmin',
'pairwise_distances_argmin_min',
'pairwise_distances_chunked',
'pairwise_kernels',
'plot_confusion_matrix',
'plot_det_curve',
'plot_precision_recall_curve',
'plot_roc_curve',
'precision_recall_curve',
'precision_recall_fscore_support',
'precision_score',
'r2_score', 'rand_score', '
recall_score',
'roc_auc_score',
'roc_curve',
'silhouette_samples',
'silhouette_score',
'top_k_accuracy_score',
'v_measure_score',
'zero_one_loss']

 


출처 : https://www.datamanim.com/dataset/98_sklearn/sklearn.html#minmaxscaler