오늘은 머신러닝의 대표적인 분류 알고리즘인 SVM, 로지스틱 회귀, KNN을 Iris 데이터셋에 적용해보고, OpenCV를 활용해 이미지 불러오기와 전처리도 실습했습니다. 각각의 모델이 데이터를 어떻게 처리하고 예측하는지 살펴보고, 그 결과를 평가하는 방법도 함께 배웠습니다. 또한 이미지 파일을 열고, 회색조로 변환한 뒤 저장 및 출력하는 과정을 익혔습니다.
1. 🌸 Iris 데이터셋 분류 실습
Iris 데이터셋은 머신러닝 입문자들이 가장 많이 활용하는 꽃잎 길이/너비 데이터를 포함한 분류용 데이터입니다.
(1) 데이터셋 불러오기
from sklearn import datasets
# 사이킷런에서 제공하는 아이리스 데이터셋 불러오기
d = datasets.load_iris()
print(d.DESCR) # 데이터셋 설명 출력
# 전체 데이터 출력
for i in range(0,len(d.data)):
print(i+1, d.data[i], d.target[i])
(2) SVM 분류기 학습 및 예측
from sklearn import svm
s = svm.SVC(gamma=0.1, C=10)
s.fit(d.data, d.target) # 전체 데이터로 학습
# 새로운 샘플 2개를 예측
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)
(3) 교차검증으로 SVM 평가
from sklearn.model_selection import cross_val_score
accuracies = cross_val_score(s, d.data, d.target, cv=5)
print(accuracies)
print("정확률(평균)=%0.3f, 표준편차 =%0.3f" % (accuracies.mean()*100, accuracies.std()))
(4) SVM + Confusion Matrix
from sklearn.model_selection import train_test_split
import numpy as np
x_train, x_test, y_train, y_test = train_test_split(d.data, d.target, train_size=0.6)
s.fit(x_train, y_train)
res = s.predict(x_test)
conf = np.zeros((3, 3))
for i in range(len(res)):
conf[res[i]][y_test[i]] += 1
print(conf)
no_correct = sum(conf[i][i] for i in range(3))
accuracy = no_correct / len(res)
print("테스트 집합에 대한 정확률은", accuracy * 100, "%입니다.")
2. 🔢 로지스틱 회귀 실습
from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression()
logreg.fit(d.data, d.target)
res = logreg.predict(new_d)
print("새로운 2개 샘플의 부류는", res)
교차검증
accuracies = cross_val_score(logreg, d.data, d.target, cv=5)
print(accuracies)
print("정확률(평균)=%0.3f, 표준편차 =%0.3f" % (accuracies.mean()*100, accuracies.std()))
Confusion Matrix
logreg.fit(x_train, y_train)
res = logreg.predict(x_test)
conf = np.zeros((3, 3))
for i in range(len(res)):
conf[res[i]][y_test[i]] += 1
print(conf)
no_correct = sum(conf[i][i] for i in range(3))
accuracy = no_correct / len(res)
print("테스트 집합에 대한 정확률은", accuracy * 100, "%입니다.")
3. 👥 KNN (K-최근접 이웃) 실습
from sklearn.neighbors import KNeighborsClassifier
k = 3
knn = KNeighborsClassifier(n_neighbors=k)
knn.fit(d.data, d.target)
res = knn.predict(new_d)
print("새로운 2개 샘플의 부류는", res)
교차검증
accuracies = cross_val_score(knn, d.data, d.target, cv=5)
print(accuracies)
print("정확률(평균)=%0.3f, 표준편차 =%0.3f" % (accuracies.mean()*100, accuracies.std()))
Confusion Matrix
knn.fit(x_train, y_train)
res = knn.predict(x_test)
conf = np.zeros((3, 3))
for i in range(len(res)):
conf[res[i]][y_test[i]] += 1
print(conf)
no_correct = sum(conf[i][i] for i in range(3))
accuracy = no_correct / len(res)
print(no_correct)
print("테스트 집합에 대한 정확률은", accuracy * 100, "%입니다.")
4. 🖼️ OpenCV 이미지 처리
(1) 이미지 불러오기 및 표시
import cv2 as cv
import sys
img = cv.imread('plant2_test1.jpg') # 이미지 경로 주의
if img is None:
sys.exit("파일을 찾을 수 없습니다.")
cv.imshow('Image Display', img)
cv.waitKey()
cv.destroyAllWindows()
(2) 이미지 축소
img_small = cv.resize(img, dsize=(0,0), fx=0.25, fy=0.25)
print(img.shape)
cv.imshow('Image Display', img_small)
cv.waitKey()
cv.destroyAllWindows()
(3) 흑백 변환 및 저장
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
gray_small = cv.resize(gray, dsize=(0,0), fx=0.5, fy=0.5)
cv.imwrite('gray.jpg', gray)
cv.imwrite('gray_small.jpg', gray_small)
cv.imshow('Color image', img)
cv.imshow('Gray image', gray)
cv.imshow('Gray image small', gray_small)
cv.waitKey()
cv.destroyAllWindows()
5. 🔁 콜백 함수 이해하기
def callback_func(func):
for i in range(5):
func(i)
def print_hello(num):
print("hello", num)
def print_python(num):
print("python", num)
callback_func(print_hello)
callback_func(print_python)
👉 어떤 함수를 인자로 받아서 반복 실행시키는 “콜백 함수” 개념을 실습했습니다.
✏️ 느낀 점 (부족했던 부분)
- 이미지 경로 오류가 자주 났습니다. 파일을 프로젝트 폴더와 같은 위치에 정확하게 넣지 않으면 imread에서 파일을 못 찾습니다.
- 로지스틱 회귀는 max_iter 설정이 없어서 에러 날 수 있으므로, 모델 생성 시 max_iter=200 정도로 지정해주는 게 좋습니다.
- Confusion Matrix의 행과 열 위치가 조금 헷갈렸습니다. 예측값/실제값 순서를 주의해야 합니다.
🛠 개선할 점
- 각 모델의 파라미터 튜닝(C, gamma, k 등)을 바꿔보며 성능 차이를 비교하는 실험이 부족했습니다.
- 정확도 외에 정밀도(precision), 재현율(recall)도 함께 출력하면 더 실용적인 분석이 될 것 같습니다.
- 이미지 전처리 후, 머신러닝 모델과 연동해 식물 분류기를 만들어보면 재미있을 것 같습니다.
📌 요약 정리
- Iris 데이터셋을 통해 SVM, 로지스틱 회귀, KNN 모델을 학습하고 성능을 평가해보았습니다.
- OpenCV를 이용한 이미지 읽기, 흑백 변환, 축소 및 저장을 실습하였습니다.
- 콜백 함수의 원리를 이해하고 간단한 함수로 적용해보았습니다.
'이미지와 영상처리' 카테고리의 다른 글
| 📚 OpenCV 실습: 이미지 자르기, 사각형 표시, 다양한 확대 방법 비교 (2025-04-28) (0) | 2025.04.29 |
|---|---|
| 🎨 마우스로 영상 위에 그림 그리기 – OpenCV 마우스 이벤트 실습 정리 (2-6 ~ 2-9)📅 작성일: 2025년 4월 20일 (0) | 2025.04.20 |
| 🎓 FastText 활용 영화 리뷰 감성 분석 (2024-04-16) (0) | 2025.04.16 |
| 머신러닝 기초 실습 - SVM, 로지스틱 회귀, KNN 분류 모델 비교 (with OpenCV)📅 작성일: 2025년 4월 8일 (0) | 2025.04.08 |