본문 바로가기
CODING/AI & ML & DL

[기계학습] 이차 판별 분석 | Quadratic Discriminat Analysis

by 밍톨맹톨 2020. 10. 15.
728x90
728x90

[ 이전 글 ] LDA에서는 결정경계를 선형으로 가정하고 있어 서로 다른 공분산 분류에 어려움이 있는데( 비선형 분류가 가능하긴 함 ) 이것은 QDA로 해결할 수 있다.

 

QDA Quadratic Discriminat Analysis ]

- 서로 다른 공분산 데이터 분류 가능 ( 비선형 분류 가능 )

- 서로 다른 공분산 데이터 분류를 위해 샘플이 많이 필요하다.

- 독립변수(설명변수)의 개수가 많을 경우, 추정해야하는 모수가 많아짐 ➡️  연산량이 큼

 

🔎 모수 

아래의 식에서 β에 해당하는 것을 모수라고 함

 

QDA 예시

 

평균이 각각 (0,0) (1,1) (-1,1) 이고 class2 와 class3 의 공분산 구조는 같지만 class1의 구조가 다르기 때문에 QDA를 사용한다

 

class 1 - 구형 공분산  class 2 & class 3 - 완전 공분산 


[ 파이썬에서 ' IRIS 데이터 ' QDA에 적용 ]

 

1️⃣ Iris 데이터 불러오기 + test / train 데이터로 나누기 

# Iris data 불러오기
import seaborn as sns # seaborn을 불러옴.
iris=sns.load_dataset('iris') # iris라는 변수명으로 Iris data를 download함.
X=iris.drop('species',axis=1) # 'species'열을 drop하고 특성변수 X를 정의함.
y_=iris['species'] # 'species'열을 label y를 정의함.

from sklearn.preprocessing import LabelEncoder # LabelEncoder() method를 불러옴
classle=LabelEncoder() 
y=classle.fit_transform(iris['species'].values) # species 열의 문자형을 범주형 값으로 전환

from sklearn.model_selection import train_test_split 
X_train,X_test,y_train,y_test=train_test_split(X,y, test_size=0.4, random_state=123, stratify=y)

 

2️⃣ LDA를 사용하기 위해 sklearn.discriminant_analysis에서 QuadraticDiscriminantAnalysis 임포트 

 

 

from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis

cqd=QuadraticDiscriminantAnalysis(store_covariance=True)

 

3️⃣ 적용 후 정확도 확인

 

cqd.fit(X_train, y_train) # QDA 적합
y_train_pred=cqd.predict(X_train)
y_test_pred=cqd.predict(X_test)


from sklearn.metrics import accuracy_score
print(accuracy_score(y_train, y_train_pred)) # train data에 대한 accuracy
print(accuracy_score(y_test, y_test_pred)) # test data에 대한 accuracy
728x90

댓글