スポンサーリンク

【入門編】機械学習とは何か?アルゴリズムの種類から分析手順を分かりやすく説明する

機械学習とは何か?

今回は機械学習とは何かを分かりやすく解説していきたいと思います。まず「機械学習とは何なのか?」というところから説明していくと、「機械学習は入力したデータ(x)と出力したデータ(y)の関係性をコンピューターに見つけさせる作業」です。

そのためにはデータの傾向を把握しやすくする「アルゴリズム」をコンピュータを与えてやる必要があります。この入力と出力に関係性(規則性)を見つける具体的な手法をアルゴリズムと言います。

そこのアルゴリズムに当たるものが「決定木」とか「ディープラーニング」とか「ロジティクス回帰」とか言われるやつらです。

機械学習アルゴリズムは主に「回帰」「分類」「ニューラルネットワーク」の3つに分けることができ、機械学習を実務で使用する際にはこの3つの中から分析に最適と思われるものを選択し、使用していきます。

機会学習で何ができるのか?

この機械学習を使うことで、スパムメールの判定やユーザーの観覧履歴からオススメの商品を選んで紹介するなんてことができるようになります。機械学習の本質はパターン認識にあります。

最近のAIによる画像認識や会話botなんてのは、会話データや画像データを数字の配列データに変換して、それを機械学習アルゴリズムを使って数字の並びに法則性を見つけてモデルを計算しているだけです。

機械学習のアルゴリズムの種類と分類

上述したように、機械学習アルゴリズムは主に「回帰」「分類」「ニューラルネットワーク」の3つに分けることでき、ざっとした機械学習全体の認識としては↓みたいな感じで押さえておけば大丈夫です。

  初級:線形分類・回帰(ロジティクス回帰)

  初級:非線形分類・回帰(決定木・ランダムフォレスト)

ーーーーーここまでが一般的な機械学習ーーーー

  中級:深層学習(ニューラルネットワーク)

  上級:強化学習(リカレントネットワークetc)

基本的に「ロジティクス回帰や決定木といった「回帰」「分類」にあたる機械学習アルゴリズムが一般的に言われる機械学習」であり、Pythonで機械学習入門~みたいな参考書を買うと大体この2つのアルゴリズムについて解説されています。

機械学習と深層学習の違い

3つ目のニューラルネットワーク~ディープラーニングに関しては上記の2つとはアルゴリズムの仕組みがほぼ別物であり、一から解説するとそれだけで1冊まるまる参考書が書けてしまうくらい長くなるので、参考書などでまとめる場合はこういう風に分類されています。

基本的に最近急速に技術進歩があり、人工知能だのAIだの騒がれているのは機械学習といっても、ニューラルネットワークを始めとするディープラーニング系のアルゴリズムを指します。言い方は悪いですが「回帰」「分類」にあたる機械学習アルゴリズムについては従来の回帰分析や重回帰分析に毛が生えた程度のものです。

なので、最近騒がれているAI・ディープラーニング・深層学習みたいなワードの技術について勉強したい場合は「ディープラーニング」「ニューラルネットワーク」というワードが入った参考書を購入しましょう。機械学習というと少し違います。

学生の方などでPythonとかで機械学習系を勉強したいと思っている人はこの辺を意識すると、自分は何をしたくてそのために何を勉強する必要があるのかが認識しやすくなり、学習がスムーズに進むと思います。今回は機械学習について解説していくので、ここからは「回帰」「分類」にあたる機械学習アルゴリズムについて解説していきます。

ちなみに深層学習(ニューラルネットワーク・ディープラーニング)についてはここでは掘り下げませんが、以下の別記事で分かりやすく解説していますので、深層学習(ディープラーニング)に興味のある方はそちらの方を参照していただけると幸いです。

ただディープラーニングの分野もまだまだ発展途上で、一部では従来の機械学習アルゴリズムを超える成果を出しているものの、実務で使うとなるとまだまだ「回帰」「分類」にあたる機械学習アルゴリズムも方が結果が出るなんてことも普通にあるので、趣味ではなくデータサイエンティストや機械学習エンジニアになりたいという人はこっちもちゃんと勉強しておきましょう。

「教師あり学習」と「教師なし学習」

そして機械学習をアルゴリズムではなく、学習方法で分類すると①教師あり学習と②教師なし学習の2つに大きく分けることができます。現在主流なのはデータを読み込ませて学習させ、数値を予測する教師あり学習です。教師なし学習は今のところ精度が低いので、あまり使われていません。

