😏Svm Random

λ‚œμˆ˜ 생성 μ½”λ“œ

import cv2
import numpy as np
import matplotlib.pylab as plt
 
# 0~158 ꡬ간 μž„μ˜μ˜ 수 25 x 2 생성   ---β‘ 
a = np.random.randint(0,158,(25,2))
# 98~255 ꡬ간 μž„μ˜μ˜ 수 25 x 2 생성 ---β‘‘
b = np.random.randint(98, 255,(25,2))
# a, bλ₯Ό 병합, 50 x 2의 μž„μ˜μ˜ 수 생성 ---β‘’
trainData = np.vstack((a, b)).astype(np.float32)
# 0으둜 μ±„μ›Œμ§„ 50개 λ°°μ—΄ 생성 ---β‘£
responses = np.zeros((50,1), np.int32)
# 25 ~ 50 κΉŒμ§€ 1둜 λ³€κ²½ ---β‘€
responses[25:] = 1

# 0κ³Ό 같은 자리의 ν•™μŠ΅ λ°μ΄νƒ€λŠ” 빨강색 μ‚Όκ°ν˜•μœΌλ‘œ λΆ„λ₯˜ 및 ν‘œμ‹œ ---β‘₯
red = trainData[responses.ravel()==0]
plt.scatter(red[:,0],red[:,1],80,'r','^')
# 1κ³Ό 같은 자리의 ν•™μŠ΅ λ°μ΄νƒ€λŠ” νŒŒλž‘μƒ‰ μ‚¬κ°ν˜•μœΌλ‘œ λΆ„λ₯˜ 및 ν‘œμ‹œ ---⑦
blue = trainData[responses.ravel()==1]
plt.scatter(blue[:,0],blue[:,1],80,'b','s')
# 0~255 κ΅¬κ°„μ˜ μƒˆλ‘œμš΄ μž„μ˜μ˜ 수 생성 및 μ΄ˆλ‘μƒ‰ μ›μœΌλ‘œ ν‘œμ‹œ ---β‘§
newcomer = np.random.randint(0,255,(1,2)).astype(np.float32)
plt.scatter(newcomer[:,0],newcomer[:,1],80,'g','o')
# SVM μ•Œκ³ λ¦¬μ¦˜ 객체 생성 및 ν›ˆλ ¨---⑨
svm = cv2.ml.SVM_create()

svm.trainAuto(trainData, cv2.ml.ROW_SAMPLE, responses)
# svm_random.xml 둜 μ €μž₯ ---β‘©
svm.save('./svm_random.xml')
# μ €μž₯ν•œ λͺ¨λΈμ„ λ‹€μ‹œ 읽기 ---β‘ͺ
svm2  = cv2.ml.SVM_load('./svm_random.xml')
# μƒˆλ‘œμš΄ μž„μ˜μ˜ 수 예츑 ---β‘«
ret, results = svm2.predict(newcomer)
# κ²°κ³Ό ν‘œμ‹œ ---⑬
plt.annotate('red' if results[0]==0 else 'blue', xy=newcomer[0], xytext=(newcomer[0]+1))
print("return:%s, results:%s"%(ret, results))
plt.show()

μ½”λ“œ ν•΄μ„€

  1. 각각 25개의 λ‚œμˆ˜ 생성, μ•½κ°„ κ²ΉμΉ˜λŠ” ꡬ간이 있게 0~158, 98~255

  2. 이 λ‘˜μ„ ν•©μ³μ„œ 50개의 λ‚œμˆ˜ λ§Œλ“€κΈ°

  3. λ ˆμ΄λΈ”λ‘œ μ‚¬μš©ν•  50개의 0으둜 μ±„μ›Œμ§„ λ°°μ—΄ λ§Œλ“€κΈ°

  4. κ·Έ 쀑 25번쨰 μ΄ν›„μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό 1둜 μ±„μ›Œμ„œ μ ˆλ°˜μ”© 0 κ³Ό 1이 μ±„μ›Œμ§€κ²Œν•¨.

  5. 각각의 λ ˆμ΄λΈ”μ— λ§žλŠ” 순번의 ν•™μŠ΅ 데이터λ₯Ό red와 blue둜 λΆ„λ₯˜ν•˜κ³  ν‘œμ‹œ

  6. μ˜ˆμΈ‘μ— μ‚¬μš©ν•  μƒˆλ‘œμš΄ λ‚œμˆ˜λ₯Ό λ°œμƒν•˜κ³  μ΄ˆλ‘μƒ‰ μ›μœΌλ‘œ ν‘œμ‹œ

  7. SVM μ•Œκ³ λ¦¬μ¦˜ 객체λ₯Ό μƒμ„±ν•˜κ³  trainAuto()ν•¨μˆ˜ μ¨μ„œ ν›ˆλ ¨

  8. λͺ¨λΈ 객체 파일둜 μ €μž₯ν–ˆλ‹€κ°€ λ‹€μ‹œ μ½μ–΄λ“€μ΄λŠ” λͺ¨μŠ΅ 보여주기

  9. μƒˆλ‘œμš΄ λ‚œμˆ˜λ₯Ό μ˜ˆμΈ‘ν•˜κ³  κ·Έ κ²°κ³Όλ₯Ό μ½”λ“œμ— ν‘œκΈ°

μ‹€ν–‰κ²°κ³Ό