本記事は『Python3年生 機械学習のしくみ 体験してわかる!会話でまなべる!』の「第1章 機械学習の準備」から一部を抜粋したものです。掲載にあたって編集しています。

機械学習ってなんだろう



機械学習とは
人工知能とはどのようなものなのでしょうか。それを知るために、人工知能がどのように成長してきたかを見てみましょう。
人工知能は、1950年頃から研究されていて、これまで3回のブームがありました。第1次人工知能ブームでは、「計算を使って迷路やパズルを解く人工知能」が作られました。ですが「知識」がないので、用意された計算はできるのですが、人間からの具体的な質問に答えるのは苦手でした。
そのためしばらく人工知能は下火になりました。しかしその後、「専門家の知識をコンピュータに入れる」というアイデアが生まれ、エキスパートシステムが作られました。「専門家の知識やルール」を入れることで人間の具体的な質問に答えることができるようになったのです。
これが、第2次人工知能ブームです。しかし、「専門家の知識やルール」は、あらかじめすべて人間(開発者)が調べて用意しないといけません。作るには大変な労力が必要だとわかったのです。
そのためまた人工知能は下火になりました。しかしその後、インターネットが登場し、ネットを使ってデータをたくさん集められるという環境ができてきました。そこへ「たくさんのデータを使って、コンピュータ(機械)自身が自分で学習していく方法」が生まれました。
これが「機械学習」です。データをどさっと渡して、「このデータのこの特徴に注目して学習しなさい」と指示するだけで、機械が自分で学習していく方法です。これにより、人工知能はまた盛り上がってきました。それが現在の第3次人工知能ブームの始まりです。
この機械学習ではさらにすごい方法が生まれました。人間が「この特徴に注目して学習しなさい」と指示しなくても、機械が自分で見つけてしまうという「ディープラーニング(深層学習)」です。現在人工知能というと、多くの場合「ディープラーニング(深層学習)」のことを指します。
ディープラーニングもこの機械学習の1つの方法です。データをたくさん渡すだけで、人間だったら思いつかないような特徴にも注目して学習できるようになり、精度の高い学習ができるようになりました。
ディープラーニングは、人間の脳細胞をまねたニューラルネットワークを使って作られている非常に面白い技術です。ただ、それを解説するには大変なページ数が必要になるのでこの本では解説していません。その基本となるディープラーニング以外の機械学習について解説していきます。

機械学習でやっていることはひとことでいうと、「ものが持っている特徴の法則性を学習させること」です。データの中から「これは重要な特徴だ」という特徴を見つけて、それを学習させる「モデル」を用意します。モデルとは最初は空箱のようなものですが、これに特徴データを渡すことで、学習していくのです。こうして学習できたものを「学習済みモデル」といいます。

学習済みモデルができれば、これを使って予測ができるようになります。学習済みモデルに、「この場合は、どうなりますか?」と、調べたいデータを入力すれば、「その場合は、こうなるでしょう」と予測結果を出力してくれるようになるのです。

例えば、花の特徴を学習させて、「この花は何か」を予測することができますし、顔写真を学習させて、「この写真は誰か」を予測したり、過去の売り上げを学習させて、「今年の売り上げはいくらか」を予測するといったことができます。

ですから、機械学習の学習には、たくさんのデータが必要です。「少ないデータ」だと、偏った学習になることがありますし、「変なデータ」を使ったら、変な学習になってしまいます。つまり「データの量や質の良さ」は、学習の精度に影響します。機械学習では、「プログラムを書くこと」だけが重要なのではなく、「良いデータを、どうすれば用意できるかを考えること」も重要なのです。その意味でデータ収集やデータ分析は、機械学習ととても近いところにあります。

データ分析と機械学習の違い

「データをたくさん渡して、コンピュータが何かをする」という点では、データ分析も機械学習も似ています。ですが、「目的」に違いがあります。これについて考えてみましょう。
「データ分析」は、たくさんのデータを見て「これらのデータには、どんな特徴があって、どのような傾向があるだろう?」と、考えたり、説明するのが目的です。
たくさんのデータは、そのままの状態では理解しにくいので、「全体を1つの値で表現すると、こうなります」と、ざっくりと説明する方法があります。それが、平均値や中央値などの代表値です。しかし代表値でまとめてしまうと、全体としての特徴が見えにくくなります。
そこで「全体のばらつき具合を数値で表現すると、こうなります」とばらつき具合を説明したものが、分散や標準偏差です。また、「全体の中でこの値は、普通のことなのか、珍しいことなのか」を説明するときに、自然なばらつきを表す正規分布を利用します。正規分布の真ん中にあれば普通のこと、端っこにあれば珍しいことだと説明できます。

これに対し「機械学習」は、たくさんのデータで学習をしたあと、「この新しいデータの場合は、こうだと予測できます」と、予測を行うのが目的です。
例えば、「みかんとグレープフルーツの写真データ」を学習させてから、写真を見せると、「この写真はみかんです」とその写真に写っているものを予測します。「日本語の音声」を学習させてから、日本語で話しかけると、「『明日の天気は?』と質問しましたね」などと音声を予測します。
「囲碁」を学習させたあと、囲碁の対戦を見せると、「次の手はこれです」と勝つ手を予測します。ロボットに「自転車に乗る方法」を学習させたあと、ロボットを自転車に乗せると、「すぐハンドルを切る。次はペダルを少し踏む」などと、リアルタイムに予測をし続けながら、ロボットをコントロールします。
つまり、「これまでは、こうなっていました」と、過去を説明するものが、データ分析で、「新しいこのデータの場合は、こうだと予測できます」と、未来を予測するものが、機械学習なのです。
分けることは、わかること




機械学習のアルゴリズムでやっていることは「線を引くこと」



うまく分けるためには、意味のある特徴量が重要
機械学習を行うには、まず現実世界にあるものの性質や状況をデータ化して、コンピュータに取り込むところから始めます。この「現実世界の性質や状況の測定できるデータ」のことを、「特徴量」といいます。
例えば、「花のデータ」を取り込もうとしたとき、「花の大きさ」「花びらの色」「花びらの幅」「花びらの長さ」など、計測できる特徴をデータ化します。測定して取り込むことができる特徴の量なので「特徴量」といいます。

ただし、この特徴量には、予測にとって重要なものもあれば、予測にとって意味のないものもあります。意味のない特徴量をいくら学習しても、うまく学習できません。いかに意味のある特徴量を使うかが学習には重要になります。
予測にとって意味のある特徴量、つまり「予測の根拠になるもの」を「説明変数」といいます。そして「予測される結果」のことを「目的変数」といいます。
機械学習では、この説明変数と目的変数を使って、学習したり予測を行います(あまり区別せずに説明変数のことを特徴量という場合もあります)。

さて、学習をするとき、説明変数をいくつ使うかによって予測の詳しさが変わります。単純なデータなら、1つの説明変数だけで予測できそうですが、複雑なデータだと1つではうまく予測できない場合があります。そういうときは、説明変数を2つ3つと増やして予測精度を上げることを考えます。ただし、「説明変数を増やす」ということは、それだけ必要なデータが増えてくるので、バランスが大事です。
説明変数をいくつ使うかを「次元」ともいいます。説明変数を1つ使うなら「1次元」、2つ使うなら「2次元」、3つ使うなら「3次元」です。
