-
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
'KT_Aivle_School > Python' 카테고리의 다른 글
KT AIVLE School DX트랙 빅 프로젝트 후기 (0) 2024.07.25 KT AIVLE School DX트랙 8주차-딥러닝(심화) (0) 2024.04.19 KT AIVLE School DX트랙 6주차-머신러닝(비지도) (0) 2024.04.19 KT AIVLE School DX트랙 5주차-머신러닝 (1) 2024.04.19 KT AIVLE School DX트랙 5주차-데이터 분석표현 (1) 2024.04.19