svm 모듈의 SVC에 대해 (수학은 제외)
9118 단어 파이썬svm.svcscikit-learn
12/19의 문장을 써 갑니다.
오늘은 일이 있어서 늦어졌어요. . .
오늘은 어제 공부한 직선 SVC 모델의 분류를 정리해 가겠습니다.
분류 목적
위 사진을 보세요.
분류는 이 파란색 점과 오렌지 버트를 분리하는 선을 자동으로 찾는 것입니다.
2차원이라면 인간에게 매우 간단하죠?
SVC 모델은 고차원의 경우라도 나누기 위한 식을 요구할 수 있기 때문에 굉장하네요.
자, 이것이 무엇에 도움이됩니까? 라고 생각하는 분도 많을 것입니다.
아래 이미지는 어떻습니까?
차이를 알았습니까?
그래, G 메일에서는 당연한 것처럼 스팸 메일을 연주해 줍니다만, 이것은 AI의 힘입니다. (알고리즘은 더 복잡합니다.)
하지만 하고 있는 일은 같고, 어느 직선(면)을 당겨 스팸인지 유효한 메일인지를 분석하고 있습니다.
아름답고 굉장합니다.
글쎄, 오늘의 최종 목적 이미지를 보여줍니다.
다음이됩니다.
⚠︎주의하고 싶을 수 있습니다.
이 예제의 경우라면 무한한 선을 그릴 수 있다고 말하는 것입니다.
따라서, 이 점선의 폭(병합)이 제일 넓어진 다음, 그 중간에 실선(결정 경계)을 그립니다.
이제 이 결정 경계를 구하기 위한 코드를 살펴보겠습니다.
샘플 코드
import numpy as np
from sklearn.svm import SVC
import matplotlib.pyplot as plt
xmin = 0
xmax = 2
ymin = 0
ymax = 2
# 0 ~ 1 までの正規分布に従った値が入った(100行2列(X&Y))の行列を作成
X0 = np.random.uniform(size=(100, 2))
y0 = np.repeat(0, 100)
X1 = np.random.uniform(low=1.0, high=2.0, size=(100, 2))
y1 = np.repeat(1, 100)
svc = SVC(kernel='linear', C=1e8)
# 学習
# svc.fit(train_features, train_labels)
svc.fit(np.vstack((X0, X1)), np.hstack((y0, y1)))
fig, ax = plt.subplots()
# ax.scatter(x, y) 散布図
ax.scatter(X0[:, 0], X0[:, 1], marker='o', label='class 0')
ax.scatter(X1[:, 0], X1[:, 1], marker='x', label='class 1')
# 格子点を準備
xx, yy = np.meshgrid(np.linspace(xmin, xmax, 100), np.linspace(ymin, ymax, 100))
# decision_functionの為に一つの行列に。
xy = np.vstack([xx.ravel(), yy.ravel()]).T
# 100 * 100 の行列。
# z = x*2 + y*2 とする部分のzの高さの部分。
# svcの決定関数を使ってxyという格子点からzを求めている。
z = svc.decision_function(xy).reshape((100, 100))
# 決定境界とマージンをプロット
ax.contour(xx, yy, z, colors='k', levels=[-1, 0, 1], alpha=0.3, linestyles=['--', '-', '--'])
plt.show()
흐름으로서는
1. 데이터 준비
2. SVC의 인스턴스 생성
3. 입력 데이터를 그것을 부착시킨 라벨을 fit 함수에 넣는 것으로 학습시킨다.
4. 격자점 생성( 참고 기사 )
5. Z를 fit으로 배운 decision_function을 사용하여 작성
6. contour를 사용하여 등고선을 그리면 결정 경계를 쓸 수 있습니다.
중요한 함수는 fit과 decition_funkction이다.
fit의 사용법은 이해했지만, decision_function 쪽은 분류기를 이용해 Z를 요구하는 정도밖에 이해할 수 없다.
그것은 좀 더 공부가 진행되어 기사로 하려고 한다.
오늘은 밤이 늦기 때문에 이 정도로.
잘자.
Reference
이 문제에 관하여(svm 모듈의 SVC에 대해 (수학은 제외)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mitsumizo/items/19b1fc1810fabb3cedfd
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import numpy as np
from sklearn.svm import SVC
import matplotlib.pyplot as plt
xmin = 0
xmax = 2
ymin = 0
ymax = 2
# 0 ~ 1 までの正規分布に従った値が入った(100行2列(X&Y))の行列を作成
X0 = np.random.uniform(size=(100, 2))
y0 = np.repeat(0, 100)
X1 = np.random.uniform(low=1.0, high=2.0, size=(100, 2))
y1 = np.repeat(1, 100)
svc = SVC(kernel='linear', C=1e8)
# 学習
# svc.fit(train_features, train_labels)
svc.fit(np.vstack((X0, X1)), np.hstack((y0, y1)))
fig, ax = plt.subplots()
# ax.scatter(x, y) 散布図
ax.scatter(X0[:, 0], X0[:, 1], marker='o', label='class 0')
ax.scatter(X1[:, 0], X1[:, 1], marker='x', label='class 1')
# 格子点を準備
xx, yy = np.meshgrid(np.linspace(xmin, xmax, 100), np.linspace(ymin, ymax, 100))
# decision_functionの為に一つの行列に。
xy = np.vstack([xx.ravel(), yy.ravel()]).T
# 100 * 100 の行列。
# z = x*2 + y*2 とする部分のzの高さの部分。
# svcの決定関数を使ってxyという格子点からzを求めている。
z = svc.decision_function(xy).reshape((100, 100))
# 決定境界とマージンをプロット
ax.contour(xx, yy, z, colors='k', levels=[-1, 0, 1], alpha=0.3, linestyles=['--', '-', '--'])
plt.show()
흐름으로서는
1. 데이터 준비
2. SVC의 인스턴스 생성
3. 입력 데이터를 그것을 부착시킨 라벨을 fit 함수에 넣는 것으로 학습시킨다.
4. 격자점 생성( 참고 기사 )
5. Z를 fit으로 배운 decision_function을 사용하여 작성
6. contour를 사용하여 등고선을 그리면 결정 경계를 쓸 수 있습니다.
중요한 함수는 fit과 decition_funkction이다.
fit의 사용법은 이해했지만, decision_function 쪽은 분류기를 이용해 Z를 요구하는 정도밖에 이해할 수 없다.
그것은 좀 더 공부가 진행되어 기사로 하려고 한다.
오늘은 밤이 늦기 때문에 이 정도로.
잘자.
Reference
이 문제에 관하여(svm 모듈의 SVC에 대해 (수학은 제외)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mitsumizo/items/19b1fc1810fabb3cedfd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)