※Pythonでの機械学習の準備が出来ている人はこの記事を読まなくても大丈夫です!※
環境構築はややこしい?
プログラムで何か作ってみたい!と思ったらまず始めなければならないのがこの環境構築です。
現在は高い機材やハイスペックのPCを購入しなくても、手軽にプログラムで様々なものが作れます。
HP作成、機械学習(人認識、顔認識、音声認識)、アプリケーション開発、自動対話bot・・・ちょっと奮発してRaspberry Piを購入すれば、音声認識技術でお手製のAIスピーカーも作れるかも・・・?
それぞれの機能の違うプロジェクトには、対応する強みを持ったプログラム言語のほうが作りやすいです。とはいえ、ある機能に特化したプログラム言語や、そのプログラムの使いやすさを極めようとするソフトウェアも非常に多種多様です。そのため、
「結局どれを使って何をどうはじめたら良いの・・・・?」
と二の足を踏んでしまうかもしれません・・・
そこで、今回はプログラム言語をPythonに限定し、音声認識に限らず「Pythonで機械学習をしてみたいけど何をどう始めたら良いかわからない」という人のために
Pythonで機械学習するための環境構築について説明したいと思います!
<想定している読者>
・ 機械学習やデータ解析のためにどのような準備をしたら良いのか分からない人
・環境構築や仮想マシンのことが良く分からない人
環境構築って何?
環境構築についての記事はいくつかあり、顔認証システム開発の環境構築ではとても分かりやすい説明があります。
- 環境構築とはズバリ読んで字のごとくプログラミングの環境を構築することです。
- 例えば料理で考えてみると、ガスと火を使える環境を用意しなければ味噌汁は作れませんし、オーブンを使える環境を用意しなければピザを焼くことはできません。(余談ですがオーブンで焼いたものをピザ、釜で焼いたものをピッツァと呼ぶらしいです。)
- そんな感じでプログラミングにも、目的とするものを作るふさわしい環境というものがあります。そして自分のPCでそのふさわしい環境を用意することが環境構築である、と思ってもらって結構です。
環境構築は、様々なツールやソフトウェアをインストールしてプログラムや実行のための準備をする作業です。
便利な機能が非常に多いため、それぞれの作業が何のために必要などのような作業かをなんとなくでも理解していないと、思わぬ失敗をして余計ややこしいことになります(体験談)。
本記事では環境構築での各手順の解説をする、補足記事となっています。
「手っ取り早く手順だけで良いよ!」
という方は、「音声認識の実践」の概要に環境構築手順を書きました。よろしくお願いします。
環境構築ってどんな作業なの?
Pythonの環境構築の作業は、本人が「どのような環境にしたいか」という目的によって大きく3種類に分けられると考えています。
- Python+必要なライブラリ
ある程度不便でも全然OK!とにかく早く始めたい!という人向け - 統合開発環境+Python+必要なライブラリ
便利に見やすくするためなら多少手間がかかっても平気!という人向け - 仮想マシン環境+Python+必要なライブラリ
PC環境を全く空っぽのゼロから始めたい!という人向け
では、それぞれの機能について説明します。
Python
Pythonは、プログラミング言語の名称です。
Pythonには、数値解析や画像解析に便利なライブラリが多いため、機械学習に良く使われます。
ライブラリ
ライブラリは、「便利な道具がたくさん入った箱」です。
例
ある日、あるデータに対して下の処理を行うプログラムを構築しました。
このとき、①と④の処理はほとんど同じなので、重複したプログラムを書いていることになります。手間ですね。
また、別のプログラムでも「グラフに表示する」や「計算結果の記録」といった処理をして欲しい時、いちいち初めからプログラムを書き直すのも手間です。
そこで、Pythonに限らず「グラフに表示する」「計算結果の記録」「何らかの計算処理」などの1つ1つの処理をプログラムの部品(Pythonではモジュールと呼ばれたりします)として保存し、呼び出せばいつでも使える仕組みがあります。そして、Pythonのライブラリはこれらの部品がたくさん入ったフォルダです。非常に便利な機能が多いです。
いくつか紹介します。
<計算・グラフに使うライブラリ>
プログラムによる数値計算やグラフといった、基本的な処理に欠かせないライブラリです。
- Numpy:数値計算、解析するなら必須のライブラリ。複雑な計算も高速で出来る!
- scipy:Numpy以上に多くの機能が含まれる。計算によってはNumpyよりも速い!
※調べたところ、scipyはNumpyの上位互換版であり、Numpyで使える機能はscipyでも出来るものみたいです。ただ、公開されているプログラム構築で使われているのはNumpyが多いです。 - Matplotlib:グラフ表示の為に必須のライブラリ。軸やデータを設定するだけで簡単にグラフ表示が出来る!細かく軸の名前やメモリ、グリッド線などのカスタマイズが出来る!
<機械学習に使うライブラリ>
機械学習をする上で、よく使われるライブラリです。特に、深層学習の際は必需品になるものもあります。
- scikit-learn:機械学習用のライブラリ
Numpyのデータをさらに様々な計算に用いることが出来るライブラリです。ニューラルネットも作れます。 - Pandas:データ解析用のライブラリ
高速で効率的にデータを解析できます。 - tensorflow:深層学習を簡単に作れるライブラリ。レイヤー(層)の作成も結合も全体の表示ができます。
- PyTorch:tfよりも構築が楽な深層学習ライブラリです。
- Keras:最も構築が楽な深層学習ライブラリです。
さて、Pythonとライブラリの説明をしました。
Pythonをインストールし、機械学習に必要なライブラリを全てPythonにインストールできたら、お使いのPCは「Pythonで機械学習」可能な状態になっています。
これが最低限の「Pythonで機械学習」の環境構築手順です。
完成画面は大体こんな感じになります(Windows7の画面です)。
プログラム作るウィンドウって感じですね。かっこいい~!
もちろんこの画面でバリバリプログラム作ることが出来ます。ただし・・・
- 作業スペースの作成・移動
- 新規ファイル・フォルダの作成
- いったんセーブして別のファイルに移る
- ファイルの実行
これら操作をPythonのコマンド(文字入力)で行います。フォルダがパスとして全て文章で表現されることや、コマンドを覚えないとスムーズに操作できないという点に初心者はかなり面食らうと思います。(慣れればこれでも何とかなりますが・・・コマンド覚えるのが大変!)
最低限のインストールに加えて、統合開発環境をインストールするほんのひと手間で操作が劇的に変わります。
統合開発環境(IDE)
統合開発環境(Integrated Development Environment; IDE)自体は、コンパイラとテキストエディタ、デバッガというバラバラで利用される開発用機能を1つのソフトウェアで行える、という意味です。
PythonのIDEには
- PyCharm
- Visual Studio
- Eclipse
- Jupyter
- IDLE
など様々なものがありますが、現在使っているEclipseを例にとって説明します。統合開発環境の何が良いの?
① なんといってもGUIのプログラム環境!
GUIとはGraphical User Interface(グラフィカルユーザインタフェース)の略称で、その名の通りユーザが視覚的に操作することが出来ることです。
例えば、マウスでの操作です。キーボードでの入力でしか操作が行えなかったPython環境を「ダブルクリック」や「マウスカーソル」で操作でき、コマンド入力による専門的な知識が無くても直感的に扱えるようになるのです。
アプリケーションを作るとなると1つのプログラムファイルだけでは収まらず、複数のプログラムファイルを作成することもあります。そんな時、ファイルを一覧としてみたり、よりユーザが見やすく、操作しやすいウィンドウとして利用できます。
② 入力補間&リアルタイムでコードチェック機能!!
自分が入力した変数などのスペル予測をしてくれます。個人的には一番といっても良いありがたい便利機能です。ちょっとした機能と思うかもしれませんが、自作プログラム構築で最も多いエラーの原因は、人間の入力ミスです。
特に、大きいアプリケーションやプログラムを作ろうとするならコードはどんどん長くなります。
プログラムエラーの原因が分からず、長文コードを2時間にらみつけていたら・・・「I(大文字のアイ)」と思って入力したはずの文字が「l(小文字のエル)」だった時の絶望感は凄まじいです。ちょっとしたことでも、いや、ちょっとしたことだからこそストレスフリーにプログラム構築したい!そんなあなたにIDE(統合開発環境)!
統合開発環境の悪い点は?
IDEを使うことで、動作が重くなる可能性があります・・・。
突然ですが、テキストと画像のデータの大きさを比較すると、画像のほうが圧倒的に大きいです。
さて、GUIという機能は、視覚的に使いやすくしているということは、画像をたくさん使っているということですね。つまり、操作のためのデータ処理量が大きくなります。
そのため、起動や動作に時間が掛かってしまう場合があります。
仮想環境
執筆者は仮想環境を作っていないため実際の導入手順は紹介できませんが、
「仮想環境を作ったほうが作業しやすそう」
と思うかもしれないので、仮想環境について説明します。
実際に仮想環境を構築している記事を下に載せます。参考にしてみてください!
「人認識の実行環境の構築」
結局、仮想環境(マシン)って何なの?
今皆さんが使っているPCは「OS(オペレーティングシステム)」と呼ばれるプログラムで管理されています。具体的に言えば「Windows10」「Mac OS」などのことです。PCに必ず入っていますね。皆さんのあらゆる操作を入力として読み込み、計算し、出力する大元の管理を行っています。
PCがPCたる動きをするのはOSのおかげだと考えてください。
仮想環境とは、PCの中にもう1つのOSを作ることです。図にするとこんな感じです。
詳しい説明は省きます(もしかしたら今後記事になるかもしれません)。
実物としてのPCはないけど、同じ動きをする仮想のマシンを作るので、仮想マシンです。
結局、何が良いの?
もっとも簡単に言うなら、「まっさらなPCがもう1台手に入った!」です。
- 作業別にPCを切り替えて使える!
機械学習を例にとっても、必要になる訓練用データや構築するプログラムの数、構成、結果の保存など、面倒くさがりだとあらゆるものでPC上がかなり散らかる可能性があります。
機械学習用OS、アプリケーション開発用OSなど、異なる作業別で環境を変えることが出来ます。 - PCが軽くなる・・・?
「古くて重くなったPCに仮想マシンを入れると軽くなる」という話を聞いたことがありますか?あながち嘘ではないですが注意が必要な話です。
Windowsなど、PCに元々搭載されているOSには、初期段階で様々な機能があります(アクセサリや使いやすいデスクトップ(GUI)など)。普段私達が意識していない部分での処理にさえ耐えられないほどにPCの機能が落ちてきているとき、仮想環境を入れると確かに軽くなります。
執筆者が前に使っていた、Windows7が搭載されたPCをWindows10にアップデートした時、処理が重くなりました(おそらくタッチパネルでも使用可能な操作環境の処理には耐えられなかったのでしょう)。
上記のような使いやすいGUIなどを取り払った仮想OSに変えたことで、処理がなくなった分軽くなります。
ただし、「より使いやすくしたい!」と仮想OSにGUI機能などをどんどん追加していけば、結局は同じ処理を行うことになるのでPCは重くなります。先ほど説明したIDEと同じことですね。
もしかしたら昔使っていた古いノートPCが、何らかの処理にもう一度使えるかも・・・?
時間があり、古いPCをもてあましている方は試してみても良いでしょう。
まとめ
プログラム構築において自分が最も扱いやすい環境にすることが大切です。自分に一番合う環境を構築する手助けになれば幸いです。