import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.ensemble import VotingClassifier
from xgboost import XGBClassifier
from lightgbm import LGBMClassifier
from catboost import CatBoostClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris, load_breast_cancer, load_wine, load_digits, fetch_covtype
from sklearn.preprocessing import MinMaxScaler,LabelEncoder, QuantileTransformer, PowerTransformer,MaxAbsScaler, StandardScaler, RobustScaler
from sklearn.metrics import accuracy_score
import pandas as pd
#1 데이터
d_wine = 'c:/AIA/AIA-study/_data/dacon_wine/'
d_train = pd.read_csv(d_wine + 'train.csv', index_col= 0)
single_class_label = d_train['quality'].nunique() == 1
if single_class_label:
d_train = d_train[d_train['quality'] != d_train['quality'].unique()[0]]
le = LabelEncoder()
d_train['type'] = le.fit_transform(d_train['type'])
x1 = d_train.drop(['quality'], axis=1)
y1 = d_train['quality']-3
d_diabete = 'c:/AIA/AIA-study/_data/dacon_diabetes/'
dia_train = pd.read_csv(d_diabete + 'train.csv',index_col=0)
x2=dia_train.drop(['Outcome'], axis=1)
y2=dia_train['Outcome']
data_list={'iris' : load_iris,
'cancer' : load_breast_cancer,
'wine' : load_wine,
'digits' : load_digits,
# 'covtype' : fetch_covtype,
'd_wine' : (x1, y1),
'ddiabete' : (x2, y2)
}
scaler_list = {'MinMax' : MinMaxScaler(),
'Max' : MaxAbsScaler(),
'Standard' : StandardScaler(),
'Robust' : RobustScaler(),
'QuantileTransformer' : QuantileTransformer(n_quantiles=10),
'PowerTransformer' : PowerTransformer(method='yeo-johnson')}
for d in data_list:
max_ACC = -1
max_scaler = None
if d == 'd_wine' or d == 'ddiabete':
x, y = data_list[d]
x_train, x_test, y_train, y_test = train_test_split(x, y, train_size = 0.7, shuffle = True, random_state = 1234)
elif d == 'iris' or d == 'cancer' or d == 'wine' or d == 'digits' :
x, y = data_list[d](return_X_y = True)
x_train, x_test, y_train, y_test = train_test_split(x, y, train_size = 0.7, shuffle = True, random_state = 1234)
for s in scaler_list:
scaler = scaler_list[s]
x_train = scaler.fit_transform(x_train)
x_test = scaler.transform(x_test)
model = RandomForestClassifier()
model.fit(x_train, y_train)
y_predict = model.predict(x_test)
acc = np.round(accuracy_score(y_test, y_predict),2)
if acc > max_ACC:
max_ACC = acc
max_scaler = s
print(f'데이터 : {d}, 스케일러 : {s}, 정확도 : {acc}')
print(f'데이터 : {d}, 가장 높은 결정 계수 : {max_ACC}, 가장 높은 결정 계수 스케일러 : {max_scaler}')
# 데이터 : iris, 스케일러 : MinMax, 정확도 : 0.96
# 데이터 : iris, 스케일러 : Max, 정확도 : 0.96
# 데이터 : iris, 스케일러 : Standard, 정확도 : 0.98
# 데이터 : iris, 스케일러 : Robust, 정확도 : 0.96
# 데이터 : iris, 스케일러 : QuantileTransformer, 정확도 : 0.96
# 데이터 : iris, 스케일러 : PowerTransformer, 정확도 : 0.96
# 데이터 : iris, 가장 높은 결정 계수 : 0.98, 가장 높은 결정 계수 스케일러 : Standard
# 데이터 : cancer, 스케일러 : MinMax, 정확도 : 0.92
# 데이터 : cancer, 스케일러 : Max, 정확도 : 0.92
# 데이터 : cancer, 스케일러 : Standard, 정확도 : 0.94
# 데이터 : cancer, 스케일러 : Robust, 정확도 : 0.92
# 데이터 : cancer, 스케일러 : QuantileTransformer, 정확도 : 0.94
# 데이터 : cancer, 스케일러 : PowerTransformer, 정확도 : 0.94
# 데이터 : cancer, 가장 높은 결정 계수 : 0.94, 가장 높은 결정 계수 스케일러 : Standard
# 데이터 : wine, 스케일러 : MinMax, 정확도 : 0.96
# 데이터 : wine, 스케일러 : Max, 정확도 : 0.96
# 데이터 : wine, 스케일러 : Standard, 정확도 : 0.96
# 데이터 : wine, 스케일러 : Robust, 정확도 : 0.96
# 데이터 : wine, 스케일러 : QuantileTransformer, 정확도 : 0.96
# 데이터 : wine, 스케일러 : PowerTransformer, 정확도 : 0.96
# 데이터 : wine, 가장 높은 결정 계수 : 0.96, 가장 높은 결정 계수 스케일러 : MinMax
# 데이터 : digits, 스케일러 : MinMax, 정확도 : 0.97
# 데이터 : digits, 스케일러 : Max, 정확도 : 0.97
# 데이터 : digits, 스케일러 : Standard, 정확도 : 0.97
# 데이터 : digits, 스케일러 : Robust, 정확도 : 0.97
# 데이터 : digits, 스케일러 : QuantileTransformer, 정확도 : 0.97
# 데이터 : digits, 스케일러 : PowerTransformer, 정확도 : 0.96
# 데이터 : digits, 가장 높은 결정 계수 : 0.97, 가장 높은 결정 계수 스케일러 : MinMax
# 데이터 : d_wine, 스케일러 : MinMax, 정확도 : 0.67
# 데이터 : d_wine, 스케일러 : Max, 정확도 : 0.65
# 데이터 : d_wine, 스케일러 : Standard, 정확도 : 0.66
# 데이터 : d_wine, 스케일러 : Robust, 정확도 : 0.66
# 데이터 : d_wine, 스케일러 : QuantileTransformer, 정확도 : 0.67
# 데이터 : d_wine, 스케일러 : PowerTransformer, 정확도 : 0.67
# 데이터 : d_wine, 가장 높은 결정 계수 : 0.67, 가장 높은 결정 계수 스케일러 : MinMax
# 데이터 : ddiabete, 스케일러 : MinMax, 정확도 : 0.79
# 데이터 : ddiabete, 스케일러 : Max, 정확도 : 0.76
# 데이터 : ddiabete, 스케일러 : Standard, 정확도 : 0.79
# 데이터 : ddiabete, 스케일러 : Robust, 정확도 : 0.79
# 데이터 : ddiabete, 스케일러 : QuantileTransformer, 정확도 : 0.79
# 데이터 : ddiabete, 스케일러 : PowerTransformer, 정확도 : 0.81
# 데이터 : ddiabete, 가장 높은 결정 계수 : 0.81, 가장 높은 결정 계수 스케일러 : PowerTransformer
m64_QuantileTransformer_회귀
m64_QuantileTransformer
m64_QuantileTransformer99_graph