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

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

スティック型PC

病院の液晶にスティック型PCが挿されており なんだろうと思いながら調べたことがありませんでした
今日 Amazonでたまたまスティック型PCの商品を見つけググったらこんな記事を見つけました

https://www.dospara.co.jp/5info/cts_lp_stick_pc_guide

パソコン買わなくてもテレビがあれば安く大型 PCに出来るのでは?!と新たな発見でした

こちらではlogicoolの無線キーボードも使えると記載があり画期的だなと思います

自分のPCのキーボードが打てなくなり無線キーボードを探し中なので検討したいと思います

このような記事もいつか書きたいなぁと思います

paiza Flask入門 チャプター2 してみた +フレームワークについて+ライブラリについて+MVCモデルについて+コマンドについて

WEBサービス開発

インターネットを利用してサービスを提供

サーバーを導入してプログラムを公開

サーバー環境の構築、Linuxの操作、サーバー言語の学習、セキュリティ、フロントエンドの知識など

このような実態を少しでも軽減できるのがフレームワークの存在。FirebaseやHerokuのようなサービスを組み合わせればサーバーの導入も簡略化できる。

Flask=Webフレームワーク=Webアプリを開発するために必要な機能が詰まったパッケージ、Webアプリケーションの土台、家で言うと木材の枠組み。=雛形ができていて自分のコードでカスタマイズする

Webフレームワークに近い考え方として「ライブラリ」というものある。

ライブラリ=よく使う機能や自分で実装することが面倒なものを「パッケージ化」して使用する「部品」。いくつかのライブラリは、フレームワークに予め実装されています

 

MVCモデルとは!概念やそのメリットをわかりやすく解説! | Geekly Media

MVC は、Webフレームワークで一般的に取り入れられているアプリケーション設定を整理するための概念の一つです。

モデル(Model)頭文字「M」、ビュー(View)頭文字「V」、コントローラー(Controller)頭文字「C」で「MVCと言います。

【モデル】

システム内のビジネスロジックを担当します。システムの設計や機能をどうするかがここで行われます。

 

【ビュー】

実際に表示したり、入力する機能の処理を行うのがビューです。

 

【コントローラー】

コントローラーは、ユーザーの入力に基づきモデルとビューを制御する役割を担っています。「クライアント」「モデル」「ビュー」の橋渡し役となります。

f:id:chocolate22554:20200927085301p:plain

Pwd=(print working directory)  現在位置の表示

Ls=list  ディレクトリの中にあるファイル一覧を表す

Python-V→Pythonのバージョンを確認する

mk(make,create) dir(directoryディレクトリ=ファイルフォルダのこと)=myapp ディレクトリを作るということ

cd (change directory)myapp=  myapp フォルダに移動する

 _______________________________________________________________________________________

コマンドの使い方(progateの英語版を使っていたので分かりにくいところあると思います。編集中)

Display about.txt

~ $ cat about.txt

 

Display beginner.txt

~ $ cat beginner.txt

dir

dirと入力するだけで、カレントディレクトリにあるファイルやフォルダーの一覧が表示されます。また、「dir パス」とすることで、指定したパスに含まれるファイルなどを表示することも可能です。

Pwd=print working directory  現在位置

cd..  or  ..    cdのみ= move to parent directory

moveで移動のコマンド。名前を変えるときにも使う。cpと同じくファイル、ディレクトリに関する重要コマンド。

mv+textの名前 

Mv +directoryのname 

名前を変える= mv old_filename   new_filename

ディレクトリ同士、file同士しかできない

Text copy= cp copy_original  new_filename

Directory copy= cp –r copy_original  new_name

Remove file=  rm  file\name

Remove directory=  rm –r  directory\name

Create fille= touch  file_name(書いた数だけ作成される)

Diseplay content of a file= cat file_name

 

マイナー?なコマンド⇩

tree

dirと似ていますが、ディレクトリ構造をグラフィカルなツリーで表示することができます。

type

テキストファイルの内容を確認するコマンドです。

type ファイル名」とすると、ファイルの内容が出力されます。

ren

ファイル名を変更する際に利用します。「ren 対象のファイル名 新しいファイル名」とすることで変更可能です。

 

prog-8.com

https://eng-entrance.com/linux_command_mv

上のURLは消えてしまっているようです

______________________________________________________________________________________________

f:id:chocolate22554:20200927090044p:plain

my app フォルダを右クリック→新規ファイル→コードを記述していく

