わかめ’s diary

エンジニア見習いがちょっとずつITを学んでいきます

0から始める機械学習(データの準備編)

みんな大好き金曜日。

1週間(正しくは5日間だけど)続けられた達成感もあってウッキウキ。

 

今回は機械学習に必要なデータの準備について説明していくよ。

そしてついに始まるプログラミング。

 

とりあえず機械学習してみたい!って方向けの自由に利用可能なデータを使った方法と、自分で用意したデータの形を整えて使う方法の2種類を紹介していきます。

 

本日の内容はコチラ↓

    1. そもそも機械学習ではどんなデータを用意すればいいの?
    2. (初心者向け)irisデータセットを使ってサクサク準備!
    3. (中級者向け)自作のデータを整えてみよう!

 

ではでは早速始めていこう。

 

 

そもそも機械学習ではどんなデータを用意すればいいの? 

 

機械学習に必要なデータは、

  • 分類器を学ばせてモデルを作るための学習データ(trainデータ)
  • モデルの評価を行うテストデータ(testデータ)
  • 分類器の学習時に正しく学習が出来ているか確認するための評価データ(validationデータ、主に深層学習で必要とされる)

の3種類あるよ。(多分合ってると思う・・・)

 

今回は深層学習については触れないから、学習データとテストデータについてだけ説明していきます。

 

といっても学習データもテストデータも形式は同じで、ラベルデータ特徴量データの2種類から構成されるよ。

例えば鳥と犬と猫を機械学習で分類したい!って時に必要なデータはこんな感じ↓

 

ラベルデータと特徴量データ

ラベルデータと特徴量データ

 

イメージとしてはこんな感じ。分類器はそれぞれの動物の特徴を学習データから学んで、いざテストデータを入力してみると学習した結果からどの動物っぽいかを教えてくれる。各動物の名前の後についてる(数値)はその動物のデータがいくつあるかを意味してるけど、特に気にしなくて問題ない。

 

上の例だと空を飛ばない動物は基本的に犬か猫っぽいけど、足が2本であれば鳥の中のペンギンじゃないか?って感じで認識結果を出してくれる(はず)。

 

実際に図みたいなデータを使うことがあるかは微妙だけど、決定木って手法を使った機械学習には適しているかも。

 

基本的にこの形式に沿って学習データ・テストデータ・評価データを作成すれば、色々な機械学習手法を試すことができるから、次はデータの作り方について学んでいこう!!!

 

 

(初心者向け)irisデータセットを使ってサクサク準備!

 

プログラムは載せておくけど、ほとんどの場合はエラーが出ると思うよ。基本的にはライブラリがインストールされてないのが問題なので、エラーに応じてライブラリをインストールしてからプログラムを実行し直そう。

 

あとはnumpyとかと違ってlibrosaとかxgboostみたいなライブラリはAnaconda-Navigatorではインストールできる標準のライブラリとして搭載されてないはずなので、ネットでググってインストールしてみよう!

ちなみにAnaconda-NavigatorとJupyterLabを開発環境にしている場合は、pipでインストールすると不具合が起きるみたいだから、condaを使ってインストールするように。

 

たった数行でデータが読み込めちゃう!って紹介しようとしたらまさかのJupyterLabが不調でエラーが表示されたよ。プログラミングをしてたらこういう壁にぶち当たることもしばしば。

JupyterLabの動作不良

JupyterLab君の機嫌が悪い

一向に治らないし夜も遅いから、また後日更新します・・・。

 

良い週末を。 

 

 

土曜日の5時台に起きてからゲームしてた。

エラーを治してきたので更新するよ。

 

原因ははっきりとは判らないけど、多分webアプリ作るための環境を整えるために今の環境いじくったせいでライブラリの参照が出来なくなってたっぽい。

 

pythonに標準搭載のライブラリはインポート出来るのに、numpyとかlibrosaみたいに自分でインストールした系のライブラリが参照出来てない & pythonは普通に動くって感じだったから、numpyその他もろもろアンインストールからの再インストールで治った。

 

ってな訳でまた改めて(ほとんど)同じコードを実行してみると・・・

