ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Colab을 활용해서 정형데이터 딥러닝으로 예측모델 만들기
    딥러닝/Colab을 활용한 정형데이터 & 딥러닝 2023. 4. 13. 14:53
    Colab에 접속하여 Google drive mount 한다.

    파일 -> 새노트 

     

    하기의 구글드라이브 마운트 버튼을 클릭하여 구글드라이브 마운팅한다.

     

    sample_data 폴더 상위에 drive가 하나 더 생성된것을 알 수 있다. 

    MyDrive는 이제 내 로컬 또는 클라우드의 구글드라이브의 위치이니 해당위치에 csv파일 등 필요한 데이터를 옮겨서 사용하면 된다.

    이때 딥러닝을 사용하고자 하니 GPU로 연산방법 변경이 필요하다.

    위와 같이 런타임 -> 런타임 유형 변경에서

    하드웨어 가속기 - GPU 변경 후 저장(클라우드에서 GPU를 사용하는것이므로 내컴퓨터 사양과는 무관하다)

     

    from google.colab import drive
    drive.mount('/content/drive/')
    # google drive mount하기 위함
    
    path  = '/content/drive/MyDrive/Colab Notebooks/004_jeon_bok/'
    
    # 위경로는 본인의 예시이고 사용자마다 경로를 별도로 해보고 지정해주어야함  '/004_jeon_bok/'는 임의로 설정된 경로임 
    
    
    train = pd.read_csv(path + 'train.csv')
    
    # 일반적으로 데이터 불러오고 최종적으로 전처리한 데이터를 X_train, y_train 나눈다.
    # y값이 Target 컬럼일 경우 
    
    X_train = train.drop("Target" , axis = 1)
    y_train = train["Target"] 
    
    test = pd.read_csv(path + "test.csv")
    X_test = test
    
    # 위코드는 전처리가 반영안된것이므로 전처리를 꼭 한 후에 마지막에 데이터를 분리하는것을 추천 
    # train , test는 동일한 전처리가 반영되어야함
    1) 회귀분석일 경우  : 딥러닝 구조를 간략히 선언하고 예측하는 결과를 도출한다.
    from tensorflow.keras.layers import *
    from tensorflow.keras.models import *
    from tensorflow.keras.optimizers import *
    from tensorflow.keras.callbacks import *
    
    
    ## 딥러닝 keras 모듈 추가 
    
    # 1) 회귀분석일 경우 하기와 같이 
    #
    #
    # input_dim 의 값은 feature 즉 X_train ,X_test 컬럼 갯수와 동일
    
    model = Sequential()
    model.add(Dense(16, input_dim=11, activation='elu'))
    model.add(Dense(32, activation='elu'))    
    model.add(Dense(64, activation='elu'))  
    model.add(Dropout(0.5))  
    model.add(Dense(32, activation='elu'))
    model.add(Dense(16, activation='elu'))
    model.add(Dense(1))
    
    
    model.compile(loss='mean_absolute_error',
                  optimizer='Nadam', 
                  metrics=['mae'])
                  
    model.fit(X_train, y_train, validation_split=0.3, epochs=500, batch_size=32, verbose=1)
    pred = model.predict(X_test).flatten()  
    
    # pred가 최종 예측 결과임
    2) 분류 분석 : Binary Classification(0,1 두개 비교)
    # 2) 분류 분석(binary classification)인 경우 
    # 
    # 
    # input_dim 의 값은 feature 즉 X_train ,X_test 컬럼 갯수와 동일
    
    model = Sequential()
    model.add(Dense(16, input_dim=11, activation='elu'))
    model.add(Dense(32, activation='elu'))    
    model.add(Dense(64, activation='elu'))  
    model.add(Dropout(0.5))  
    model.add(Dense(32, activation='elu'))
    model.add(Dense(16, activation='elu'))
    model.add(Dense(1,activation = 'sigmoid'))
    
    model.compile(loss='binary_crossentropy',
                  optimizer='Nadam', 
                  metrics=['accuracy'])
    model.fit(X_train, y_train, validation_split=0.3, epochs=500, batch_size=32, verbose=1)
    pred = model.predict(X_test).flatten()  
    
    # pred가 최종 예측 결과임
    3) 분류 분석 : Multi classification
    # 3) 분류 분석(multi classification)인 경우 
    # 
    # 
    # input_dim 의 값은 feature 즉 X_train ,X_test 컬럼 갯수와 동일
    
    model = Sequential()
    model.add(Dense(16, input_dim=11, activation='elu'))
    model.add(Dense(32, activation='elu'))    
    model.add(Dense(64, activation='elu'))  
    model.add(Dropout(0.5))  
    model.add(Dense(32, activation='elu'))
    model.add(Dense(16, activation='elu'))
    model.add(Dense(10,activation = 'softmax'))
    
    # 바로 위 숫자 갯수가 y값의 unique 갯수입니다. 10이면 10개로 분류 현재 10개인 값
    
    model.compile(loss='sparse_categorical_crossentropy',
                  optimizer='Nadam', 
                  metrics=['accuracy'])
                  
    model.fit(X_train, y_train, validation_split=0.3, epochs=500, batch_size=32, verbose=1)
    
    ## 오래걸리면 epochs는 100 이하로 조정
    
    pred = model.predict(X_test).flatten()
    
    # pred가 최종 결과임
    머신러닝 모델과 앙상블해서 사용하면 높은 scoring을 얻을 수 있다.
Designed by Tistory.