f:id:chocolate22554:20200927090325p:plain

@の部分はpythonの デコレータ という機能

ターミナルで起動させる

f:id:chocolate22554:20200927090436p:plain

(~/my app$)FLASK_APP=hello.py flask run  と記載しエンターを押すと上記画像のようにWEBアプリが起動する

f:id:chocolate22554:20200927090649p:plain

ブラウザを呼び出しローカルホストのポート500にアクセス

f:id:chocolate22554:20200927090808p:plain

コントロール+Cで一旦サーバを停止 表示するメッセージを変更するためにテキストを開き hello worldをhello pythonに変更

f:id:chocolate22554:20200927091039p:plain

動作確認。 再起動しないでいいようにデベロップモードで表示する。ターミナルにて入力エンター

f:id:chocolate22554:20200927091312p:plain

ブラウザを更新するとメッセージが変わる

 

paiza Web技術の基本 無料のみやってみた

paiza.jp

 

f:id:chocolate22554:20200924113301p:plain

f:id:chocolate22554:20200924113332p:plain

多数のクライアントに対して少数のサーバが対応するf:id:chocolate22554:20200924113427p:plain

クライアント=主人  サーバー=従者

サーバーは役割ごとに存在する クライアントはユーザーに合わせて様々な役割

WEBサーバーとブラウザも同じような関係

 

インターネットでは膨大なユーザーがスマートフォンやネットでブラウザでネットに接続し世界中のWEBサーバーに接続している

 

f:id:chocolate22554:20200924114052p:plain

クライアントであるWebサーバーとブラウザがデーターをやり取りする手段

WebページはHTTPを基準にやり取りする

f:id:chocolate22554:20200924114119p:plain

 

Webサーバーごとにブラウザを用意しないといけなくなるため 技術的な標準ルールで標準化されている

そのため、1つのブラウザですべてWebページを表示できる・開発者やデザイナーはHTMLを覚えるだけですべてのWebページを作れるようになる

 

f:id:chocolate22554:20200924115207p:plain

paiza.jp

URIとはリソース(資源)を指定する

f:id:chocolate22554:20200924115629p:plain

://  はhttpのオプション


f:id:chocolate22554:20200924115934p:plain

メールアドレスでも使われている  全世界で統一されている

f:id:chocolate22554:20200924121427p:plain

通常はこのポート番号を省略する。

1つのコンピューター上で2つのサーバーアプリケーションが稼働している場合にはそれぞれのポート番号を指定する jangoやRuby on rails等のWebアプリケーションフレームワークの講座では複数のサーバーが動作していたのでポート番号を指定する

f:id:chocolate22554:20200924122632p:plain

単純なWebサーバーでは静的なファイルの位置を表しているので、シェルコマンドで指定するファイルと同じように記述できる。Webフレームワーク等を利用した高度なWebサーバーではファイル構成と完全には一致していないがデータ構成等に合わせた分かりやすいパスを利用する

f:id:chocolate22554:20200924123038p:plain

&記号で区切り複数のパラメータを渡せる keyと値のセットになっておりkeyがパラメータ名になっている

f:id:chocolate22554:20200924123300p:plain

htmlでanchorタブやIT属性を指定しておくとフラグメントでWeb上の特定の位置にジャンプできる

 

paiza.jp

 

f:id:chocolate22554:20200924124107p:plain

f:id:chocolate22554:20200924124326p:plain

このようなHTMLもURIやHTTPと同じように標準化されている 標準規格の内容は少しずつ成長しているがどのブラウザでもある程度同じように表示できるように日々努力が続けられている

f:id:chocolate22554:20200924124819p:plain

紙のページは手動で探す。ハイパーテキスト検索をするとそれに関連づいたページを表示、ハイパーテキストはそれをWebページで実現させるための物。

 

見出しにリンクを追加

<a href='index.php'></a>

paiza.jp

 

f:id:chocolate22554:20200924132442p:plain

親要素のコンテントに子要素が入っていないといけない。入れ子=ネスト(nest?)とも呼ぶf:id:chocolate22554:20200924132534p:plain

f:id:chocolate22554:20200924132725p:plain
特定の位置に何か挿入、埋め込むために使用

f:id:chocolate22554:20200924132851p:plain

属性=attribute  ここではリンク先のアドレスを属性として表示。 属性値は「’」か「”」で囲む

 

paiza.jp

f:id:chocolate22554:20200924133928p:plain

