Optuna×XGBoost에서 레드wine_quality
개시하다
XGBoost를 반을 나누는 것이 아니라 복귀에 쓰다.(말은 그렇지만 결과는 10가지 분류)
그래서 다양한 요소 중에서 레드와인을 골라내는 퀄리티의 모형을 만들었다.
결론적으로 정밀도는 그리 높지 않다.
운영 환경 및 라이브러리
이전 글 참조
이루어지다
이전 글 참조
이루어지다
*선형 회귀
* 로직 회귀
다 해봤는데.
또한 데이터 속성은 모두 사용한다.
프리 프로세싱
preprocess
def preprocess(df):
df[target_column] = df[target_column] /10
return df
논리 회귀를 사용하기 위해 Quality[0,10]를 [0,1]의 소수 처리로 한다.최대치로 나누려고 했는데 무한 소수에 도달했을 때 정밀도가 전혀 없어 10으로 나눴다.
원시 데이터는 이미 모두 수치이기 때문에 수치 변환을 하지 않는다.
모든 속성을 사용하여drop도 하지 않습니다.
XGBoost의 학습
train
def train(df,max_depth,learning_rate,num_round,how_objective):
train_x = df.drop(target_column,axis=1)
train_y = df[target_column]
dtrain = xgb.DMatrix(train_x,label=train_y)
param = { 'max_depth':max_depth,'learning_rate':learning_rate,'objective':how_objective,'silent':1}
bst = xgb.train(param,dtrain,num_round)
return bst
target_column은 목표 변수입니다optuna의 목적 함수 정의
objective
def objective(df, df_test, y, how_objective, trial):
#目的関数
max_depth = trial.suggest_int('max_depth',1,30)
learning_rate = trial.suggest_uniform('learning_rate',0.0,1.0)
round_num = trial.suggest_int('round_num',1,30)
bst = train(df,max_depth,learning_rate,round_num,how_objective)
answer = predict(bst,df_test).round().astype(int)
score = accuracy_score(answer,y.astype(int))
return 1.0 - score
max_depth, learning_rate, round_num를 조정하다.main 함수
main
def main():
global target_column
df_original = pd.read_csv("/Users/pc1013/Desktop/first/XGBoost_optuna/df/winequality-red.csv")
df = preprocess(df_original)
(df_train, df_test) = train_test_split(df, test_size = 0.1, random_state = 666)
y = df_test[target_column]*10
df_test = df_test.drop(target_column,axis=1)
how_objective = 'reg:logistic' #or 'reg:linear'
'''
学習と結果出力
必要があればoptunaの前処理とチューニング
'''
실행 결과
적당히 매개 변수를 만들다
#ハイパーパラメータ
max_depth = 6
learning_rate = 0.1
round_num = 10
위에서부터 linear와logistic
세 개의 매개 변수를 자동으로 조정하다
위에서부터 linear와logistic
완벽한 과장
여러 매개변수 자동 조정
위에서부터 linear와logistic
개진
데이터 사전 처리 수정
#ハイパーパラメータ
max_depth = 6
learning_rate = 0.1
round_num = 10
데이터 사전 처리 수정
optuna 변경
매개변수 범위
def preprocess(df):
df = df.drop(['citric acid','free sulfur dioxide','fixed acidity','alcohol'],axis=1)
df[target_column] = df[target_column] /10
return df
#ハイパーパラメータの範囲(objective関数内)
max_depth = trial.suggest_int('max_depth',1,25)
learning_rate = trial.suggest_uniform('learning_rate',0.0,1.0)
round_num = trial.suggest_int('round_num',1,30)
gamma = trial.suggest_uniform('gamma',0.0,10.0)
colsample_bytree = trial.suggest_uniform('colsample_bytree',0.0,1.0)
min_childe_weigh = trial.suggest_uniform('min_childe_weigh',0.0,10.0)
alpha = trial.suggest_uniform('alpha',0.0,10.0)
실행 결과 #2
위에서부터 linear와logistic
과도한 공부가 좋아졌어요...?(없음)
총결산
정밀도가 나오지 않다.
자동화라고는 하지만 과도한 학습을 막기 위해서는 초파라미터의 범위를 조정해야 한다.
Reference
이 문제에 관하여(Optuna×XGBoost에서 레드wine_quality), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kuroneko-hornet/items/65e4cc746991323fe1e8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
정밀도가 나오지 않다.
자동화라고는 하지만 과도한 학습을 막기 위해서는 초파라미터의 범위를 조정해야 한다.
Reference
이 문제에 관하여(Optuna×XGBoost에서 레드wine_quality), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kuroneko-hornet/items/65e4cc746991323fe1e8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)