わかめ’s diary

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

0から始める機械学習(モデルの構築編)

特殊能力を身につけた。

 

1時間弱もあるデータのラベル付してたら波形を見るだけでどんな音が鳴ってるかなんとなく分かるようになってきた。

 

ブザーの波形

ブザーの波形

こんな風に波形が長方形っぽくなってたらブザーの音だし、

 

ホイッスルの波形

ホイッスルの波形

こんな風に突然大きな音から尻すぼみになっていく形ならホイッスル鳴ってんな〜って雰囲気で分かる。

え?こんな能力要らなくないって? 確かに要らん。

しかも色んな音が同時に鳴ることがほとんどだから波形にバラつきあるしね。でもあと1時間分のデータにラベル付しないといけないからそれまでは役に立つ能力。

 

それはさておき、今回は用意したデータを使って機械学習のモデルを構築します。本来はSVMとかが有名だけど、ここでは決定木を勾配ブースティングを使って学習させるGBDT手法を3種類と、ビッグデータが集まる現代では欠かせないDNNを実装していくよ。

 

今回実装する一覧↓

  • XGBoost
  • LightGBM
  • CatBoost
  • DNN(かなり簡単でベーシックなやつ)

 

それぞれの手法の強み・弱みとかの特徴はあるけど、それらについては置いといて実装だけ。

前回、中級者向けに紹介したデータの準備方法を使った方のために、csvファイルからデータを読み込んで変数に保存するためのコードも始めに紹介します。

 

コードは以下の通り。

前回作成したcsvファイルの読み込みしか出来ません。他の作り方で作成されたcsvファイルを読み込むためには中身を変更する必要があります。

csvファイル読み込みプログラム

csvファイル読み込みプログラム

上のプログラムは学習データ作成用。テストデータの作成にはプログラム内のtrainという文字をtestに書き換えればok。

 

XGBoost

 

XGBoostを使うためにはその名の通りxgboostライブラリのインストールが必要。Anaconda-Navigatorからはインストール出来ないから、ターミナルとかからコマンドを打ってインストールする。

JupyterLabでは、左上の File → New → Terinalと選択してターミナルを開いて、

 

JupyterLabでのターミナルの開き方

JupyterLabでのターミナルの開き方

ターミナルに conda install -c conda-forge xgboost と入力するだけ。本当に実行しますか?みたいなの聞かれるからyを入力すればインストールしてくれる。

 

sklearn(scikit-learn)とかmatplotlibがインストールされてない人は conda install scikit-learn だったり conda install matplotlib をターミナルに入力すればok。

"インストールしたいライブラリ名 conda" って検索するとどのライブラリについてもインストール方法が載ってる。

ちなみにプログラムについてはGithubに後でアップしておこうと思う。記事の中にコード埋め込む方法分かんない。

 

XGBoostのコードはコレ↓

ライブラリのインポート

ライブラリのインポート

XGBoostのプログラム

XGBoostのプログラム

プログラムの説明は省くよ。

実行結果はこんな感じ。

 

プログラムの実行結果

プログラムの実行結果

Accuracyってとこに今回のモデルがどのくらいの精度で分類できるかが表示されるよ。

irisデータを学習データとテストデータに分ける時にシャッフルしてるから実行する度に結果は多少変動するけど、ほとんどの場合90%以上の精度が出てきます。

精度の下に表示されてる学習曲線は、基本的に時間(rounds)が経つにつれて下に降りていくような見た目なら問題なし。ただし青線は綺麗なカーブ描いてるのにオレンジの線がジグザグだったり途中から上に曲がってたりすると、過学習が起きてる可能性アリ。これについては次回詳しく。
 

LightGBM

LightGBMのコードはコレ↓

既にインポート済みのライブラリは書かなくてもok。

XGBoost同様、ターミナルに conda install -c conda-forge lightgbm と入力するだけ。本当に実行しますか?みたいなの聞かれるからyを入力すればインストールしてくれる。

ライブラリのインポート

ライブラリのインポート

LightGBMのプログラム

LightGBMのプログラム

プログラムの説明は省くよ。

実行結果はこんな感じ。

 

プログラムの実行結果

プログラムの実行結果

色々なサイトを調べてみたけど学習曲線の表示法が分からんかった...。XGBoostと比べて結果の表示が多いかもしれない。あと結果の収束にも時間がかかってる。