f:id:chocolate22554:20200924133952p:plain

f:id:chocolate22554:20200924134048p:plain

アフィリエイト作業の効率も可能  この他、Facebooktwitter そして機械学習のためのAPIもある。

API=ソフトウェアやアプリケーションなどの一部を外部に向けて公開することにより、第三者が開発したソフトウェアと機能を共有できるようにしてくれるもの

f:id:chocolate22554:20200924134303p:plain

組み合わせによって高度なwebサービスを提供できるかも=マッシュアップ

提供側は、APIの連携前に必ずユーザーの承諾を得る必要がある。ユーザー側も連携サービスを使うにはユーザー情報が共有されることを許可する必要がある。(どの情報が共有されるか、などはサービスにより異なる。)

WEBAPIを使うときに、APIキー(アクセスキー)・APIシークレットキー利用の注意が必要。APIキーはログインの際のID名にあたる部分、APIシークレットはパスワードのようなもの。

f:id:chocolate22554:20200924134421p:plain

システム開発を分離できる

システム開発を分離しないと、相手側がAPIを変更したら自分もAPIを呼び出すプログラム変更しないといけない。APIが固定していたら Webサービスが独立し変更等できる。

コンポーネント毎にAPIを用意しシステムが分離されている=マイクロ?サービス

f:id:chocolate22554:20200924134840p:plain

スケーラビリティを確保=拡張しやすくなる

JSON+の記載→HTTPで送受信できたりする

多くのプログラミン言語で採用されている この2つを理解していれば新しいWebAPIを利用し始める時も学習の手間を大きく省ける

paiza.jp

f:id:chocolate22554:20200924135334p:plain

f:id:chocolate22554:20200924135417p:plain

f:id:chocolate22554:20200924135446p:plain

f:id:chocolate22554:20200924135734p:plain

f:id:chocolate22554:20200924135804p:plain

 

f:id:chocolate22554:20200924135837p:plain

❶クライアント/サーバモデル=WEbアクセス
ステートレスもhttp特徴の1つだった

➋httpのget、  post メソッドのこと。少数のメソッドを定義することでシステムをシンプルに。

❸これがWebアクセスのURIに対応している。URIを利用することでWebサービス内に膨大なメソッドがあっても他のリソースと区別して利用できる

 

Restの原則に沿ったWebAPIを レストフルなWebAPIという。柔軟で拡張性の高いWebサービスを作ることができる

⇩レストフルでない例

f:id:chocolate22554:20200924140536p:plain

パスでbbs.phpを呼び出しクエリで掲示板の動作をcommandとして呼び出す。しかしJavaで書き直すとbbsphpが変わってしまう。記事一覧でなく投稿者一覧を取り出すときは全く違うURLを紹介しなくてはいけない。記事を紹介したくてもURIが変わると紹介リンクも書き換えなくてはいけない。 webサービスのリソースを表す統一的な方式を持たないとこのような事態起こる

⇩レストの原則に沿った場合

f:id:chocolate22554:20200924141140p:plain

bbsphpの代わりにbbsというパスにアクセスしている これでURIは特定のプログラミング言語に依存しなくなった また記事の一覧にアクセスする際はarticlesでアクセス、編集フォームはeditで呼び出す。個別の記事→GETメソッド 記事の更新→POSTメソッドでアクセス。投稿者情報にアクセスしたい際はarticleの代わりにuser 、記事のカテゴリならcategory

f:id:chocolate22554:20200924141947p:plain

リソース=記事(掲示板で) HTMLのフォームはGET・POSTしか対応していない、そのためPUT・DELETEはPOSTメソッドで代用する

 

 

~感想~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

無料分は終了しました

勉強してきたからこそですが内容がすんなり入ってきました

以前もしたことありますがあまり頭に入ってこなかったです

声優さんの声の特徴と 私自身が前知識がないのでところどころ聞き取れていない可能性が・・その部分は?をつけています。

 

 

一部参照しました

https://www.sejuku.net/blog/87955?cid=top_87955_introduction

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

SMCF使用していく

 

短時間フーリエ変換を利用し音声の各時間に対応したパワースペクトルを取得し特徴量として使用する

このようなパワースペクトルの時間変化の情報はパワースペクトグラムと呼ぶ

前回のチャプターのコードを短時間フーリエ変換に対応させていく

 

各インポート文を(Runで)実行

f:id:chocolate22554:20200922110632p:plain

