* Iris 데이터를 사용하여 SVM(Support Vector Machine) 을 구현하고 시각화하는 코드이다.
1. 데이터를 불러와서 내용을 출력한다.
d = datasets.load_iris() # 데이터를 불러온다.
print(d.DESCR) # 데이터에 대한 설명을 출력한다.
datasets.load_iris()를 사용하여 Iris 데이터셋을 불러옵니다.
d.DESCR을 사용하여 데이터셋의 설명을 출력합니다. 이 설명에는 데이터셋의 구성 요소와 특징에 대한 자세한 정보가 포함되어 있습니다.
2. 데이터를 출력한다.
for i in range(0, len(d.data)): # 모든 샘플에 대해 반복하여 데이터와 타겟을 출력한다.
print (i+1, d.data[i], d.target[i])
for 루프를 사용하여 Iris 데이터셋의 각 샘플을 순회하면서 출력합니다. 샘플의 인덱스와 해당하는 데이터(꽃의 특징) 및 타겟(품종)을 출력합니다.
3. SVM 모델을 생성하고 학습시킨다.
s=svm.SVC(gamma=0.1, C=10) # SVM 모델을 생성한다.
fit(d.data, d.target) # 생성된 SVM 모델에 iris 데이터를 학습시킨다.
svm.SVC()를 사용하여 Support Vector Classifier(SVC) 객체를 생성합니다. SVC는 SVM의 분류 모델 중 하나입니다.
gamma 매개변수는 커널의 영향 반경을 결정하는 매개변수로, 작은 값일수록 멀리 있는 데이터의 영향이 더 큽니다.
작은 gamma 값은 각 데이터 포인트의 영향을 넓게 만들어, 부드러운 결정 경계를 생성합니다.
반면에 큰 gamma 값은 각 데이터 포인트에 민감하게 반응하여, 복잡한 결정 경계를 생성합니다.
C 매개변수는 오차 허용 값에 대한 패널티를 나타내는 매개변수로, 작은 값일수록 오차에 더 큰 허용을 줍니다.
C 매개변수는 오분류에 대한 페널티를 조절하는 매개변수입니다.
작은 C 값은 오분류에 대한 허용을 높이며, 모델이 데이터를 더 많이 오분류할 수 있도록 합니다.
반면에 큰 C 값은 오분류에 대한 페널티를 증가시키며, 모델이 더 작은 오분류 비율을 가진 결정 경계를 찾도록 합니다.
따라서 gamma=0.1과 C=10은 해당 매개변수들을 적당한 값으로 설정한 것입니다. 하지만 이 값들은 데이터와 문제의 특성에 따라 다를 수 있으며, 실험적으로 조정해야 합니다.
fit() 메서드를 사용하여 모델을 학습시킵니다. d.data는 입력 데이터로, d.target은 해당하는 품종(타겟)입니다.
모델은 입력 데이터와 타겟을 사용하여 패턴을 학습하고, 주어진 입력에 대해 올바른 출력(클래스 또는 품종)을 예측할 수 있도록 조정됩니다.
4. 새로운 데이터로 예측을 수행한다.
new_d = [[6.4, 3.2, 6.0, 2.5], [7.1, 3.1, 4.7, 1.35]]
# 새로운 데이터를 정의한다.
res = s.predict(new_d) # 학습된 모델을 사용하여 새로운 데이터의 클래스를 예측한다.
print('새로운 2개 샘플 부류는: ', res) # 예측 결과를 출력한다.
두 개의 새로운 데이터 샘플을 생성하여 new_d에 저장합니다. 이는 학습된 모델로 예측을 수행하기 위한 입력 데이터입니다.
predict() 메서드를 사용하여 새로운 데이터 샘플의 품종을 예측합니다.
이전 단계에서 예측된 새로운 데이터 샘플의 품종을 출력합니다.
5. 데이터 시각화를 위해 Plotly Express를 사용한다.
df = px.data.iris() # Iris 데이터셋을 불러온다
fig = px.scatter_3d(df, x='petal_length', y='sepal_width', color='species') # 3차원 산점도를 생성한다.
fig.show() # 생성된 산점도를 시각화한다.
plotly.express를 사용하여 Iris 데이터셋을 3차원 산점도로 시각화합니다.
x축은 petal length, y축은 sepal width, z축은 petal width로 설정되어 있습니다.
각각의 데이터 포인트는 붓꽃의 종(species)에 따라 색으로 구분되어 표시됩니다.
[SVC]
SVC는 Support Vector Classifier의 약자로, sklearn의 SVM(Support Vector Machine) 모델 중 하나입니다.
SVM은 주어진 데이터를 분류하기 위해 사용되는 강력한 머신러닝 알고리즘 중 하나로,
선형 또는 비선형 분류 문제에 적용할 수 있습니다.
SVC 객체를 생성할 때 사용되는 중요한 매개변수는 다음과 같습니다:
- C (Cost parameter): 오분류에 대한 페널티를 조절하는 매개변수입니다.
작은 C 값은 오분류에 대한 허용을 높이며, 큰 C 값은 오분류에 대한 페널티를 증가시킵니다.
따라서 C 값이 클수록 모델은 더 많은 학습 데이터를 올바르게 분류하기 위해 노력합니다.
- kernel (Kernel function): 데이터를 고차원 공간으로 변환하여 비선형 문제를
선형 분리 가능한 문제로 바꾸는 함수입니다.
기본값은 'rbf' (Radial Basis Function)이며,
다른 옵션으로는 'linear' (선형), 'poly' (다항식), 'sigmoid' 등이 있습니다.
- gamma: 'rbf', 'poly', 'sigmoid' 커널에서 사용되는 커널 계수입니다.
gamma 값이 클수록 모델은 훈련 데이터에 더 많은 영향을 받으며, 복잡한 결정 경계를 만들게 됩니다.
SVC 모델은 입력 데이터의 패턴을 학습하여 주어진 데이터가 어떤 클래스에 속하는지 예측하는데 사용됩니다.
이러한 모델은 특히 중요한 매개변수와 데이터의 분포를 고려하여 조정되어야 하며,
적절한 매개변수 설정과 데이터 전처리가 필요합니다.