< 7주차 데이터 분석 과정 학습 및 시각화 실습 (5) >
Naive Bayes
: y를 우리가 분류하고자 하는 class, x는 input일 때,
Naive Bayes는 X가 주어졌을 떄 feature 간의 conditional independent를 가정하고
posterior를 최대화하는 y를 예측값으로 결정
## baseline code
# Naive Bayes Classifier
from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
# training
gnb.fit(X, y)
# Naive Bayes Classifier evaluation
y_pred = gnb.predict(X_test)
regression 평가 방법
: 모델을 제대로 평가하는 metrix(지표)를 사용해야 함
MSE(Mean Squared Error)
: 오차의 제곱을 평균으로 나눈 값, 0에 가까울수록 좋은 성능
: 오차값이 큰 데이터점에 대해 민감하게 반응(이상치에 민감)
# Mean Squared Error
from sklearn.metrics import mean_squared_error
print(mean_squared_error(y_test, y_pred))
MAE(Mean Absolute Error)
: 오차의 절대값을 평균으로 나눈 값, 0에 가까울수록 좋은 성능
: 오차값이 큰 데이터에 대해 상대적으로 덜 민감하게 반응
# Mean Absolute Error
from sklearn.metrics import mean_absolute_error
print(mean_absolute_error(y_test, y_pred))
R-Square(결정계수)
: 독립변수 X가 종속변수 y를 얼마나 잘 설명하는지를 나타냄
: 0~1 사이의 값을 가짐. 1에 가까울수록 좋은 성능
: 전체 y의 평균으로부터 각 y값이 멀리 떨어질수록 예측한 y값과 실제 y값이 가까워질수록
1에 가까워짐
# R2 Score
from sklearn.metrics import r2_score
print(r2_score(y_test, y_pred))
classification 평가 방법
Precision(정밀도) / Recall(재현율)
- precision은 실제 positive 샘플 중 몇 개를 positive로 잡았는지
- recall은 예측 positive 중 몇 개가 실제 positive인지
Precision/recall은 positive threshold에 따라 조절이 가능하며,
False positive가 늘어나는 것이 문제인 경우에는 precision를 높이는 것이 중요하지만,
False positive가 늘어나도
어떻게든 positive들을 잡아내야 되는 경우 (e.g. 전염병, 암 진단)
recall을 높이는 것이 중요
- True Positive(TP) : 실제 True인 정답을 True라고 예측 (정답)
- False Positive(FP) : 실제 False인 정답을 True라고 예측 (오답)
- False Negative(FN) : 실제 True인 정답을 False라고 예측 (오답)
- True Negative(TN) : 실제 False인 정답을 False라고 예측 (정답)
# accuracy
from sklearn.metrics import accuracy_score
print('accuracy: ', accuracy_score(y_test, y_pred))
# precision
from sklearn.metrics import precision_score
print('precision: ', precision_score(y_test, y_pred))
# recall
from sklearn.metrics import recall_score
print('recall: ', recall_score(y_test, y_pred))
F1 Score
: Precision / Recall을 모두 고려한 평가지표
from sklearn.metrics import f1_score
print('f1: ', f1_score(y_test, y_pred))
PCA (Pricipal Component Analysis)
: 고차원의 x에서 주어진 x들의 분포를 가장 잘 설명하는 x축, y축을 찾아내는 기술
x축, y축을 찾아낸 후, 우리가 가진 데이터를 새로운 x축과 y축에 나타낼 수 있음
-> 주어진 데이터의 전반적인 분포를 시각화할 때 유용(Scatter plot)
# Principal Component Analysis (PCA)
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
pca_model = pca.fit_transform(X_train) #Fit to data, then transform it
pca_df = pd.DataFrame(columns=['x','y'])
pca_df['x'] = pca_model[:,0]
pca_df['y'] = pca_model[:,1]
pca_df.plot.scatter(x='x', y='y', c=['b' if z ==0 else 'r' for z in y_train])
Feature Analysis
: 데이터를 설명하는 feature x와 알아보고자 하는 label y가 있을 때,
어떠한 feature가 y를 설명하는데에 있어 중요한 feature 인지 아는 것이 중요
: Logistic regression이나 linear regression, Support vector machine, 그리고 random forest 모두
학습이 된 상태에서 어떠한 feature를 주로 보고있는지를 보여주는 값들을 가지고 있음
: 각 feature들과 label 간의 상관관계 분석을 통해 어떤 feature가 중요한지를 안다면
의사결정 과정에서 큰도움이 될 수 있음(e.g. 문제를 일으키는 주된 원인이 무엇인지 파악할 경우)
Feature analysis - Linear regression, Logistic regression
- coef : 각 feature들에 대해서 각각 곱해지는 값
- intercept : 절편
# Logistic Regression
from sklearn.linear_model import LogisticRegression
lgr = LogisticRegression()
# training
lgr.fit(X_train, y_train)
# 계수
lgr.coef_
# 절편
lgr.intercept_
# 시각화
plt.scatter(X_train[:, 0], X_train[:, 1], marker="o", c=y_train, s=25, edgecolor="k")
-> coefficient(계수)가 큰 feature는 label을 설명하는데 중요한 feature 일것임
Feature analysis - SVM
# Support Vector Machines (SVM)
from sklearn.svm import SVC
svc = SVC(kernel='linear')
# training
svc.fit(X, y)
svc.coef_
Feature analysis - Random forest
: 자체적으로 feature importance score 제공
# Random forest classifier
from sklearn.ensemble import RandomForestClassifier
rfc= RandomForestClassifier(n_estimators=100, max_depth=200)
# training
rfc.fit(X, y)
rfc.feature_importances_
Feature analysis - 상관관계 분석
: 각 feature들과 label 간의 상관관계 분석을 통해 feature의 중요도 파악 가능
: 1 or -1에 가까울수록 양/음의 상관관계
pearson (피어슨 상관계수)
: 두 변수간의 선형 상관관계의 정도를 나타냄
import scipy.stats as stats
stats.pearsonr(X_train[:,0], y_train)
spearmanr (스피어만 상관계수)
: 두 변수간의 크기 순서상의 상관관계의 정도를 나타냄
import scipy.stats as stats
stats.spearmanr(X_train[:,0], y_train)
'STUDY > DevCourse' 카테고리의 다른 글
[데브코스][데이터 분석] 지도학습 알아보기 (0) | 2024.04.23 |
---|---|
[데브코스][데이터 분석] 머신러닝 기초와 수학적 배경 (0) | 2024.04.23 |
[데브코스][데이터 분석] 회귀분석과 데이터 모델링 (1) (1) | 2024.04.05 |
[데브코스][데이터 분석] 데이터 시각화 (1) | 2024.04.03 |
[데브코스][데이터 분석] 통계적 분석 기초 (2) - 기술통계, 가설검정 (0) | 2024.04.02 |