特徴量を返すget_featが短時間フーリエ変換から得られたパワースペクトグラムを返すようにする

f:id:chocolate22554:20200922111001p:plain

通常のフーリエ変換のコードを削除しlibrosaのstftを使う

#特徴量を返す

def get_feat(file_name):

 a,sr = librosa.load(file_name)

 y=np.abs(librosa.stft(a))

 return y

#変更した関数の動作確認も兼ねてサンプル音声のパワースペクトグラムを描画をする

#getfeat内にパワースペクトグラムの描画処理を追加

f:id:chocolate22554:20200922115852p:plain

 

*1

 

 

Runで実行

f:id:chocolate22554:20200922122803p:plain

(このような下記の画像を今まで学習して見てきたことないのでワクワクです)

f:id:chocolate22554:20200922122841p:plain

f:id:chocolate22554:20200922122938p:plain

2つの音声のパワースペクトグラムが描画された

この図では横軸に時間(Time) をとっており各時間の縦方向の成分が1つのパワースペクトルに対応している

動作確認ができたので描画の部分はコメントアウト

 

#plt.figure(figsize=(10,4))

#librosa.display.specshow(librosa.amplitude_to_db(y,ref=np.max),y_axis='log',x_axis='time',sr=sr)

#plt colorbar(format='%+2.0f dB')

#plt.tight_layout()

 

(コードを書いていて段々プロット(plot)とは、描画する、点を打つなどの意味を持つということが分かってきました)

f:id:chocolate22554:20200922124220p:plain

 

 data_Xとdata_yを求めるgetdataの呼び出しはコメントアウトを解除しておきましょう

f:id:chocolate22554:20200922122240p:plain

そしてパワースペクトグラムはナムパイ配列として取得できるのでget dataのreturn文ではナムパイ配列に変換しないように修正する 

 returnの部分を  

 return(data_X,data_y)に変更

RUNで実行 画像のような行が出る

f:id:chocolate22554:20200922135715p:plain

データを教師データとテストデータに分離する  random_stateは基準となる11813に戻す

#教師データとテストデータに分ける

train_X,test_X,train_y,test_y =train_test_split(data_X,data_y,random_state=11813)

