알츠하이머 이미지 예측
데이터 : https://www.kaggle.com/datasets/sachinkumar413/alzheimer-mri-dataset
Alzheimer MRI Preprocessed Dataset
Preprocessed Alzheimer Disease MRI (Magnetic Resonance Imaging)
www.kaggle.com
from tensorflow.keras.callbacks import ModelCheckpoint,EarlyStopping
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.utils import to_categorical
import numpy as np
import os
from tensorflow.keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D
from PIL import Image
# image 데이터 위치 설정 (위치 확인)
data_src="/content/drive/MyDrive/Colab Notebooks/Dataset/"
# 'Mild_Demented', 'Moderate_Demented', 'Non_Demented', 'Very_Mild_Demented' 별 데이터 추출
data=[]
y=[]
for d in os.listdir(data_src):
for file in os.listdir(data_src+d):
data.append(Image.open(data_src+d+'/'+file))
y.append(d)
# array로 변환한 img 데이터를 X에 할당
X=[]
for i in data:
X.append(np.array(i))
X = np.array(X)
X.shape
y_num=[]
for cat in y:
if cat=="Non_Demented":
y_num.append(0)
elif cat=="Very_Mild_Demented":
y_num.append(1)
elif cat=="Mild_Demented":
y_num.append(2)
else:
y_num.append(3)
y=to_categorical(y_num)
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3, random_state=22)
X_train = X_train.reshape(X_train.shape[0], 128, 128, 1).astype('float32') / 255
X_test = X_test.reshape(X_test.shape[0], 128, 128, 1).astype('float32') / 255
from tensorflow.keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D
# Dropout 레이어는 과적합을 방지하기 위해 사용됩니다.
# 특정 비율의 입력 뉴런을 무작위로 비활성화시켜 학습 중에 일종의 "드롭아웃" 효과를 만듬
# Flatten 레이어는 다차원 배열을 1차원 배열로 변환
# Conv2D 레이어는 2D 컨볼루션 연산을 수행합니다.
# 이미지에서 특징을 추출하기 위해 사용되며, 커널(필터)을 이미지 위를 슬라이딩하면서 연산을 수행
# MaxPooling2D 레이어는 최대 풀링 연산을 수행하여 이미지의 크기를 줄입니다.
# 이미지를 격자로 나눈 각 영역에서 최댓값을 선택하여 해당 영역의 중요한 특징을 유지하면서 이미지 크기를 감소
model = Sequential()
model.add(Conv2D(32, kernel_size=(3,3), input_shape=(128,128,1), activation='relu'))
model.add(Conv2D(64, (3,3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(4, activation='softmax'))
# 모델의 실행 옵션을 설정
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
# 모델 최적화를 위한 설정
early_stopping_callback = EarlyStopping(monitor='val_loss', patience = 5)
# 모델 실행
history = model.fit(X_train, y_train, validation_split=0.25, epochs=40, batch_size=128, verbose=1, callbacks=[early_stopping_callback])
성능평가
# X_test 데이터를 사용하여 예측
test_pred = model.predict(X_test)
# 예측 결과를 원-핫 인코딩에서 클래스 인덱스로 변환
test_pred = np.argmax(test_pred, axis=1)
# 원래 레이블 데이터의 클래스 인덱스로 변환
y_test = np.argmax(y_test, axis=1)
# 정확도 계산
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test, test_pred)
print(f'정확도: {accuracy:.2f}')

손글씨 이미지 예측
1. 데이터 불러오기
# 데이터 불러오기
from tensorflow.keras.datasets import mnist
(X_train,y_train), (X_test, y_test) = mnist.load_data()
X_train.shape

2. 데이터 형태 변경
# 데이터 형태 변경
X_train = X_train.reshape(X_train.shape[0], 28, 28).astype('float32') / 255
X_test = X_test.reshape(X_test.shape[0], 28, 28).astype('float32') / 255
X_train[0][7]


from tensorflow.keras.utils import to_categorical
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)

3. 모델 생성 및 실행
from tensorflow.keras.callbacks import ModelCheckpoint,EarlyStopping
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D
model = Sequential()
model.add(Conv2D(32, kernel_size=(3,3), input_shape=(28,28,1), activation='relu'))
model.add(Conv2D(64, (3,3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
# 모델의 실행 옵션을 설정
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
# 모델 최적화를 위한 설정
early_stopping_callback = EarlyStopping(monitor='val_loss', patience = 5)
# 모델 실행
history = model.fit(X_train, y_train, validation_split=0.25, epochs=40, batch_size=128, verbose=1, callbacks=[early_stopping_callback])
4. test데이터 예측후 성능평가
# X_test 데이터를 사용하여 예측
test_pred = model.predict(X_test)
# 예측 결과를 원-핫 인코딩에서 클래스 인덱스로 변환
test_pred = np.argmax(test_pred, axis=1)
# 원래 레이블 데이터의 클래스 인덱스로 변환
y_test = np.argmax(y_test, axis=1)
# 정확도 계산
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test, test_pred)
print(f'정확도: {accuracy:.2f}')

'데이터 분석 기초' 카테고리의 다른 글
| 딥러닝 실습 (lstm 시계열 분석) (0) | 2023.10.09 |
|---|---|
| 딥러닝, 머신러닝 실습( 회귀분석 ) (0) | 2023.10.08 |
| 시계열 분석 기초(arima, sarima) (0) | 2023.07.25 |
| 데이터 시각화(6.9) (0) | 2023.06.09 |
| 기술통계, 시각화(6.8) (0) | 2023.06.08 |