[Take1] 塊データ~テストデータの塊数を4にしてみる。
【書式】
X,y=make_blobs(
random_state=0, # ランダムの種
n_features=2, # 特徴量の数
centers=4, # 塊の数
cluster_std=1, # ばらつき
n_samples=600 # データ数
)
【コード】
%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.datasets import make_blobs
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
X,y=make_blobs(
random_state=0, # ランダムの種
n_features=2, # 特徴量の数
centers=4, # 塊の数
cluster_std=1, # ばらつき
n_samples=600 # データ数
)
# 学習用データとテスト用データに分ける
X_train, X_test, y_train, y_test=train_test_split(X, y, random_state=0)
# 学習モデルを作る
# 学習
model.fit(X_train, y_train)
# 予測:(-2,6)と(0,0)と(2,6)の3つの説明変数の分類を予測する
pred=model.predict([[-2,6],[0,0],[2,6]])
# 予測結果
print("(-2,6)の予測:",pred[0])
print("(0,0)の予測:",pred[1])
print("(2,6)の予測:",pred[2])
【結果】
(-2,6)の予測: 3
(0,0)の予測: 1
(2,6)の予測: 0
SVMの仕組みがよくわからないが、とりあえず結果は出た。
[Take1-1] [Take1]の結果を可視化する
予測結果の妥当性がめないので、可視化する。
教師データ散布図の中に予測データをプロットする
【書式】
plt.scatter([x座標],[y座標],color="色",marker="マーカタイプ",s=サイズ)
【コード】
%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.datasets import make_blobs
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
X,y=make_blobs(
random_state=0, # ランダムの種
n_features=2, # 特徴量の数
centers=4, # 塊の数
cluster_std=1, # ばらつき
n_samples=600 # データ数
)
# 学習用データとテスト用データに分ける
X_train, X_test, y_train, y_test=train_test_split(X, y, random_state=0)
# 学習モデルを作る
# 学習
model.fit(X_train, y_train)
# 予測:(-2,6)と(0,0)と(2,6)の3つの説明変数の分類を予測する
pred=model.predict([[-2,6],[0,0],[2,6]])
# 予測結果
print("(-2,6)の予測:",pred[0])
print("(0,0)の予測:",pred[1])
print("(2,6)の予測:",pred[2])
# X_test でdfを作り、テストデータの分類と予測結果の分類の列を追加する
df=pd.DataFrame(X_test)
df["target"]=y_test
# targetの種類ごとに異なるデータフレームを作る
df0=df[df['target']==0]
df1=df[df['target']==1]
df2=df[df['target']==2]
df3=df[df['target']==3]
# 散布図を描画する
plt.scatter(df0[0],df0[1],color="b",alpha=0.5)
plt.scatter(df1[0],df1[1],color="r",alpha=0.5)
plt.scatter(df2[0],df2[1],color="g",alpha=0.5)
plt.scatter(df3[0],df3[1],color="m",alpha=0.5)
# 予測データを重ねる
plt.scatter([-2],[6],color="m",marker="x",s=300)
plt.scatter([0],[0],color="r",marker="x",s=300)
plt.scatter([2],[6],color="b",marker="x",s=300)
plt.title("predict")
plt.show()
【結果】
(-2,6)の予測: 3
(0,0)の予測: 1
(2,6)の予測: 0
概ね教師データ近辺と同じ判定となっていた。
【書式】
X,y=make_moons(
random_state=500, # ランダムの種
noise=0.1, # ノイズ
n_samples=300 # データ数
)
【コード】
%matplotlib inline
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split
import pandas as pd
# 特徴量 X、分類 y のデータ作成
X,y=make_moons(
random_state=500, # ランダムの種
noise=0.1, # ノイズ
n_samples=300 # データ数
)
# 学習用データとテスト用データに分ける
X_train, X_test, y_train, y_test=train_test_split(X, y, random_state=0)
# 学習モデルを作る
# 学習
model.fit(X_train, y_train)
# 予測:(-1,1.25)と(0,0.5)と(2,3)の3つの説明変数の分類を予測する
pred=model.predict([[-1,1.25],[0,0.5],[2,3]])
# 予測結果
print("(-2,6)の予測:",pred[0])
print("(0,0)の予測:",pred[1])
print("(2,6)の予測:",pred[2])
【結果】
(-2,6)の予測: 0
(0,0)の予測: 1
(2,6)の予測: 0
結果の妥当性がよくわからないので、グラフ上にプロットしてみる。
【書式】
【コード】
%matplotlib inline
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split
import pandas as pd
# 特徴量 X、分類 y のデータ作成
X,y=make_moons(
random_state=500, # ランダムの種
noise=0.1, # ノイズ
n_samples=300 # データ数
)
# 学習用データとテスト用データに分ける
X_train, X_test, y_train, y_test=train_test_split(X, y, random_state=0)
# 学習モデルを作る
# 学習
model.fit(X_train, y_train)
# 予測:(-1,1.25)と(0,0.5)と(2,3)の3つの説明変数の分類を予測する
pred=model.predict([[-1,1.25],[0,0.5],[2,3]])
# X_test でdfを作り、テストデータの分類と予測結果の分類の列を追加する
df=pd.DataFrame(X_test)
df["target"]=y_test
# 分類ごとにデータフレームを分ける
df0=df[df["target"]==0]
df1=df[df["target"]==1]
# グラフの描画
plt.figsize=(5,5)
plt.scatter(df0[0],df0[1],color="b",alpha=0.5)
plt.scatter(df1[0],df1[1],color="g",alpha=0.5)
# 予測データを重ねる
plt.scatter([-1],[1.25],color="b",marker="x",s=300)
plt.scatter([0],[0.5],color="g",marker="x",s=300)
plt.scatter([2],[3],color="b",marker="x",s=300)
plt.show()
【結果】
教師データ近辺はそれらしいが、離れた点はどうとでも言えそう。
[Take2-3] 違う切り口でテストデータを作ってその結果を可視化する
【書式】
【コード】
%matplotlib inline
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split
import pandas as pd
# 特徴量 X、分類 y のデータ作成
X,y=make_moons(
random_state=500, # ランダムの種
noise=0.1, # ノイズ
n_samples=300 # データ数
)
# 学習用データとテスト用データに分ける
X_train, X_test, y_train, y_test=train_test_split(X, y, random_state=0)
# 学習モデルを作る
# 学習
model.fit(X_train, y_train)
# 予測:(x,y)=(0.5,-0.5),(0.5,0.0),(0.5,0.5),(0.5,1.0),(0.5,1.5)の分類を予測する
pred=model.predict([[0.5,-0.5],[0.5,0],[0.5,0.5],[0.5,1],[0.5,1.5]])
# 予測結果
print("(0.5,-0.5)の予測:",pred[0])
print("(0.5,0)の予測:",pred[1])
print("(0.5,0.5)の予測:",pred[2])
print("(0.5,1)の予測:",pred[3])
print("(0.5,1.5)の予測:",pred[4])
# X_test でdfを作り、テストデータの分類と予測結果の分類の列を追加する
df=pd.DataFrame(X_test)
df["target"]=y_test
# 分類ごとにデータフレームを分ける
df0=df[df["target"]==0]
df1=df[df["target"]==1]
# グラフの描画
plt.figsize=(5,5)
plt.scatter(df0[0],df0[1],color="b",alpha=0.5)
plt.scatter(df1[0],df1[1],color="g",alpha=0.5)
# 予測データを重ねる
# 分類の色は、予測結果を見たうえで設定した
plt.scatter([0.5],[-0.5],color="g",marker="x",s=300)
plt.scatter([0.5],[0.0],color="g",marker="x",s=300)
plt.scatter([0.5],[0.5],color="b",marker="x",s=300)
plt.scatter([0.5],[1.0],color="b",marker="x",s=300)
plt.scatter([0.5],[1.5],color="b",marker="x",s=300)
plt.show()
【結果】
(0.5,-0.5)の予測: 1
(0.5,0)の予測: 1
(0.5,0.5)の予測: 0
(0.5,1)の予測: 0
(0.5,1.5)の予測: 0
塊の周辺はそれらしく見える。
[Take2-4] 塊から離れた点の予測結果を眺める
今度は、緑の塊の右端を通る直線(x=2)で予測し、その結果を可視してみる
【書式】
【コード】
%matplotlib inline
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split
import pandas as pd
# 特徴量 X、分類 y のデータ作成
X,y=make_moons(
random_state=500, # ランダムの種
noise=0.1, # ノイズ
n_samples=300 # データ数
)
# 学習用データとテスト用データに分ける
X_train, X_test, y_train, y_test=train_test_split(X, y, random_state=0)
# 学習モデルを作る
# 学習
model.fit(X_train, y_train)
# 予測1:(x,y)=(0.5,-2.0),(0.5,-1.0),(0.5,0.0),(0.5,1.0),(0.5,2.0)の分類を予測する
pred=model.predict([[0.5,-2.0],[0.5,1.0],[0.5,0.0],[0.5,1.0],[0.5,2.0]])
# 予測2:(x,y)=(2.0,-2.0),(2.0,-1.0),(2.0,0.0),(2.0,1.0),(2.0,2.0)の分類を予測する
pred2=model.predict([[2.0,-2.0],[2.0,1.0],[2.0,0.0],[2.0,1.0],[2.0,2.0]])
# 予測結果
print("(0.5,-2.0)の予測:",pred[0])
print("(0.5,-1.0)の予測:",pred[1])
print("(0.5,0.0)の予測:",pred[2])
print("(0.5,1.0)の予測:",pred[3])
print("(0.5,2.0)の予測:",pred[4])
print("(2.0,-2.0)の予測:",pred2[0])
print("(2.0,-1.0)の予測:",pred2[1])
print("(2.0,0.0)の予測:",pred2[2])
print("(2.0,1.0)の予測:",pred2[3])
print("(2.0,2.0)の予測:",pred2[4])
# X_test でdfを作り、テストデータの分類と予測結果の分類の列を追加する
df=pd.DataFrame(X_test)
df["target"]=y_test
# 分類ごとにデータフレームを分ける
df0=df[df["target"]==0]
df1=df[df["target"]==1]
# グラフの描画
plt.figsize=(5,5)
plt.scatter(df0[0],df0[1],color="b",alpha=0.5)
plt.scatter(df1[0],df1[1],color="g",alpha=0.5)
# 予測データを重ねる
# 分類の色は、予測結果を見たうえで設定した
plt.scatter([0.5],[-2.0],color="g",marker="x",s=300)
plt.scatter([0.5],[-1.0],color="b",marker="x",s=300)
plt.scatter([0.5],[0.0],color="g",marker="x",s=300)
plt.scatter([0.5],[1.0],color="b",marker="x",s=300)
plt.scatter([0.5],[2.0],color="b",marker="x",s=300)
plt.scatter([2.0],[-2.0],color="g",marker="x",s=300)
plt.scatter([2.0],[-1.0],color="g",marker="x",s=300)
plt.scatter([2.0],[0.0],color="g",marker="x",s=300)
plt.scatter([2.0],[1.0],color="g",marker="x",s=300)
plt.scatter([2.0],[2.0],color="g",marker="x",s=300)
plt.show()
【結果】
(0.5,-2.0)の予測: 1
(0.5,-1.0)の予測: 0
(0.5,0.0)の予測: 1
(0.5,1.0)の予測: 0
(0.5,2.0)の予測: 0
(2.0,-2.0)の予測: 1
(2.0,-1.0)の予測: 1
(2.0,0.0)の予測: 1
(2.0,1.0)の予測: 1
(2.0,2.0)の予測: 1
微妙な結果だが流す。