まあ一応①教師あり学習と②教師なし学習の他にも「強化学習」という方法もあり、これは教師あり学習で計算した結果を教師データとし、予測と誤差を再計算してより精度を上げるという方法です。世間一般でAIとか言われるのは強化学習を使用したアルゴリズムであることが多いです。これはディープラーニング系の話なのでここでは省略します。

まとめると、一般的な機械学習というのは「教師あり学習」で「回帰」や「分類」のアルゴリズムを用いて、「入力(x)と出力(y)の関係性を見つけて、未知のデータ(x)の対する答え(y)を予測すること」です。

機械学習を使った問題設定の例としては「家賃の予測」みたいな場合だとy : 出力変数を「家賃」としてx : 入力変数を「広さ、距離」にするみたいな感じです。なので、機械学習を行うにあたっては「xにあたる入力データ」と「yにあたる出力データ」の2種類のデータを用意する必要があります。

機械学習に使用するデータの用意については、自分でスクレイピングして集めるか業務なら向こうから提供されたものを使用して行います。Pythonと機械学習の相性がいいのは、Pythonにはwebからデータを自動収集する「webスクレイピング」が簡単にできるライブラリが揃っているというのもありますね。

機械学習の流れ

機械学習とは基本的に入力データ(x)と出力データ(y)の関係性を見つけるという作業であり、実際機械学習を行うにあたっての作業手順は大まかに5つに分けることができます。

1.  データを前処理する

2. 使用する「機械学習アルゴリズム」を決める

3. 「損失関数」を決めて損失関数を「最小化」する

4. アルゴリズムから計算した「予測モデル」を評価する

5.  色んな機械学習アルゴリズムで1~4を試して、最も評価の良かったモデルを見つける

データの前処理

まず1のデータの前処理ですが、データ分析・機械学習において使用するデータは欠損している値があったり、明らかにおかしい数値があったり形式がバラバラだったり、基本的にそのまますぐに分析に使えることはまずありません。なので、データを分析に使えるように整形する必要があります。これをデータの前処理と言います。

ぶっちゃけ後の手順はどのデータであっても同じなので数をこなせば反復作業な訳ですが、この前処理はデータの種類によって扱い方が異なってくるので一番大変な部分です。実際にプログラミングで機械学習なりをやってみれば分かりますが、この前処理が一番しんどいところですので、頑張ってください。

機械学習アルゴリズムの選択とその目的

そして、分析に使用するデータの前処理が済んだら次はそのデータから機械学習アルゴリズムを使って、最適なモデルを作っていきます。主な機械学習アルゴリズムとして代表的なのは「ロジティクス回帰」「サポートベクトルマシーン」「決定木学習」「ランダムフォレスト」「k-近傍法」などがあります。

全ての機械学習アルゴリズムは仮説と損失関数で構成されており、仮説とは「入力データに対する予測データの計算方法」を指します。そして損失関数とは「モデルが予測したデータと実際のデータの誤差」です。

機械学習の本質は、仮説(入力データに対する予測データの計算方法)の中で、損失関数(モデルが予測したデータと実際のデータの誤差)を最小になるモデルを見つけることにあります。このモデルを見つけるということはデータの特徴を見つけるということであり、パターン認識ともいわれています。

計算したモデルの評価方法

機械学習においてモデルの選択に続き、「特徴量の選択」「モデルの評価」は非常に重要です。

まず「特徴量の選択」ですが、これは算出したモデルからの予測数値と実際のデータの正解数値との誤差をどれくらい許すかなどを意味します。というのもまず基本的に、データの特徴を完璧に捉えるモデルを作るのは不可能です。

もし仮にデータに対しての正解率が100%のモデルができたとしても、それは、そこで計算に使われていない未知のデータに対する予測精度は悪いでしょう。これはなぜかというとそのデータセットの特徴を細かく捉えすぎたためにモデルが複雑になりすぎてしまっているからです。

よく漫画とかでは予測精度100%とかいう表現がありますが、実務のデータ分析において予測精度100%はありえません。機械学習の目的は汎用性の高いシンプルなモデルを計算するところにあります。

こういったアルゴリズムが元のデータの特徴を学習しすぎて、そのデータセットにしか有効でないモデルを作ってしまうことを「過学習」と言います。基本的に機械学習を使って計算するモデルの精度は100%ではなく90%~95%くらいが、未知のデータに対しても有効性が高いため、望ましいです。

そして、アルゴリズムを使ってモデルに計算するにあたって、そのモデルをどれくらい複雑なものにするかの尺度を「正則化」と言います。この正則化が厳しくすればするほどモデルはシンプルになりますが、その分精度も悪くなります。逆に正則化を緩く設定すれば、その分過学習が起こりやすくもなります。

