[AI]/python.sklearn
sklearn.svm.LinearSVC.kernel 기법(타원형 데이터)
givemebro
2020. 4. 16. 12:51
반응형
https://broscoding.tistory.com/145
머신러닝.make_circles 사용하기
import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.datasets import make_circles X,y=make_circles(factor=0.5,noise=0.1) # factor = R2/R1, noise= std) plt.scatter(X[:,..
broscoding.tistory.com
X,y=make_circles(factor=0.5,noise=0.1)
X=X*[1,0.5]
X=X+1
plt.scatter(X[:,0],X[:,1],c=y)
plt.vlines([1],-0,2,linestyles='dotted')
plt.hlines([1],-0,2,linestyles='dotted')

X_new=np.c_[X,X[:,0]**2,X[:,1]**2]
from sklearn.svm import LinearSVC
model=LinearSVC(C=10)
model.fit(X_new,y)
model.score(X_new,y)
# 0.98
model.intercept_,model.coef_
#(array([-7.20235563]),
#array([[ 4.52048849, 12.62884898, -2.30270137, -6.41273581]]))
# w1*x1+w2*x2+w3*x1^2+w4*x2^2=0
# 위 식을 완전 제곱식으로 변환 하면, 중점이 1,1임을 확인 할 수 있다.
# 시각화
# scale 설정
scale=300
# x,y 범위 설정
xmax=X_new[:,0].max()+0.1
xmin=X_new[:,0].min()-0.1
ymax=X_new[:,1].max()+0.1
ymin=X_new[:,1].min()-0.1
# 좌표 세팅
# 최대에서 최소까지 스케일수로 나눔
xx=np.linspace(xmin,xmax,scale)
yy=np.linspace(ymin,ymax,scale)
# 위에서 나눈 데이터를 가지고 벡터를 만듬
data1,data2=np.meshgrid(xx,yy)
# 데이터들을 1차원으로 바꿔 열로 추가
X_grid=np.c_[data1.ravel(),data2.ravel()]
# x_grid의 각 열에 대한 제곱값을 열로 추가
X_grid=np.c_[X_grid,X_grid[:,0]**2,X_grid[:,1]**2]
pred_y=model.predict(X_grid)
CS=plt.imshow(pred_y.reshape(scale,scale),interpolation=None,origin='lower',extent=[xmin,xmax,ymin,ymax],alpha=0.3,cmap='gray_r')
plt.scatter(X[:,0],X[:,1],c=y,s=60)
plt.colorbar()

반응형