반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

bro's coding

sklearn.svm.LinearSVC.kernel 기법(타원형 데이터) 본문

[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()

반응형
Comments