Accuracy_scoreってとこに今回のモデルがどのくらいの精度で分類できるかが表示されてる。今回は91.7%の精度だね。

 

CatBoost

CatBoostのコードはコレ↓

ターミナルには conda install -c conda-forge catboost と入力しよう。

ライブラリのインポート

ライブラリのインポート

ライブラリは新しく必要なのだけ書いてる。

CatBoostのプログラム

CatBoostのプログラム

 

プログラムの説明は省くよ。

実行結果はこんな感じ。

 

プログラムの実行結果

プログラムの実行結果

結果はAccuracyに。93.3%の精度。

 

DNN

DNNのコードはコレ↓

今回はDNNの実装にtensorflowを使ったから、ターミナルに conda install -c conda-forge tensorflow と入力する。

ライブラリのインポート

ライブラリのインポート

DNNのプログラム その1

DNNのプログラム その1

DNNのプログラム その2

DNNのプログラム その2

 

(長くなって切れてしまった。)
プログラムの説明は省くよ。

実行結果はこんな感じ。

 

プログラムの実行結果

プログラムの実行結果

結果は97.8%になりました。

 

irisデータセットを使った今回の結果では、DNNが97.8%という最高の精度が出たね。ただしirisデータを学習データとテストデータに分割するときにシャッフルしたり乱数シード(乱数を生成する種)に依存して結果は変わるので、今回の結果はどの手法が良いというわけではないよ。

 

プログラムの注意点として、XGBoostとかLightGBMのnum_classが4になってるけど、irisデータセットはラベルの種類が3種類だから多分正しくは3。DNNのnum_of_typeも同様に。

特徴量にMFCCを使う場合にはDNNのn_featuresも24にしないといけない。DNNは特に入力とか出力の形式を正しくしないと上手くいかないから気をつけよう。

 

またしても長くなったけどモデルの構築方法について紹介しました!

次回は機械学習の解説最後となる認識精度向上編

と言っても自分も初心者だから説明は基礎的なものだけで。

 

機械学習についての記事が終わったら、webアプリ開発とか機械学習使った株価・仮想通貨の予測とかを書こうかな。

書籍だったりwebの記事を参考に勉強していくつもり。

 

それではまた次回!!

 

 

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

みんな大好き金曜日。

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

 

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

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

 

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

 

本日の内容はコチラ↓

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

 

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

 

 

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

 

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

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

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

 

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

 

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

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

 

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

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

 

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

 

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

 

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

 

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

 

続きを読む

0から始める機械学習(環境構築編)

モチベーション君が頑張ってくれたから3日坊主回避。 

毎日投稿は多分難しいし、”隔日” くらいで投稿して一歩ずつ ”確実” に進めるつもり。

親父ギャグは作法。

 

今日の内容はこんな感じ↓ (目次の作り方忘れた)

  • 機械学習ってどうやるの?
  • プログラミングの環境を整えよう 

機械学習については何回かに分けて更新していくよ。

(一度に書いちゃうとすぐネタ切れになるからね。)

 

 

 機械学習ってどうやるの?

 

まず機械学習の流れはざっくり分けて3つある。 

  1. 学習させたいデータの準備
  2. 分類器を学習させる / モデルの構築(パラメータチューニング)
  3. モデルの評価

これはあくまで個人的な分け方だから参考までに。

データの準備にもデータ量を増やすためのデータ拡張だったり、分類器の認識精度を高めるためにパラメータのチューニングが必要だったりと色々あるよ。

 

今後はひとまず簡単な機械学習方法について紹介していこうと思う。

プログラム置いといて好き勝手動かしてね!だとプログラミング始めたばかりの方が困るだろうから、今回はPythonを使ってプログラミングする環境を整えていこう。

 

 

 プログラミングの環境を整えよう

 

おすすめの開発環境はAnaconda-Navigator × JupyterLab

 

Anaconda-NavigatorでPythonのバージョン管理とライブラリの導入

JupyterLabでプログラムの実装と実行

 

って感じ。

ちなみにJupyterLabはAI関連に携わってる人なら知ってる、あるいは使ったことあるかもしれない。 プログラムを部分部分に分けてそれぞれの実行結果を残しておけるのが便利。対話モード的な?

 

説明はこれくらいにして早速導入していこう。

といってもダウンロードするのはAnaconda-Navigatorアプリだけ。

