Python×医療事務(×トロント)

#医療 / #医療事務 / #IT / #トロント / #歯科助手 / #のんびり / #備忘録 / #趣味

Paiza で期間限定で Python×AI 機械学習入門が無料だったのでしてみた チャプター2 ②

chocolate22554.hatenablog.com

 

上記記事の続きになります。

 

#教師データに使うので感覚的な分類で行う 

#手で分類する

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)

 f:id:chocolate22554:20200903104047p:plain

#テストデータができたので教師データを作る 前のセルをコピー&ペースト 座標を作る(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')

f:id:chocolate22554:20200906122955p:plain

  # 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

f:id:chocolate22554:20200906130715p:plain

 

#たった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つの座標追加  (緑の太字部分を追加しました)

f:id:chocolate22554:20200906194746p:plain

追加した座標もそれぞれblue redに分類された

 

f:id:chocolate22554:20200906194830p:plain

#決定境界を描画

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=['_'])

f:id:chocolate22554:20200906195552p:plain

#red  blueの間に境界線が引かれる

#gammaを0.001から0.1に変更してみる(赤字の部分を変更)

f:id:chocolate22554:20200906195703p:plain

#gammaの数値が大きくなると決定境界がより複雑な形になる(円っぽくなったり)

f:id:chocolate22554:20200906195750p:plain

分類の精度が悪いときにgammaの値を変更すると精度が向上することがある

 

このチャプターでは2次元座標のデータを作りSVMで分類を行った。 テストデータからちょうど良い境界を予測し分類するSVMのイメージがついた

 

音声データの分類では2次元以上の大きなデータにも対応

SVMでは2次元以上同じように対応 1以上への分類も対応

 

チャプター2では話者認識の要である音声データについて

 

これで動画学習は終了しました。

その後、演習課題があります。

 

演習課題は簡単なのですが何かの方法がpaiza流で言うとダメらしく 「これ合ってるのでは?」という回答でも1回目は必ずパスできません

paiza特有の仕様ですが分からない内は分からないのでいまだにこの謎は私の中では解決していません

しかし無事パスできました

 

ブログを記載しながらするとじっくり理解しながら勉強できるので良さそうです

分からない単語が最後部分ちらほらありますが後々調べて記載したいと思います