なので、アルゴリズムからモデルを計算するにあたっては、過学習が起こらないかつ精度が高くなるように「正則化」を行わなければなりません。こういった正則化の度合いなどを「ハイパーパラメーター」と言います。

この「ハイパーパラメーター」を上手く設定して過学習が起きないかつ未知のデータに対して精度の高いモデルを作れるかが機械学習エンジニアの腕の見せ所ということになります。

そしてアルゴリズムから算出したモデルの評価方法ですが、機械学習というのは上述したように「入力(x)と出力(y)の関係性を見つけて、未知のデータ(x)の対する答え(y)を予測すること」が肝であり、「モデル評価において大切なのは作ったモデルが未知のデータ(分析に使っていないデータ)に対してどれくらい有効だったか」です。

この未知のデータ(分析に使っていないデータ)に対する予測精度を測るためにあらかじめ機械学習分析を行うデータを訓練データとテストデータの2つに分割します。データの分割方法に関しては「Hold out法」「k-Mean法」の2種類が存在しています。

万能な機械学習アルゴリズムは存在しない

現在の機械学習における考え方の1つとして、まずどんな問題設定に対しても万能なアルゴリズムは存在しないというものがあります。これを「ノーフリーランチ定理」と言います。

なので、問題ごとに最適な機械学習アルゴリズムを選択する必要があります。この辺はまだ機械が判別できないので、人間の仕事になります。いまのところの機械学習エンジニアの仕事はこの問題解決に使う機械学習アルゴリズムの選択です。

そして、これらのアルゴリズムすべてを試して結果が芳しくない場合は、ニューラルネットワークなども試してみます。そういった意味では機械学習エンジニアになるのであれば、問題解決に全力を尽くすにあたって、すべてのアルゴリズムの理論と特性を知っておかなければいけません。

加えて、機械学習アルゴリズムは研究成果次第で、有効な新しいアルゴリズムも増えていくので、機械学習エンジニアは常に勉強していかなければいけません。まあこれは機械学習に限らず、ITエンジニアの宿命ですが、機械学習エンジニアはその中でも技術進歩の流れが速いので大変です。

まとめ~AIで世界はこの先どうなる!?

以上が機械学習の基本的なあらましです。まあ言葉でフムフムと聞いても恐らく一割も理解できていないので、実際にPythonなどのプログラミング言語を使って機械学習を行ってみると実感が出てくると思います。

機械学習は「Python(パイソン)」というプログラミング言語を使うと超簡単に行えるのでオススメです。加えてPythonはプログラミング言語の中でも簡単で分かりやすいので、プログラミング初心者にも取っつきやすいので、初めてのプログラミングにもうってつけなプログラミング言語です。

Pythonとは?言語の特徴やシェア、習得するメリットを徹底解説!!

そして実際にPythonで機械学習を行う際には「Scikit-learn」という機械学習用ライブラリがあるので、それを使うと機械学習のことなんて何にも分かっていなくてもとりあえず機械学習ができます。↓の記事では実際に「scikit-learn」を使って機械学習を行う方法を解説しています。

【Python】「Scikit-learn」を使って機械学習でビットコインの価格予測をしてみる

そして、機械学習やディープラーニングの話でよく話題になるテーマに、AIでこれからの世界はどうなるのかという話がよく出てきます。「AlphaGo」のエンジニアの囲碁の腕前は、イ・セドルよりもはるかに劣ります。この事実が示唆しているのは、既存の専門家から職を奪うのは、AlphaGoのようなAIそのものではなく、AIのエンジニアだということです。

このまま機械学習に始まるAI系が単なるゲームだけではなく、バイオやデザインなどといったこれまで人が主体だった他の分野にも介入し、そういった専門的領域の多くがコンピュータ・サイエンスによって置き換わっていくと思われます。ただし、それは「AIが世界を統治する」のではなく「コンピュータ・ サイエンスの研究者があらゆる分野に進出する」という言い方が正しいと思います。

そしてそういった社会の中で人々はどうなるのかというと、これまでにはなかった新しい仕事に就くか、または働かなくてよくなると思われます。ただしその過渡期においては仕事がなくなったり地獄を見る人が一定数出るのもまや避けようのないものでしょう。なのでこれからのAIの世の中に対する予防策は、まず第一は自分がAIやwebサービスを作る側に回ることですね。