以下のサイトのInstallationからダウンロードできるよ。

docs.anaconda.com

 

ダウンロードしたら早速アプリを開こう。

Anaconda-Navigatorの初期画面

Anaconda-Navigatorの初期画面

これはMacOSで開いた場合だけどWindowsでもLinuxとかでも似たようなもん。きっと。

画面右上のJupyterLabのLaunchをクリックすると、JupyterLabがブラウザ上に開かれるよ。 フォルダ欄にごちゃごちゃと色々あるのは今後使っていくプログラム。

JupyterLabの初期画面

JupyterLabの初期画面。Notebookをクリックしよう。

NotebookをクリックするとUntitled.ipynbってのが作成されるはず。

試しに適当なプログラムを書いてみる。実行はShift + Enter で(MacOS

プログラムの開発画面

プログラムの開発画面。色々と試してみよう。

この画像ではaとbに値を保存してるけど、実際は学習させたいデータを保存しておくことになる。

 

 

 

今回最後に説明するのは、プログラミングをするにあたって必須なライブラリの導入について。ライブラリは色々あるけど、説明は省きます(手抜き) 

 

Anaconda-Navigatorに戻ってEnvironmentsを押してみよう。

こんな画面になるはず↓

Anaconda-NavigatorのEnvironments画

Anaconda-NavigatorのEnvironments画面。ここでライブラリをインストールする。

例えば数値計算に必要なライブラリはnumpy、機械学習であればscikit-learnとかtensorflowとか。上の画面だとInstalledが選択されてるからインストール済みのライブラリが表示されてるね。試しにSearch Packagesにnumpyと入れてみよう。

 

numpyがインストール済み

numpyがインストールされてる。新しいライブラリをインストールしたいときは、
Not InstalledかAllに変更してからライブラリ名を検索する。

 

numpy入ってないやん!

 

って方は後々使うことになるからダウンロードしてみてね。

他の必須ライブラリについては必要になったら適宜説明していきます。

環境構築はこれで完了!お疲れ様でした。

 

次回は学習させたいデータを準備するプログラムについて書いていこうかな。 

といっても自前で使ってるのは環境音を認識させるためのものだから、万人ウケはしなそう。

 

ではでは。また次回。

 

わかめ、ブログを始める

ブログ、始めてみました

 

多分ほとんどの人があなたは一体誰?ってはてなマークが浮かぶだろうから自己紹介。

地方でエンジニア目指して勉強中のラスト大学生してます。

 

めちゃめちゃプログラミング出来るよ!って訳でもないし、逆にこの実力でもこれくらいのプログラミングなら出来るんだ〜って思ってもらえればと。

 

みんなのプログラミングを始めるきっかけになれればいいな。

 

 

 就活終わってとても暇

 

就活も終わり、とにかく暇を持て余す毎日。

 

フォロワーのみんなは社会人なのに、ひとり学生ニートしてるのヤバすぎ!?

 

 とか

 

メーカーで労働に見合わない対価得る人生ヤバすぎ!? 

 

とか思ったという冗談はほどほどにして、

個人でブログ開設したりwebアプリ開発して副収入得るぞ〜と思って勉強始めたものの初心者には荷が重すぎた...orz。

(エンジニアはポートフォリオ残しておくと役立つって聞いたのもあるけど)

 

とりあえず残念すぎる進捗載せとくね。

 

わかめのwebブログ(ローカル)

プログラミング学習サイトに沿って作ったやつ

 

 ローカルだとしっかり見えるんだけどね。herokuにアップした途端cssも画像も反映されないんだよね。staticフォルダ作らないといけないとかなんとか。知らんけど。

herokuが何?ってのは後々紹介する(かもしれない)。

 

 

webサイトの失敗作(オンライン)

cssも画像も反映されないオワコンサイト

 

というわけでブログは一旦はてなブログにお任せして進めつつ、並行してweb系その他もろもろの勉強もしようって結論に。

 

 

 どんな記事を書いていく予定か

 

とりあえずは機械学習とかwebアプリ開発に関する情報を書いていく予定。

webアプリ開発についてはまだまだ初心者だし、次回は難しいと思われがち(?)な機械学習のはじめ方についてでも書こうかな。 

 

 意外と編集してプレビューしてってブログ書いてくの面白いから多分次回もあると思う。

 

がんばれモチベーション君