[머신러닝] 벡터기(SVM) 지원에 관하여 가능한 한 이해하기 쉽게 ④~소프트 여분과 하드 여분의 설치를 정리합니다~
입문
이번 보도는 지난번 보도의 후속이다.
가능하다면 아래의 보도를 보십시오.
[머신러닝] 지원 벡터기(SVM)에 관하여 가능한 한 간단명료하게 정리 ①~이론과 공식편~
[머신러닝] 벡터기(SVM) 지원에 관하여 가능한 한 이해하기 쉽게 정리 ②~라그랑일의 미정승법~
[머신러닝] 지원 벡터기(SVM)에 관하여 가능한 한 간단명료하게 요약하기 ③~내핵법에 관하여~
분류 문제: 하드 이윤
분리 선형으로 데이터를 분리할 수 있는svm를 실현합니다.
사용한 데이터는 아이리스 데이터 집합입니다.
아이리스 데이터 세트 정보
아이리스 데이터는 아이리스 품종의 데이터입니다.
아이리스 품종Setosa
, Virginica
, Virginica
이 세 품종에 대한 데이터는 각각 50개로 모두 150개이다.
우리 안에 있는 내용을 실제로 봅시다.from sklearn.datasets import load_iris
import pandas as pd
iris = load_iris()
iris_df = pd.DataFrame(iris.data, columns=iris.feature_names)
print(iris_df.head())
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
3 4.6 3.1 1.5 0.2
4 5.0 3.6 1.4 0.2iris.feature_names
에 각 열의 이름을 저장하여 판다스의 Dataframe 매개 변수에 전달함으로써 상기 데이터와 같이 출력할 수 있습니다.Sepal Length
는 꽃잎의 길이, Sepal Width
는 꽃잎의 너비, Petal length
는 꽃잎의 길이, Petal Width
는 꽃잎의 너비의 데이터입니다.
다음 방법으로 정답 라벨을 표시할 수 있습니다.print(iris.target)
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2]
이렇게 하면 아이리스 품종setosa
, versicolor
, virginica
은 각각 0, 1, 2이다.
아이리스 데이터에 대한 설명은 여기까지입니다.
실시
다음 코드로 데이터 집합을 만듭니다.import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.svm import LinearSVC
from sklearn.datasets import load_iris
import mglearn
iris = load_iris()
X = iris.data[:100, 2:]
Y = iris.target[:100]
print(X.shape)
print(Y.shape)
(100, 2)
(100,)
이번 사용setosa
,versicolor
의petal length
와petal width
의 데이터를 분류합니다.
다음 코드를 사용하여 데이터를 그립니다.mglearn.discrete_scatter(X[:, 0], X[:, 1], Y)
plt.legend(['setosa', 'versicolor'], loc='best')
plt.show()
mglearn.discrete_scatter(X[:, 0], X[:, 1], Y)
의 코드는 첫 번째 파라미터는 X축, 두 번째 파라미터는 Y축, 세 번째 파라미터는 정해 라벨로 scatter 그림을 그린다.loc='best'
도표를 방해하지 않는 위치로 도례를 조정합니다.
위의 데이터에서 직선으로 분리할 수 있음을 뚜렷하게 알 수 있다.오히려 너무 쉬워요.
다음 코드를 사용하여 모델을 생성합니다.X_train, X_test, Y_train, Y_test = train_test_split(X, Y, stratify=Y, random_state=0)
svm = LinearSVC()
svm.fit(X_train, Y_train)
모델 생성 자체가 이 코드로 끝납니다.간단하네.
아래의 코드는 모델이 어떤 형상인지 설명한다.plt.figure(figsize=(10, 6))
mglearn.plots.plot_2d_separator(svm, X)
mglearn.discrete_scatter(X[:, 0], X[:, 1], Y)
plt.xlabel('petal length')
plt.ylabel('petal width')
plt.legend(['setosa', 'versicolor'], loc='best')
plt.show()
데이터의 경계선을 잘 분리하는 것을 확인할 수 있다.mglearn.plots.plot_2d_separator(svm, X)
의 부분은 이해하기 어려워서 해설을 한다.정의된 코드를 확인해 보세요.
plot_2d_separator(classifier, X, fill=False, ax=None, eps=None, alpha=1,cm=cm2, linewidth=None, threshold=None,linestyle="solid"):
분류 모델을 첫 번째 파라미터에 맡기고 원래의 데이터를 두 번째 파라미터에 맡기면 경계선의 함수를 그립니다.
이로써 svm모델은 선형 분리 가능한 문제의 실현이 끝났다.
분류 문제: 소프트 이윤
이번에 소프트웨어 이윤 문제에 대해 처리하다.import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.svm import LinearSVC
from sklearn.datasets import load_iris
import mglearn
iris = load_iris()
X = iris.data[50:, 2:]
Y = iris.target[50:] - 1
mglearn.discrete_scatter(X[:, 0], X[:, 1], Y)
plt.legend(['versicolor', 'virginica'], loc='best')
plt.show()
이번에는 versicolor
및 verginica
의 petal length
및 petal width
데이터를 그렸습니다.
완전 선형 분리는 불가능한 문제다.
여기서 소프트웨어 이윤의 공식을 복습하다.내보내기 여기 를 참조하십시오.min_{W, \xi}\Bigl\{\frac{1}{2}||W||^2 + C\sum_{i=1}^{N} \xi_i\Bigr\} \quad \quad
t_i(W^TX_i + b)\geq 1 - \xi_i\\
\xi_i = max\Bigl\{0, M - \frac{t_i(W^TX_i + b)}{||W||}\Bigr\}\\
i = 1, 2, 3, ... N
데이터가 여분의 안쪽으로 들어가기 때문에 $C\sum_{i=1}^{N}\xi_i$항목에 따라 제한을 완화했습니다.
이 C의 값은 기본적으로 1.0skleaarn
입니다.이 수치를 변화시켜 그림에 어떤 변화가 있는지 확인해 보세요.다음 코드는 매개 변수에 사용할 모델 경계를 그리는 함수를 정의합니다.def make_separate(model):
mglearn.plots.plot_2d_separator(svm, X)
mglearn.discrete_scatter(X[:, 0], X[:, 1], Y)
plt.xlabel('petal length')
plt.ylabel('petal width')
plt.legend(['setosa', 'versicolor'], loc='best')
plt.show()
다음 코드를 사용하여 도면을 그립니다.C=0.1
.X_train, X_test, Y_train, Y_test = train_test_split(X, Y, stratify=Y, random_state=0)
svm = LinearSVC(C=0.1)
svm.fit(X_train, Y_train)
make_separate(svm)
print(svm.score(X_test, Y_test))
0.96
다음은 C=1.0
.svm = LinearSVC(C=1.0)
svm.fit(X_train, Y_train)
make_separate(svm)
print(svm.score(X_test, Y_test))
1.0
다음은 C=100
.svm = LinearSVC(C=100)
svm.fit(X_train, Y_train)
make_separate(svm)
print(svm.score(X_test, Y_test))
1.0
적당한 C를 설정하는 것이 중요하다.여러 가지 변화를 하면서 상황을 보는 것이 좋다.
지금까지 소프트 이윤의 설치가 끝났다.
끝날 때
이번 보도는 이만 마치겠습니다.
고생하셨습니다.
가능하다면 다음 기사를 보십시오.
[머신러닝] 벡터 머신(SVM) 지원에 대해 가능한 한 이해하기 쉽게 정리 ⑤~ 커널 사용법의 분류 설치~
Reference
이 문제에 관하여([머신러닝] 벡터기(SVM) 지원에 관하여 가능한 한 이해하기 쉽게 ④~소프트 여분과 하드 여분의 설치를 정리합니다~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/renesisu727/items/3fbed61e3253934eb68e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
분리 선형으로 데이터를 분리할 수 있는svm를 실현합니다.
사용한 데이터는 아이리스 데이터 집합입니다.
아이리스 데이터 세트 정보
아이리스 데이터는 아이리스 품종의 데이터입니다.
아이리스 품종
Setosa
, Virginica
, Virginica
이 세 품종에 대한 데이터는 각각 50개로 모두 150개이다.우리 안에 있는 내용을 실제로 봅시다.
from sklearn.datasets import load_iris
import pandas as pd
iris = load_iris()
iris_df = pd.DataFrame(iris.data, columns=iris.feature_names)
print(iris_df.head())
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
3 4.6 3.1 1.5 0.2
4 5.0 3.6 1.4 0.2
iris.feature_names
에 각 열의 이름을 저장하여 판다스의 Dataframe 매개 변수에 전달함으로써 상기 데이터와 같이 출력할 수 있습니다.Sepal Length
는 꽃잎의 길이, Sepal Width
는 꽃잎의 너비, Petal length
는 꽃잎의 길이, Petal Width
는 꽃잎의 너비의 데이터입니다.다음 방법으로 정답 라벨을 표시할 수 있습니다.
print(iris.target)
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2]
이렇게 하면 아이리스 품종
setosa
, versicolor
, virginica
은 각각 0, 1, 2이다.아이리스 데이터에 대한 설명은 여기까지입니다.
실시
다음 코드로 데이터 집합을 만듭니다.
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.svm import LinearSVC
from sklearn.datasets import load_iris
import mglearn
iris = load_iris()
X = iris.data[:100, 2:]
Y = iris.target[:100]
print(X.shape)
print(Y.shape)
(100, 2)(100,)
이번 사용
setosa
,versicolor
의petal length
와petal width
의 데이터를 분류합니다.다음 코드를 사용하여 데이터를 그립니다.
mglearn.discrete_scatter(X[:, 0], X[:, 1], Y)
plt.legend(['setosa', 'versicolor'], loc='best')
plt.show()
mglearn.discrete_scatter(X[:, 0], X[:, 1], Y)
의 코드는 첫 번째 파라미터는 X축, 두 번째 파라미터는 Y축, 세 번째 파라미터는 정해 라벨로 scatter 그림을 그린다.loc='best'
도표를 방해하지 않는 위치로 도례를 조정합니다.위의 데이터에서 직선으로 분리할 수 있음을 뚜렷하게 알 수 있다.오히려 너무 쉬워요.
다음 코드를 사용하여 모델을 생성합니다.
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, stratify=Y, random_state=0)
svm = LinearSVC()
svm.fit(X_train, Y_train)
모델 생성 자체가 이 코드로 끝납니다.간단하네.아래의 코드는 모델이 어떤 형상인지 설명한다.
plt.figure(figsize=(10, 6))
mglearn.plots.plot_2d_separator(svm, X)
mglearn.discrete_scatter(X[:, 0], X[:, 1], Y)
plt.xlabel('petal length')
plt.ylabel('petal width')
plt.legend(['setosa', 'versicolor'], loc='best')
plt.show()
데이터의 경계선을 잘 분리하는 것을 확인할 수 있다.
mglearn.plots.plot_2d_separator(svm, X)
의 부분은 이해하기 어려워서 해설을 한다.정의된 코드를 확인해 보세요.plot_2d_separator(classifier, X, fill=False, ax=None, eps=None, alpha=1,cm=cm2, linewidth=None, threshold=None,linestyle="solid"):
분류 모델을 첫 번째 파라미터에 맡기고 원래의 데이터를 두 번째 파라미터에 맡기면 경계선의 함수를 그립니다.
이로써 svm모델은 선형 분리 가능한 문제의 실현이 끝났다.
분류 문제: 소프트 이윤
이번에 소프트웨어 이윤 문제에 대해 처리하다.
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.svm import LinearSVC
from sklearn.datasets import load_iris
import mglearn
iris = load_iris()
X = iris.data[50:, 2:]
Y = iris.target[50:] - 1
mglearn.discrete_scatter(X[:, 0], X[:, 1], Y)
plt.legend(['versicolor', 'virginica'], loc='best')
plt.show()
이번에는
versicolor
및 verginica
의 petal length
및 petal width
데이터를 그렸습니다.완전 선형 분리는 불가능한 문제다.
여기서 소프트웨어 이윤의 공식을 복습하다.내보내기 여기 를 참조하십시오.
min_{W, \xi}\Bigl\{\frac{1}{2}||W||^2 + C\sum_{i=1}^{N} \xi_i\Bigr\} \quad \quad
t_i(W^TX_i + b)\geq 1 - \xi_i\\
\xi_i = max\Bigl\{0, M - \frac{t_i(W^TX_i + b)}{||W||}\Bigr\}\\
i = 1, 2, 3, ... N
데이터가 여분의 안쪽으로 들어가기 때문에 $C\sum_{i=1}^{N}\xi_i$항목에 따라 제한을 완화했습니다.이 C의 값은 기본적으로 1.0
skleaarn
입니다.이 수치를 변화시켜 그림에 어떤 변화가 있는지 확인해 보세요.다음 코드는 매개 변수에 사용할 모델 경계를 그리는 함수를 정의합니다.def make_separate(model):
mglearn.plots.plot_2d_separator(svm, X)
mglearn.discrete_scatter(X[:, 0], X[:, 1], Y)
plt.xlabel('petal length')
plt.ylabel('petal width')
plt.legend(['setosa', 'versicolor'], loc='best')
plt.show()
다음 코드를 사용하여 도면을 그립니다.C=0.1
.X_train, X_test, Y_train, Y_test = train_test_split(X, Y, stratify=Y, random_state=0)
svm = LinearSVC(C=0.1)
svm.fit(X_train, Y_train)
make_separate(svm)
print(svm.score(X_test, Y_test))
0.96다음은
C=1.0
.svm = LinearSVC(C=1.0)
svm.fit(X_train, Y_train)
make_separate(svm)
print(svm.score(X_test, Y_test))
1.0다음은
C=100
.svm = LinearSVC(C=100)
svm.fit(X_train, Y_train)
make_separate(svm)
print(svm.score(X_test, Y_test))
1.0적당한 C를 설정하는 것이 중요하다.여러 가지 변화를 하면서 상황을 보는 것이 좋다.
지금까지 소프트 이윤의 설치가 끝났다.
끝날 때
이번 보도는 이만 마치겠습니다.
고생하셨습니다.
가능하다면 다음 기사를 보십시오.
[머신러닝] 벡터 머신(SVM) 지원에 대해 가능한 한 이해하기 쉽게 정리 ⑤~ 커널 사용법의 분류 설치~
Reference
이 문제에 관하여([머신러닝] 벡터기(SVM) 지원에 관하여 가능한 한 이해하기 쉽게 ④~소프트 여분과 하드 여분의 설치를 정리합니다~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/renesisu727/items/3fbed61e3253934eb68e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여([머신러닝] 벡터기(SVM) 지원에 관하여 가능한 한 이해하기 쉽게 ④~소프트 여분과 하드 여분의 설치를 정리합니다~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/renesisu727/items/3fbed61e3253934eb68e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)