上記記事の続きになります。
#教師データに使うので感覚的な分類で行う
#手で分類する
train_y=np.array([0 for i in range (N)])
train_y[2]=train_y[3] =train_y[4]=train_y[5] =train_y[6]=train_y[11] =1
#赤=1 青= 0 に設定し再度描画
colors =['blue','red']
for i in range(len(train_X)):
plt.plot(train_X[i][0],train_X[i][1],'o',color=colors[train_y[i]])
plt.anotate(i,(train_X[i][0],train_X[i][1],size=20)
#テストデータができたので教師データを作る 前のセルをコピー&ペースト 座標を作る(30,60)を設定
#分類したものを描画する
colors =['blue','red']
for i in range(len(train_X)):
plt.plot(train_X[i][0],train_X[i][1],'o'(アイコンのマークの形 この場合〇),color=colors[train_y[i]])
plt.anotate(i,(train_X[i][0],train_X[i][1],size=20)
#テストデータ、0か1かどっちだろう?
test_X=np.array(30,60)
#test_Xを描画する
plt.plot(test_X[0][0],test_X[0][1],'x'(アイコンのマークの形 この場合ⅹ),color='black')
plt.annotate('test',(test_X[0][0],test_X[0][1],size=20)
#Run を押して実行
OUT: Text(30,60,'test')
# test はblueの0に分類されてほしい ここまでで教師データとテストデータ完成 SVMでの学習の準備ができた ここまでの内容を次のセルにコピー&ペースト
#分類したものを描画する
colors =['blue','red']
for i in range(len(train_X)):
plt.plot(train_X[i][0],train_X[i][1],'o',color=colors[train_y[i]])
plt.anotate(i,(train_X[i][0],train_X[i][1],size=20)
#テストデータ、0か1かどっちだろう?
test_X=np.array(30,60)
#test_Xを描画する
plt.plot(test_X[0][0],test_X[0][1],'x',color='black')
plt.annotate('test',(test_X[0][0],test_X[0][1],size=20)
#scikitlearn svmでは svcを使うと分類問題のモデルを使うことができる パラメータとgamma とCがあるがひとまずgamma0.0001 Cは1に設定
clf = svm.SVC(gamma=0.0001,C=1)
clf.fit(train_X,train_y)
#Run
#たった2行で学習完了
#テストデータをpredictで分類
#分類 下記コードを追加で記載(clf.fitの後)
test_y =clf.predict(test_X)
test_y
#Run
Out: array(0)
#test_y の内容が0になっているため、blueの側に分類されている Test Xをblueに分類できたので青色で描画しなおす 次のセルにコピー&ペースト
##############################################################
#Test_Xを描画する 部分 と 最後の一行をコメントアウト
更にtest_y を描画するコードを記載していく colorsを使い番号に対応する色を取り出していく
#分類したものを描画する
colors =['blue','red']
for i in range(len(train_X)):
plt.plot(train_X[i][0],train_X[i][1],'o',color=colors[train_y[i]])
plt.anotate(i,(train_X[i][0],train_X[i][1],size=20)
#テストデータ、0か1かどっちだろう?
# test_X=np.array(30,60)
test_X = np.array([[30,60],[90,90],[50,50],[60,40]])
#test_Xを描画する
#plt.plot(test_X[0][0],test_X[0][1],'x',color='black')
#plt.annotate('test',(test_X[0][0],test_X[0][1],size=20)
#学習する
clf = svm.SVC(gamma=0.0001,C=1)
clf.fit(train_X,train_y)
#分類する
test_y =clf.predict(test_X)
#test_y
#test_yを描画する colorsを使い番号に対応する色を取り出していく
for i in range(len(test_X)):
plt.plot(test_X[i][0],test_X[i][1],'x',color=colors[test_y[i]])
plt.annotate('test',(test_X[i][0],test_X[i][1]),size=20)
#更に教師データを追加 新たに3つの座標追加 (緑の太字部分を追加しました)
追加した座標もそれぞれblue redに分類された
#決定境界を描画
x=np.linspace(0,100,30)
y=np.linspace(0,100,30)
yy,xx =np.meshgrid(y,x)
xy = np.vstack([xx.ravel(),yy.ravel()]).T
p=clf.decision_function(xy).reshape(xx.shape)
plt.contour(xx,yy,P,colors='k',
levels=[0],alpha=0.5,
linestyles=['_'])
#red blueの間に境界線が引かれる
#gammaを0.001から0.1に変更してみる(赤字の部分を変更)
#gammaの数値が大きくなると決定境界がより複雑な形になる(円っぽくなったり)
分類の精度が悪いときにgammaの値を変更すると精度が向上することがある
このチャプターでは2次元座標のデータを作りSVMで分類を行った。 テストデータからちょうど良い境界を予測し分類するSVMのイメージがついた
音声データの分類では2次元以上の大きなデータにも対応
SVMでは2次元以上同じように対応 1以上への分類も対応
チャプター2では話者認識の要である音声データについて
これで動画学習は終了しました。
その後、演習課題があります。
演習課題は簡単なのですが何かの方法がpaiza流で言うとダメらしく 「これ合ってるのでは?」という回答でも1回目は必ずパスできません
paiza特有の仕様ですが分からない内は分からないのでいまだにこの謎は私の中では解決していません
しかし無事パスできました
ブログを記載しながらするとじっくり理解しながら勉強できるので良さそうです
分からない単語が最後部分ちらほらありますが後々調べて記載したいと思います