print("{} -> {},{}".format(len(data_X),len(train_X),len(test_X))

f:id:chocolate22554:20200922140315p:plain

 

教師データをSVCに与えていく   

 

#clf =svm.SVC(gamma=0.0001,C=1)

clf =svm.SVC(gamma=0.0000001,C=10)

clf.fit(train_X,train_y.T[0])

f:id:chocolate22554:20200922140601p:plain

現在は1つのパワースペクトログラムを1つの特徴量として扱っているが1つのパワースペクトログラムから複数のパワースペクトルに分割してそれぞれを特徴量として学習させる

                 ⇩

#各時間に対応する成分をそれぞれ1つの特徴量として分割する

def split_feat(data_X,data_y):

 data_X2=

 data_y2=

 for X,y in zip(data_X,data_y):

 X2=X.T

 y2=np.array([y[0]]*X.shape[1])

 data_X2.append(X2)

 data_y2.append(y2)

data_X2 = np.concatenate(data_X2)

data_y2  =np.concatenate(data_y2)

return(data_X2,data_y2)

 

#train_Xとtrain_yをこの関数に与え新しい教師データとしてtrain_X2とtrain_y2に取り出す

train_X2,train_y2 =split_feat(train_X,train_y)

#gammma とCを基準となる値に戻し 基準となる教師データもtrain_y2  とtrain_X2に置き換える

(#)clf =svm.SVC(gamma=0.0001,C=1)

#clf =svm.SVC(gamma=0.0000001,C=10)

clf.fit(train_X,train_y.T[0])

 

Runを押す。学習ができた。 

f:id:chocolate22554:20200922142441p:plain


学習ができたので予測部分に取り組む

教師データには1つの音声から作られた複数のパワースペクトラムを利用するようになったのでテストでも1つのテストデータから複数のパワースペクトラムを作ってパワースペクトラム毎にテストを行う。これによって複数の異なるテスト結果が得られるが多数決をとり1つの結果にまとめる

あとは(赤枠部分の)predict関数を使用するようにコードを修正すれば予測処理は完了

f:id:chocolate22554:20200922154041p:plain

           ⇩

f:id:chocolate22554:20200922154252p:plain


実行(RUN)する

f:id:chocolate22554:20200922154335p:plain

正解数は9となり前のチャプターの10と同じぐらいの精度で予測できた

精度はあまり変わらない

精度を上げるために別の方法を試す

これまでは音声の時間ごとの特徴量としてパワースペクトグラムを使用してきたが話者認識にはメル周波数ケプストラム係数(通称 MFCC)という特徴量が人の音声認識感覚と近く有効であると言われている

そこで特徴量をMFCCに変更して学習させる。get featで計算する特徴量をMFCCに変更する

f:id:chocolate22554:20200922155056p:plain

             ⇩

MFCCはパワースペクトログラムと同様の形式で時間ごとの特徴量を計算できるのでコードはこの1行だけ(と言っているが多分2行修正。 6行目をコメントアウトにし7行目にy=librosa.feature.mfcc(y=a,sr=sr を追加。)修正

f:id:chocolate22554:20200922155202p:plain

Run!(実行)

その下のセル  「教師データとテストデータの分離」をRun!(実行)

f:id:chocolate22554:20200922161025p:plain

その下のセル 「SVMで学習」  Run!(実行)

f:id:chocolate22554:20200922161217p:plain

⇩ その下のセル 「予測する(predict)」  Run!(実行)

f:id:chocolate22554:20200922161459p:plain

⇩  満点になった

f:id:chocolate22554:20200922161538p:plain

MFCCを予測で使うと高い精度で予測ができた

音声ファイルごとのMFCCの様子をグラフに描画

音声ファイルごとの各mfccの平均値をとって描画するmeanplotを作成

#mfccを描画する

def mean_plot(mfccs,name):

 print(name)

 mean= np.mean(mfccs.T, axis=0)

 plt.plot(range(0,len(mean)),mean)

 plt.show()

各声優のhigh  lowのファイルを1つずつ読み込んでmeanplotに渡す

f:id:chocolate22554:20200922162806p:plain

RUN!(実行)

どの値も左側の振れ幅は大きいですが4つ目(hi)から差が出ているように見える

f:id:chocolate22554:20200922162928p:plain

f:id:chocolate22554:20200922162939p:plain

f:id:chocolate22554:20200922162951p:plain

f:id:chocolate22554:20200922163003p:plain

f:id:chocolate22554:20200922163012p:plain

それぞれの声優で特徴が出ている、機械的なhiとlo・声優の声では顕著に差が出ている

違いが多き程MFCCの値も大きく異なりMFCCが音声の違いをしっかり表していると視覚的・直感的にも分かる

 

 

まとめ

SVMを使って話者認識を行う度に音声の特徴量のいくつかを利用して実験を進めた

結果

生の音声波形データよりフーリエ変換を使って周波数ごとに構成を分けた特徴量を利用したほうがより高い予測精度が得られた

1つの音声ファイルから複数の特徴量を取得する方法も扱った

最終的にはMFCCを特徴量として利用すると最も良い予測の精度が得られた

但し表のデータはrandom_stateを11813、教師・テストデータを1パターンの組み合わせに固定した時の結果 よりフェアにするには複数の値を使ったほうが良い。またSVMのパラメーターにも調整の余地あり。

f:id:chocolate22554:20200922164810p:plain

 

 

感想

声優さんの声か 自分の知識が素人なので何個か上手く聞き取れない単語があった(3-4回聞きなおした単語も複数あり。パワースペクトグラム、パワースペクトラム 等何が正しいのか分からなくなった 調べてブログを書きなおしたい。)

特徴的な声とアニメで覚えやすい

AIacademy無料テキストを1周していたのでまだ理解できたが 忘れているかAIacademyのテキストを熟知していないので知らない単語がいくつか出てきた

ブログに記載したことで流すだけでなくじっくりアウトプットは出来た

ブログの情報としては補完したい点が山ほどあるので2-3周動画をやり直しコードを覚えるぐらいにブログを書きなおしたい

演習問題は比較的簡単だった

実践では音声データを自分が使いたい音声にすり替えた方法ですれば実践的にも使用できるのではないかと思う

本来の目的が もともと有料の講座なので無料の間に書き留めて復習に使いたいと思いブログに記載した。結果的に、期間限定だったが無料で受講できてよかった 1周目では物に出来ていないとヒシヒシと感じるので9/31までなのでそれまでに2周目を終えたい

*1:

#getfeatにhi.wavとlo.wavを与えるコードのコメントアウトを解除して実行

 

f:id:chocolate22554:20200922122240p:plain

 

 画像 最後の部分3行を下記のように変更

 

#data_X,data_y = get_data('voiceset')

 

get_feat('sample/hi.wav')

 

get_feat('sample/lo.wav')

 

 

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

音声の波にフーリエ変換を適用すると 複数の簡単な波に変換される

簡単な波を周波数ごとに集計したものをパワースペクトルという 音声を構成する周波数の内訳になる

それぞれの音声の周波数をパワースペクトルで比べることで音声の特徴をよりよく比較できる

f:id:chocolate22554:20200920210356p:plain

前回のコード

f:id:chocolate22554:20200920210433p:plain

コードを修正し 音声の波にフーリエ変換で求めた特徴量を利用するようにしていく

フーリエ変換を利用するためにscipyのfftpackをimport していく

f:id:chocolate22554:20200920210727p:plain

特徴量を返すget featを修正しフーリエ変換から得られたパワースペクトルを返すように。フーリエ変換自体はライブラリが行ってくれるので簡単に変更できる

f:id:chocolate22554:20200920211317p:plain

変更した関数の確認動作をも兼ねてサンプル音声のパワースペクトルを描画

get feat関数内にパワースペクトルの描画処理を追加

f:id:chocolate22554:20200920211543p:plain

get featにhi.wav (高音音声)とlo.wav(低音音声)をサンプルデータとして与える

f:id:chocolate22554:20200920211813p:plain

 

f:id:chocolate22554:20200920212144p:plain

2つのパワースペクトルが表示された  縦軸=音量のデシベル、横軸=周波数

   ↓hi.wav

f:id:chocolate22554:20200920212347p:plain

                   ↓lo.wav

f:id:chocolate22554:20200920212412p:plain

 

どの周波数がどれくらい出ているか分かったので これを特徴量として学習させれば話者認識の精度が高められる

動作の確認ができたので描画の部分はコメントアウト

 

#plt.plot(fft_dreq,y)

#plt.show

  return y

 

どの周波数がどれほど出ているか解析結果を特徴量として使い音声データの学習と予測を行う

 

f:id:chocolate22554:20200921141404p:plain

f:id:chocolate22554:20200921141413p:plain

f:id:chocolate22554:20200921141421p:plain

 

#学習させて結果を取得させる

#教師データとテストデータに分ける

train_X,test_X,train_y,test_y =train_test_split(data_X,data_y,random_state=11813)

print("{}->{},{}".format(len(data_X),len(train_X),ken(test_X)))

f:id:chocolate22554:20200921141430p:plain

clf= svm.SVC(gamma=0.0001,C=1)

clf.fit(train_X,train_y.T[0])

f:id:chocolate22554:20200921142755p:plain

 

ok_count=0

 

for X,y in zip(test_X,test_y):

   actual =clf.predict(np.array([X]))[0]

   expected = y[0]

   file_name = y[1]

   ok_count +=1 if actual == expected else 0

   result = 'o' if actual ==expected else 'x'

   print("{} file:{},actual:{},expected:{}".format(result,file_name,actual,expected))

 

print("{}/{}".format(ok_count,len(test_X)))

f:id:chocolate22554:20200921141631p:plain

正答率 が12個中5個 なのでSVMのパラメーターを調整してみる
 gamma=0.0000001  C=10に変更

Cを大きくすると5分類をより大きく許容できるようになる

f:id:chocolate22554:20200921143037p:plain

正答率が変わった

f:id:chocolate22554:20200921143134p:plain

しかしいきなり結果が良くなると作られた恣意的なデータに見えて胡散臭い。そこで、教師データとテストデータを変更して試してみる

train_test_splitのrandom_stateを11813から813に変更

f:id:chocolate22554:20200921143318p:plain

学習させ予測させる

f:id:chocolate22554:20200921143446p:plain

なかなか精度が良いのができた ちなみに、テストデータの分割方法を他に変えても10前後の正解数になる。実行結果の内訳を確認する

末尾にsu(su.wav)=授業以外の先生の声 他のデータより数が少ない 授業中の声の調子が違うため認識されていない可能性あり。

 

最後に問題点を考える  このチャプターのフーリエ変換で作ったスペクトラムは音声データに対し音声の長さに寄らず1つだけになっている 例として、非常に長い音声ファイルが1つしかなくても特徴量を1つしか取り出すことができない。

特徴量の数が多いほど機械学習精度は期待できるので1つの音声ファイルから複数の特徴量を取得できれば改善することができるかも。