다중분류는 분류되는 범주가 3개 이상인 것을 말한다.
import warnings
warnings.filterwarnings("ignore")
import pandas as pd
data=pd.read_csv('Fvote.csv', encoding='utf-8')
X=data[data.columns[1:13]]
y=data[['parties']]
이번 장에서는 4개의 범주로 구분되는 지지정당(paries)으로 코드 작성을 해보겠다.
이전 장에서 타이핑했던 코드들 다시 활용하는거라 복습하는 느낌으로 작성
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=42)
sklearn.model_selection을 불러와 train_test_split 라이브러리로 train, test 데이터 나누어주었다.
범주형 변수를 분류하는 것이기 때문에 stratify=y 옵션도 추가함
1) 모델 적용
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X_train, y_train)
pred_train = model.predict(X_train)
model.score(X_train,y_train)
pred_test = model.predict(X_test)
model.score(X_test,y_test)
sklearn.linear_model을 불러와 LogisticRegresiion 라이브러리를 사용했다.
사용하기 편하게 model 변수에 넣어주고, train 데이터로 fit 해준다.
train, test 데이터 각각 넣어서 정확도 확인까지 했다.
다항분류는 대체로 정확도가 낮게 나오지만 그걸 감안해도 낮은 편이다.
2) 혼동행렬
#혼동행렬
from sklearn.metrics import confusion_matrix
confusion_train = confusion_matrix(y_train, pred_train)
print("훈련데이터 오차행렬:\n", confusion_train)
confusion_test = confusion_matrix(y_test, pred_test)
print("테스트데이터 오차행렬:\n", confusion_test)
sklearn.metrics로부터 confusion_matrix 라이브러리를 임포트했다.
train데이터를 넣은 confusion_matrix를 confusion_train에,
test데이터를 넣은 confusion_matrix를 confusion_test 변수에 담아주어 오차행렬을 프린트한다.
정당3의 정분류가 가장 낮게 나타나는 것을 확인했다.
3) 그리드탐색
from sklearn.model_selection import GridSearchCV
param_grid = {'C' : [0.001, 0.01, 0.1, 1, 10, 100]}
grid_search = GridSearchCV(LogisticRegression(), param_grid, cv=5, return_train_score = True)
grid_search.fit(X_train, y_train)
#최적의 C값, 정확도 확인
print("Best Parameter: {}".format(grid_search.best_params_))
print("Best Cross-validity Score: {:3f}".format(grid_search.best_score_))
#테스트데이터에 C=0.1 모델을 적용
print("Test set Score: {:.3f}".format(grid_search.score(X_test, y_test)))
sklearn.model_selection으로부터 GridSearchCV 라이브러리를 불러왔다.
그리드탐색이라서 하이퍼파라미터 'C'값을 직접 지정(6개)해주었다.
GridSearchCV를 grid_search 변수에 넣어주고, train 데이터를 넣어 fit 해주었다.
이후 print로 최적의 C값, 정확도를 확인해주었다.
best_params_ / best_score_
4) 랜덤탐색
#랜덤탐색
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint
param_distribs = {'C' : randint(low=0.001, high=100)}
random_search = RandomizedSearchCV(LogisticRegression(), param_distributions=param_distribs, cv=5, return_train_score=True)
random_search.fit(X_train, y_train)
#최적의 C값과 정확도 확인
print("Best Parameter: {}".format(random_search.best_params_))
print("Best Cross-validity Score: {:.3f}".format(random_search.best_score_))
#C값이 11일때 정확도
print("Test set Score: {:.3f}".format(random_search.score(X_test, y_test)))
sklearn.model_selection으로부터 RandomizedSearchCV 라이브러리를 불러왔다.
추가로 랜덤 지정을 위해 scipy.stats으로부터 randint 라이브러리도 불러왔다.
'자기계발 > Python' 카테고리의 다른 글
[빅데이터분석기사] 14 K-최근접이웃법(KNN) (0) | 2022.06.21 |
---|---|
[빅데이터분석기사] 13 로지스틱 회귀모델 (0) | 2022.06.20 |
[빅데이터분석기사] 11 모델평가 (0) | 2022.06.20 |
[빅데이터분석기사] 10 하이퍼파라미터(Grid Search, Random Search) (0) | 2022.06.19 |
[빅데이터분석기사] 09 데이터 정규화 (0) | 2022.06.19 |