irisデータセットの読み込み

irisデータセットの読み込み

こんな感じでirisデータセットが読み込めたよ。

なんじゃコレは!?ってなるかもしれないけど、

  • x_train:”学習データ”の”特徴量データ”
  • y_train:”学習データ”の”ラベルデータ”
  • x_test:”テストデータ”の”特徴量データ”
  • y_test:”テストデータ”の”ラベルデータ”

を表してる。

xが特徴量データでyがラベルデータ、trainが学習データでtestがテストデータって感じに振り分けしているよ。名前はこの通りにする必要ないから、自分の好みだったり分かりやすいように適宜変更してok。

ちなみにirisデータセットを図で表現するならこんな感じかな。

irisデータセットの説明

irisデータセットを除いてみる

特徴量にはガクの長さ・ガクの幅・花弁の長さ・花弁の幅の4種類が使われていて、花の種類はSetosa・Versicolour・Virginicaの3種類があるのが見てとれる。

 

データセットについてもう少し詳しく知りたい!って方には下のようなコードを使うと詳しい説明が表示される。

irisデータセットの詳細

irisデータセットの詳細

データの総計が150個で4種の特徴量、3種のクラスから成るってことが書かれてる。他にもR. A. Fisherさんが作ったとか作成日が1988年の7月とかって情報もあるね。

 

 (中級者向け)自作のデータを整えてみよう!

 

ここでは自前で用意したデータを機械学習で使えるように変換するプログラムについて紹介していくよ。プログラムの細かい説明はせずにざっくりと説明します。

 

今回は音声認識や環境音認識などの”音の認識”をする際のプログラムを用意してみました。音の特徴量としてはMFCCというものを使うよ。

音データ(wavファイル)からMFCCを抽出 → 後で使えるようにCSVファイルに保存するまでのプログラムを紹介。

 

JupyterLabで動かすプログラムはコチラ↓ 

ライブラリと変数

ライブラリのインポートと変数の宣言

インポートするライブラリは上の通り。使いたい音データのサンプリングレートやラベルについては好みに応じて変更してね。

今回はスポーツの試合中の音を認識するために、ラベルをブザー・歓声・ホイッスル・その他の音の4つにしてます。

 

MFCC抽出プログラム

MFCCの抽出

MFCCの抽出にはlibrosaってライブラリを使う。引数に渡されたファイル名と次元数に応じてMFCCを抽出して値を戻すよ。

※librosaではmfcc抽出が複数回行われるため、横軸方向で平均をとると記載されてる部分は少し怪しくて、このMFCCの抽出は多分正確ではないです。

 

学習データの作成

フォルダから学習データを一括で作成

テストデータの作成

フォルダからテストデータを一括で作成

学習データとテストデータの作成はglob関数を使って一括で行うよ。使う条件はtrainフォルダ、testフォルダの中に自分が使いたいラベルのフォルダをそれぞれ作成して、各フォルダに音のデータをwavファイル形式で配置しておくこと。ここも任意で絶対パスだったり相対パスに書き換えてみてね。

現状はtrain/各ラベル/〇〇.wavとtest/各ラベル/〇〇.wavってファイル全てに対して特徴量の抽出が行われるハズ。

 

各データをcsvファイルに保存

各データをcsvファイルに保存

最後に作成した各データをcsvファイルに保存して終了。ただしラベルデータを機械学習で用いるときは基本的に0から始まる数値データである必要があるので、ラベルを数値に変換してるよ。(ここは自動化し忘れてるから不便でゴメンね。 )

MFCC以外にも様々な特徴量があるからカレントディレクトリにMFCCてフォルダを配置してその中にcsvファイルを保存してるけど、これも好みにカスタマイズしちゃってください。

 

とても説明が長くなってしまったけど、ここまで読んでくれた皆さんお疲れ様でした!データの準備が終わったので、次回からは機械学習をしていきます!!

 

投稿頻度については隔日にしようと思ったけど、今は月・水・金の毎週平日の3回投稿くらいにしようかなと考えてる。

 

ではでは〜。