관리 메뉴

ComputerVision Jack

[머신러닝 - 모델 앙상블] 본문

Campus Project/Homework

[머신러닝 - 모델 앙상블]

JackYoon 2020. 1. 22. 00:04
반응형

scikit_learn예제 - 유방암 데이터를 갖고 모델 앙상블 하여 결과 도출

Model Ensemble

 

from sklearn.datasets import load_breast_cancer

from sklearn.model_selection import train_test_split

from sklearn.naive_bayes import GaussianNB

from sklearn.metrics import accuracy_score

 

from sklearn import svm

from sklearn.neural_network import MLPClassifier

#필요한 라이브러 import 및 sklearn import.

NB 모델, SVM, MLP 3가지 모델을 앙상블 할 계획이다.

 

data = load_breast_cancer()

#데이터 셋을 로드한다.

 

label_names = data['target_names']

labels = data['target']

feature_names = data['feature_names']

features = data['data']

#데이터 셋을 전처리하여 데이터와 라벨을 분류한다.

 

[데이터 가시화]

print(label_names)

#라벨에 관련된 이름을 보여준다.

['malignant' 'benign']

 

print('Class label = ', labels[0])

#라벨 첫번째 값의 클래스 분류 값을 출력한다.

Class label = 0

 

print(feature_names)

#사용할 feature들의 이름을 제시한다.

['mean radius' 'mean texture' 'mean perimeter' 'mean area' 'mean smoothness' 'mean compactness' 'mean concavity' 'mean concave points' 'mean symmetry' 'mean fractal dimension' 'radius error' 'texture error' 'perimeter error' 'area error' 'smoothness error' 'compactness error' 'concavity error' 'concave points error' 'symmetry error' 'fractal dimension error' 'worst radius' 'worst texture' 'worst perimeter' 'worst area' 'worst smoothness' 'worst compactness' 'worst concavity' 'worst concave points' 'worst symmetry' 'worst fractal dimension']

 

print(features[0])

#위 feature을 토대로, 첫번째 인덱스의 feature값들을 출력한다.

[1.799e+01 1.038e+01 1.228e+02 1.001e+03 1.184e-01 2.776e-01 3.001e-01 1.471e-01 2.419e-01 7.871e-02 1.095e+00 9.053e-01 8.589e+00 1.534e+02 6.399e-03 4.904e-02 5.373e-02 1.587e-02 3.003e-02 6.193e-03 2.538e+01 1.733e+01 1.846e+02 2.019e+03 1.622e-01 6.656e-01 7.119e-01 2.654e-01 4.601e-01 1.189e-01]

 

print(labels.shape)

print(features.shape)

#라벨과 feature의 shape을 출력하여 확인해본다.

(569,) (569, 30)

 

train1, test1, train_labels1, test_labels1 = train_test_split( features, labels, test_size=0.33, random_state=42)

train2, test2, train_labels2, test_labels2 = train_test_split( features, labels, test_size=0.33, random_state=42)

train3, test3, train_labels3, test_labels3 = train_test_split( features, labels, test_size=0.33, random_state=42)

#데이터 셋을 train과 test데이터로 나눈다. 각각 train과 test이 모델에 하나씩 들어가게 된다.

 

Initialize our classifier

method1 = GaussianNB()

method2 = svm.LinearSVC()

method3 = MLPClassifier(alpha=0.00001, hidden_layer_sizes=(15,15), max_iter=5000)

#각각의 분류 모델을 초기화 한다. 

 

Train our classifier

model1 = method1.fit(train1, train_labels1)

model2 = method2.fit(train2, train_labels2)

model3 = method3.fit(train3, train_labels3)

#fit 메소드를 사용하여 각각의 모델을 학습시킨다.

 

Make predictions

preds1 = method1.predict(test1)

preds2 = method2.predict(test2)

preds3 = method3.predict(test3)

#학습된 모델에 test set을 넣어 결과를 확인한다.

 

Evaluate accuracy

print("NB : {}".format(accuracy_score(test_labels1, preds1)))

print("SVM : {}".format(accuracy_score(test_labels2, preds2)))

print("MLP : {}".format(accuracy_score(test_labels3, preds3)))

#각 모델의 정확도를 평가한다.

예측 결과

def ensemble_learning(param1, param2, param3):

    result = []

    for i in range(len(param1)):

        sum = param1[i] + param2[i] + param3[i]

        if(sum >= 2):

            result.append(1)

        else:

            result.append(0)

    return result

show_result = ensemble_learning(preds1, preds2, preds3)

print("-- Ensemble --")

print(show_result)

print("Ensemble : {}".format(accuracy_score(test_labels, show_result)))

#3개의 데이터 모델의 결과를 앙상블하여 결과를 출력한다

모델 앙상블 결과

 

반응형

'Campus Project > Homework' 카테고리의 다른 글

[머신러닝 - 2차원 2클래스 분류]  (0) 2020.01.21
[게임 - snake game]  (2) 2020.01.21
[컴퓨터 비전 - Face Detect]  (0) 2020.01.20
[이미지 - Perspective Transform]  (0) 2020.01.19
[이미지 - 필터링 적용]  (1) 2020.01.17
Comments