ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • KT AIVLE School DX트랙 7주차-딥러닝
    KT_Aivle_School/Python 2024. 4. 19. 23:40

    1.회귀 (Regression)

    회귀 모델은 연속적인 값을 예측하는데 사용되며, 예를 들어 주택 가격이나 온도 같은 값을 예측할 때 사용됩니다.

    from keras.models import Sequential
    from keras.layers import Dense
    import pandas as pd
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    
    # 데이터 로드
    data = pd.read_csv('boston.csv')
    X = data.drop('target', axis=1)
    y = data['target']
    
    # 데이터 분할
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
    
    # 데이터 정규화
    scaler = StandardScaler()
    X_train_scaled = scaler.fit_transform(X_train)
    X_test_scaled = scaler.transform(X_test)
    
    # 모델 구성
    model = Sequential()
    model.add(Dense(64, activation='relu', input_shape=(X_train.shape[1],)))
    model.add(Dense(32, activation='relu'))
    model.add(Dense(1)) # 회귀이므로 마지막 레이어는 활성화 함수 없이 하나의 뉴런만 사용
    
    # 모델 컴파일
    model.compile(optimizer='adam', loss='mse')
    
    # 모델 훈련
    model.fit(X_train_scaled, y_train, epochs=100, validation_split=0.2)

    2.이진 분류 (Binary Classification)

    이진 분류는 두 가지 범주 중 하나를 예측하는 경우에 사용됩니다.

    from keras.models import Sequential
    from keras.layers import Dense
    import pandas as pd
    from sklearn.model_selection import train_test_split
    
    # 데이터 로드 및 전처리
    # 여기서는 boston.csv를 사용하지만, 실제 이진 분류에 적합한 데이터로 대체해야 함
    data = pd.read_csv('boston.csv')
    X = data.drop('target', axis=1)
    y = data['target']
    y = (y > y.median()).astype(int)  # 중간값을 기준으로 0과 1로 분류
    
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
    
    # 모델 구성
    model = Sequential()
    model.add(Dense(64, activation='relu', input_shape=(X_train.shape[1],)))
    model.add(Dense(32, activation='relu'))
    model.add(Dense(1, activation='sigmoid')) # 이진 분류에서는 sigmoid 사용
    
    # 모델 컴파일
    model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
    
    # 모델 훈련
    model.fit(X_train, y_train, epochs=100, validation_split=0.2)

    3.다중 분류

    다중 분류는 여러 개의 범주 중 하나를 예측하는 모델입니다.

    from keras.models import Sequential
    from keras.layers import Dense
    from keras.utils import to_categorical
    import pandas as pd
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    
    # 데이터 로딩
    data = pd.read_csv('boston.csv')
    X = data.drop('target', axis=1)
    y = data['Survived']
    
    # 다중 분류를 위해 target을 범주형으로 변환
    y = to_categorical(y)
    
    # 데이터 분할
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
    
    # 데이터 정규화
    scaler = StandardScaler()
    X_train_scaled = scaler.fit_transform(X_train)
    X_test_scaled = scaler.transform(X_test)
    
    # 모델 구성
    model = Sequential()
    model.add(Dense(64, activation='relu', input_shape=(X_train.shape[1],)))
    model.add(Dense(32, activation='relu'))
    # 출력층의 뉴런 수는 타겟 클래스의 수와 같아야 하며, 활성화 함수는 softmax를 사용
    model.add(Dense(y.shape[1], activation='softmax'))
    
    # 모델 컴파일
    model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
    
    # 모델 학습
    model.fit(X_train_scaled, y_train, epochs=100, validation_split=0.2)

    4.MNIST

    MNIST 데이터셋은 손글씨 숫자(0~9) 이미지를 분류하는 데 사용됩니다. 아래 코드는 MNIST 데이터셋을 사용한 기본적인 다중 분류 모델입니다.

    from keras.datasets import mnist
    from keras.models import Sequential
    from keras.layers import Dense, Flatten
    from keras.utils import to_categorical
    
    # 데이터 로딩
    (train_images, train_labels), (test_images, test_labels) = mnist.load_data()
    
    # 데이터 전처리
    train_images = train_images.reshape((60000, 28 * 28)).astype('float32') / 255
    test_images = test_images.reshape((10000, 28 * 28)).astype('float32') / 255
    train_labels = to_categorical(train_labels)
    test_labels = to_categorical(test_labels)
    
    # 모델 구성
    model = Sequential()
    model.add(Flatten(input_shape=(28 * 28,)))
    model.add(Dense(512, activation='relu'))
    model.add(Dense(10, activation='softmax'))
    
    # 모델 컴파일
    model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
    
    # 모델 학습
    model.fit(train_images, train_labels, epochs=5, batch_size=128)

    5.CNN (Convolutional Neural Networks)

    CNN은 이미지 분류에 주로 사용되는 심층 학습 모델입니다.

    from keras.models import Sequential
    from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
    from keras.datasets import mnist
    from keras.utils import to_categorical
    
    # 데이터 로딩 및 전처리
    (train_images, train_labels), (test_images, test_labels) = mnist.load_data()
    train_images = train_images.reshape((60000, 28, 28, 1)).astype('float32') / 255
    test_images = test_images.reshape((10000, 28, 28, 1)).astype('float32') / 255
    train_labels = to_categorical(train_labels)
    test_labels = to_categorical(test_labels)
    
    # 모델 구성
    model = Sequential()
    model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
    model.add(MaxPooling2D((2, 2)))
    model.add(Conv2D(64, (3, 3), activation='relu'))
    model.add(MaxPooling2 
Designed by Tistory.