1. 데이터 불러오기¶
1) 라이브러리 임포트 및 설치¶
In [1]:
# scikit-learn
import sklearn
In [2]:
# pandas
import pandas as pd
In [3]:
# numpy
import numpy as np
In [5]:
# seaborn
!pip install seaborn
import seaborn as sns
In [6]:
# matplotlib
import matplotlib.pyplot as plt
2) 데이터 로드 및 저장¶
In [ ]:
# csv
df = pd.read_csv('data.csv')
In [ ]:
# json
df = pd.read_json('data.csv')
3) 데이터 구성 확인 및 다루기¶
In [ ]:
# 앞행 n개 확인
df.head(n)
In [ ]:
# 뒷행 n개 확인
df.tail(n)
In [ ]:
# 데이터 프레임 정보 확인
df.info()
In [ ]:
# 데이터 프레임 행, 열 개수 확인
df.shape
In [ ]:
# 통계 정보 확인
df.describe()
In [ ]:
# 데이터 프레임 열 이름 확인
df.columns
In [ ]:
# 범주별 빈도수 확인
## normalize = True: 정규화된 값으로 범주별 비율 확인
df['열 이름'].value_counts()
In [ ]:
# 데이터 프레임의 모든 값들을 넘파이 배열 형태로 확인
df.values
In [ ]:
# 데이터 프레임의 인덱스 확인
df.index
In [ ]:
# 각 열의 데이터 타입 확인
df.dtypes
In [ ]:
# 원하는 데이터 타입에 해당하는 열만 데이터 프레임 형태로 확인
df.select_dtypes(type='object')
In [ ]:
# 상관 분석
df.corr()
In [ ]:
# 데이터 합치기
df = pd.merge(df_a, df_b, on='합칠 때 사용할 열', how='inner')
4) 데이터 시각화¶
In [ ]:
import seaborn as sns
In [ ]:
# countplot
sns.countplot(x='열 이름')
In [ ]:
# jointplot
sns.jointplot(x='열 이름1', y='열 이름2', data=df)
2. 데이터 전처리¶
1) 결측치 및 데이터 처리¶
In [ ]:
# 결측치 확인
df.isna().sum()
In [ ]:
# 열 삭제
df.drop('열 이름',axis=1, inplace=True)
In [ ]:
# 결측값 대체
df['열 이름'].fillna('바꿀 값', inplace=True)
In [ ]:
# 결측치 특정 값으로 변경
## df.replace({'원래 값': '바꿀 값'}, inplace=True)
df.replace(np.NaN, '0')
In [ ]:
# 결측값 있는 행 삭제
df.dropna(how='any')
In [ ]:
# 열 타입 변환
df['열 이름'] = df['열 이름'].astype(type='float')
In [ ]:
# 그룹 집계
df.groupby(by=['그룹 기준 열'])['집계 대상 열'].mean()
2) 데이터 인코딩¶
In [ ]:
# 라벨 인코딩
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df['열 이름'] = le.fit_transform(df['열 이름'])
In [ ]:
# 원핫 인코딩
df = pd.get_dummies(data=df, columns='열 이름', drop_first=True)
In [ ]:
# 원핫 인코딩 - object 타입의 전체 컬럼 대상
obj_columns = df.select_dtypes(include='object').columns
df_preset = pd.get_dummies(df, columns=obj_columns, drop_first=True)
3) 데이터 분리¶
In [ ]:
# X, y 분리
target = 'target_column'
X = df.drop(target, axis=1)
y = df[target]
In [ ]:
# train, test 데이터셋 분리
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, stratify=y, random_state=42)
4) 데이터 스케일링¶
In [ ]:
# StandardScaler
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train) # 데이터 정규분포화
X_test = scaler.transform(X_test) # 데이터 표준
In [ ]:
# MinMaxScaler
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
3. 머신러닝¶
In [ ]:
# LogisticRegression - 분류
from sklearn.linear_model import LogisticRegression
lg = LogisticRgression()
lg.fit(X_train, y_train)
lg.score(X_test, y_test)
In [ ]:
# KNN - 분류/회귀
from sklearn.neighbors import KNeighborsClassifier # 분류
from sklearn.neighbors import KNeighborsRegressor # 회귀
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
knn.score(X_test, y_test)
In [ ]:
# DecisionTree - 분류/회귀
from sklearn.tree import DecisionTreeClassifier # 분류
from sklearn.tree import DecisionTreeRegressor # 회귀
dt = DecisionTreeClassifier(max_depth=5, random_state=42)
dt.fit(X_train, y_train)
dt.score(X_test, y_test)
In [ ]:
# RandomForest - 분류/회귀
from sklearn.ensemble import RandomForestClassifier # 분류
from sklearn.ensemble import RandomForestRegressor # 회
rf = RandomForestClassifier(n_estimators=3, random_state=42)
rf.fit(X_train, y_train)
rf.score(X_test, y_test)
In [ ]:
# XGBoost - 분류/회귀
!pip install xgboost
from xgboost import XGBClassifier # 분류
from xgboost import XGBRegressor # 회귀
xgb = XGBClassifier(n_estimators=3, random_state=42)
xgb.fit(X_train, y_train)
xgb.score(X_test, y_test)
In [ ]:
# LightGBM - 분류/회귀
!pip install lightgbm
from lightgbm import LGBMClassifier # 분류
from lightgbm import LGBMegressor # 회귀
lgbm = LGBMClassifier(n_estimators=3, random_state=42)
lgbm.fit(X_train, y_train)
lgbm.score(X_test, y_test)
4. 딥러닝¶
In [ ]:
import tensorflow as tf
from temsorflow import keras
In [ ]:
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout
# 1) 모델 생성
model = Sequential()
# 2) 모델 구조
model.add(Dense(64, activation='relu'), input_shape=(X_train.shape[1],))
model.add(Dropout(0.2))
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(16, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(1, activation='sigmoid'))
# 모델 요약
model.summary()
# 3) 모델 컴파일
model.compile(optimizer='adam',
loss='binary_crossentropy', # 회귀: loss='mean_squared_error'
metrics=['accuracy'])
# 4) EarlyStopping
from tensorflow.keras.callbacks import EarlyStopping
es = EarlyStopping(monitor='val_loss', patience=5, mode='min')
# 5) ModelCheckpoint
from tensorflow.keras.callbacks import ModelCheckpoint
mc = ModelCheckpoint('best_model.keras', monitor='val_loss',
mode='min', verbose=1,
save_best_only=True)
# 6) 모델 학습
history = model.fit(X_train, y_train,
epochs=30,
batch_size=16,
validation_data=(X_valid, y_valid),
callbacks=[es, mc])
모델 컴파일 손실함수(loss)
회귀: 'mean_squared_error'
이진분류: 'binary_crossentropy'
다중분류: 'sparse_categorical_crossentropy', 'categorical_crossentropy'
딥러닝 모델 학습 시각화¶
In [ ]:
from matplotlib import pyplot as plt
plt.plot(history.history['loss'], label='Train Loss')
plt.plot(history.history['val_loss'], label='Validation Loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.title('Model MSE')
plt.legend()
plt.show()
5. 모델 성능평가¶
예측¶
In [ ]:
pred = model.predict(X_test)
분류(Classification)¶
In [ ]:
# Confusion Matrix
from sklearn.metrics import confusion_matrix
print(confusion_matrix(y_test, pred))
In [ ]:
# Confusion Matrix Heatmap으로 시각화
cf_matrix = confusion_matrix(y_test, y_pred)
print(cf_matrix) # 혼동 행렬
sns.heatmap(cf_matrix,
annot=True, # 주석
fmt='d') # 주석 포맷
plt.show()
In [ ]:
# Classification Report
from sklearn.metrics import classification_report
print(classification_report(y_test, pred))
In [ ]:
# 분류 모델 평가 지표
from sklearn.metrics import accuracy_score # 정확도
from sklearn.metrics import precision_score # 정밀도
from sklearn.metrics import recall_score # 재현율
from sklearn.metrics import f1_score # f1 score
from sklearn.metrics import confusion_matrix # 혼동행렬
from sklearn.metrics import accuracy_score # 모든 지표 한번에
회귀(Regression)¶
In [ ]:
from sklearn.metrics import r2_score # R2 결정계수
from sklearn.metrics import mean_squared_error # MSE
from sklearn.metrics import mean_absolute_error # MAE
'자격증 > AICE' 카테고리의 다른 글
[AICE] 인공지능 자격증: AICE - ASSOCIATE (1) | 2024.06.11 |
---|
1. 데이터 불러오기¶
1) 라이브러리 임포트 및 설치¶
In [1]:
# scikit-learn
import sklearn
In [2]:
# pandas
import pandas as pd
In [3]:
# numpy
import numpy as np
In [5]:
# seaborn
!pip install seaborn
import seaborn as sns
In [6]:
# matplotlib
import matplotlib.pyplot as plt
2) 데이터 로드 및 저장¶
In [ ]:
# csv
df = pd.read_csv('data.csv')
In [ ]:
# json
df = pd.read_json('data.csv')
3) 데이터 구성 확인 및 다루기¶
In [ ]:
# 앞행 n개 확인
df.head(n)
In [ ]:
# 뒷행 n개 확인
df.tail(n)
In [ ]:
# 데이터 프레임 정보 확인
df.info()
In [ ]:
# 데이터 프레임 행, 열 개수 확인
df.shape
In [ ]:
# 통계 정보 확인
df.describe()
In [ ]:
# 데이터 프레임 열 이름 확인
df.columns
In [ ]:
# 범주별 빈도수 확인
## normalize = True: 정규화된 값으로 범주별 비율 확인
df['열 이름'].value_counts()
In [ ]:
# 데이터 프레임의 모든 값들을 넘파이 배열 형태로 확인
df.values
In [ ]:
# 데이터 프레임의 인덱스 확인
df.index
In [ ]:
# 각 열의 데이터 타입 확인
df.dtypes
In [ ]:
# 원하는 데이터 타입에 해당하는 열만 데이터 프레임 형태로 확인
df.select_dtypes(type='object')
In [ ]:
# 상관 분석
df.corr()
In [ ]:
# 데이터 합치기
df = pd.merge(df_a, df_b, on='합칠 때 사용할 열', how='inner')
4) 데이터 시각화¶
In [ ]:
import seaborn as sns
In [ ]:
# countplot
sns.countplot(x='열 이름')
In [ ]:
# jointplot
sns.jointplot(x='열 이름1', y='열 이름2', data=df)
2. 데이터 전처리¶
1) 결측치 및 데이터 처리¶
In [ ]:
# 결측치 확인
df.isna().sum()
In [ ]:
# 열 삭제
df.drop('열 이름',axis=1, inplace=True)
In [ ]:
# 결측값 대체
df['열 이름'].fillna('바꿀 값', inplace=True)
In [ ]:
# 결측치 특정 값으로 변경
## df.replace({'원래 값': '바꿀 값'}, inplace=True)
df.replace(np.NaN, '0')
In [ ]:
# 결측값 있는 행 삭제
df.dropna(how='any')
In [ ]:
# 열 타입 변환
df['열 이름'] = df['열 이름'].astype(type='float')
In [ ]:
# 그룹 집계
df.groupby(by=['그룹 기준 열'])['집계 대상 열'].mean()
2) 데이터 인코딩¶
In [ ]:
# 라벨 인코딩
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df['열 이름'] = le.fit_transform(df['열 이름'])
In [ ]:
# 원핫 인코딩
df = pd.get_dummies(data=df, columns='열 이름', drop_first=True)
In [ ]:
# 원핫 인코딩 - object 타입의 전체 컬럼 대상
obj_columns = df.select_dtypes(include='object').columns
df_preset = pd.get_dummies(df, columns=obj_columns, drop_first=True)
3) 데이터 분리¶
In [ ]:
# X, y 분리
target = 'target_column'
X = df.drop(target, axis=1)
y = df[target]
In [ ]:
# train, test 데이터셋 분리
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, stratify=y, random_state=42)
4) 데이터 스케일링¶
In [ ]:
# StandardScaler
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train) # 데이터 정규분포화
X_test = scaler.transform(X_test) # 데이터 표준
In [ ]:
# MinMaxScaler
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
3. 머신러닝¶
In [ ]:
# LogisticRegression - 분류
from sklearn.linear_model import LogisticRegression
lg = LogisticRgression()
lg.fit(X_train, y_train)
lg.score(X_test, y_test)
In [ ]:
# KNN - 분류/회귀
from sklearn.neighbors import KNeighborsClassifier # 분류
from sklearn.neighbors import KNeighborsRegressor # 회귀
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
knn.score(X_test, y_test)
In [ ]:
# DecisionTree - 분류/회귀
from sklearn.tree import DecisionTreeClassifier # 분류
from sklearn.tree import DecisionTreeRegressor # 회귀
dt = DecisionTreeClassifier(max_depth=5, random_state=42)
dt.fit(X_train, y_train)
dt.score(X_test, y_test)
In [ ]:
# RandomForest - 분류/회귀
from sklearn.ensemble import RandomForestClassifier # 분류
from sklearn.ensemble import RandomForestRegressor # 회
rf = RandomForestClassifier(n_estimators=3, random_state=42)
rf.fit(X_train, y_train)
rf.score(X_test, y_test)
In [ ]:
# XGBoost - 분류/회귀
!pip install xgboost
from xgboost import XGBClassifier # 분류
from xgboost import XGBRegressor # 회귀
xgb = XGBClassifier(n_estimators=3, random_state=42)
xgb.fit(X_train, y_train)
xgb.score(X_test, y_test)
In [ ]:
# LightGBM - 분류/회귀
!pip install lightgbm
from lightgbm import LGBMClassifier # 분류
from lightgbm import LGBMegressor # 회귀
lgbm = LGBMClassifier(n_estimators=3, random_state=42)
lgbm.fit(X_train, y_train)
lgbm.score(X_test, y_test)
4. 딥러닝¶
In [ ]:
import tensorflow as tf
from temsorflow import keras
In [ ]:
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout
# 1) 모델 생성
model = Sequential()
# 2) 모델 구조
model.add(Dense(64, activation='relu'), input_shape=(X_train.shape[1],))
model.add(Dropout(0.2))
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(16, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(1, activation='sigmoid'))
# 모델 요약
model.summary()
# 3) 모델 컴파일
model.compile(optimizer='adam',
loss='binary_crossentropy', # 회귀: loss='mean_squared_error'
metrics=['accuracy'])
# 4) EarlyStopping
from tensorflow.keras.callbacks import EarlyStopping
es = EarlyStopping(monitor='val_loss', patience=5, mode='min')
# 5) ModelCheckpoint
from tensorflow.keras.callbacks import ModelCheckpoint
mc = ModelCheckpoint('best_model.keras', monitor='val_loss',
mode='min', verbose=1,
save_best_only=True)
# 6) 모델 학습
history = model.fit(X_train, y_train,
epochs=30,
batch_size=16,
validation_data=(X_valid, y_valid),
callbacks=[es, mc])
모델 컴파일 손실함수(loss)
회귀: 'mean_squared_error'
이진분류: 'binary_crossentropy'
다중분류: 'sparse_categorical_crossentropy', 'categorical_crossentropy'
딥러닝 모델 학습 시각화¶
In [ ]:
from matplotlib import pyplot as plt
plt.plot(history.history['loss'], label='Train Loss')
plt.plot(history.history['val_loss'], label='Validation Loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.title('Model MSE')
plt.legend()
plt.show()
5. 모델 성능평가¶
예측¶
In [ ]:
pred = model.predict(X_test)
분류(Classification)¶
In [ ]:
# Confusion Matrix
from sklearn.metrics import confusion_matrix
print(confusion_matrix(y_test, pred))
In [ ]:
# Confusion Matrix Heatmap으로 시각화
cf_matrix = confusion_matrix(y_test, y_pred)
print(cf_matrix) # 혼동 행렬
sns.heatmap(cf_matrix,
annot=True, # 주석
fmt='d') # 주석 포맷
plt.show()
In [ ]:
# Classification Report
from sklearn.metrics import classification_report
print(classification_report(y_test, pred))
In [ ]:
# 분류 모델 평가 지표
from sklearn.metrics import accuracy_score # 정확도
from sklearn.metrics import precision_score # 정밀도
from sklearn.metrics import recall_score # 재현율
from sklearn.metrics import f1_score # f1 score
from sklearn.metrics import confusion_matrix # 혼동행렬
from sklearn.metrics import accuracy_score # 모든 지표 한번에
회귀(Regression)¶
In [ ]:
from sklearn.metrics import r2_score # R2 결정계수
from sklearn.metrics import mean_squared_error # MSE
from sklearn.metrics import mean_absolute_error # MAE
'자격증 > AICE' 카테고리의 다른 글
[AICE] 인공지능 자격증: AICE - ASSOCIATE (1) | 2024.06.11 |
---|