プログラミングもいずれAIが行うかもしれませんが、新しいwebサービスを作るといった0から1を作る仕事は、まだまだ人間の仕事だと思います。結局、機械学習というのはすでにあるデータからパターンを認識するだけであり無から有を作れる魔法の道具ではありません。

そういった0から1を作るという意味では、実況者・ユーチューバーみたいな自分の個性を売りにする仕事を始めておくことのもいいと思います。まあ恥ずかしいという人は、とりあえずサラリーマンの他にも自分のスキルを活かして何か副業を始めておくべきです。大切なのはサラリーマン以外にも収入源を持っておくことです。そうすればAIに仕事を取って変わられてクビになっても何かやりようはあると思います。

ただ社会人になってから始めるのは労力がかかるので、こういうのは学生のうちに始めておきたいですね。学生の方には学生時代の自由な時間はとても貴重ですので、是非とも大切に使ってほしいと思うばかりです。

そして、機械学習の延長にあるAIが社会をどうか変えていくのか、これからAIエンジニアになるのはどうすればいいのかを知りたい人には、以下の「マンガでわかる! 人工知能 AIは人間に何をもたらすのか 」「機械学習エンジニアになりたい人のための本 AIを天職にする 」の2冊を読むとこれからの社会の大枠が見えてくると思います。

まあ機械学習もディープラーニングも一度仕組みが分かれば簡単なもんです。独学では理解するのが難しくても最近は「侍エンジニア」などPythonを使った機械学習やディープラーニングが学習できるコースを用意しているプログラミングスクールなんかも増えてきたので、そういったところに通うと効率よく勉強できると思います。

スポンサーリンク

プログラミングの独学はとても難しい


プログラミングは小学校の義務教育にも導入され始めており、これから社会人として生きていく上でプログラミングはもはや出来て当たり前、出来なれば論外というエクセルレベルの必須スキルになりつつあります。そしてそういう話を聞いて参考書なりを購入して独学でプログラミング勉強しようと思っている人も少なくないでしょう。しかしプログラミングを独学で勉強し始めようと思うものの



・「分からない箇所で詰まって挫折してしまった」

・「勉強する時間が足りない」

・「ネットの記事だと情報が断片的でよくわからない」

・「コードのエラーの原因が分からない」



という壁にぶち当たって、プログラミングの勉強を止めてしまう方が少なくありません。独学でプログラミングを勉強してる時間のほとんどはつまづいている時間です。実際僕も最初のころ独学でプログラミングを勉強していた頃はエラーの原因が分からず丸1日を不意にしてしまった・・・そんな苦い経験がありました。



それで僕は一度はプログラミングの学習を諦めてしまいましたが、就活で現実を知る中で「プログラミングを勉強して、いずれフリーランスとして自由な生き方がしたい」「エンジニアとして若いうちから高収入を得たい」という気持ちから一念発起して「侍エンジニアのwebサービスコース」に申し込み、プロのエンジニアの方に対面でマンツーマンでPythonによるWebサービス作り方とWeb技術の基本を教えてもらい、ようやくプログラミングが理解でき、今ではエンジニアとしてそこそこの暮らしができるようになりました。





侍エンジニアでは、とりあえずプログラミングやインターネットの基本を知っておきたい人から、HTML・cssなどでWebサイトやWebアプリを作ってみたい人やPythonを勉強してデータサイエンティストやAIエンジニアになりたい人まで幅広いニーズに応えた様々なコースが用意されています。



IT業界と言ってもエンジニアの仕事はプログラミング言語次第でサーバーから機械学習・ディープラーニングまで多種多様ですし、侍エンジニアの無料レッスン(カウンセリング)を受けてみて、自分のやりたいITの仕事は何なのか?を見つけるのがエンジニアへの第一歩になります。ちなみに今侍エンジニアの無料レッスンを受けると1000円分のAmazonギフト券がもらえるので、試しに受けてみるだけもお得です。


自分は半端に独学やオンラインスクールで勉強して金と時間を無駄にするくらいなら、リアルのプログラミングスクールに通ってしっかりプログラミングを勉強した方がいいと思います。ちなみに今、侍エンジニアに申し込むと、25歳以下の学生の方であれば、受講料が20%OFFになるので超お得です。


そして、プログラミングは大勢で授業を受けたり漫然とオンライン学習をするよりも自分が分からない箇所をピンポイントでプロの講師に直接質問して、ちゃんと納得するというスタイルの方がお金は確かに少し掛かりますが、独学で学ぶよりも絶対にモノになります。


シェアする

  • このエントリーをはてなブックマークに追加

フォローする