AI(人工知能)を実際に作ろうとしたときや、仕組みを知ろうとしたときには、さまざまな関数について知る必要が出てきます。でも、関数と聞くとどうしてもハードルが高く感じてしまいますよね。特に、ライブラリの公式文書は英語で書かれていることが多いですから、読むのに苦労してしまいます。
scikit-learn(スクリットラーン)というライブラリに含まれているstandardscaler(スタンダードスケーラー)というクラスの関数も、多くのAI(人工知能)で用いられている重要な関数です。このクラスは「標準化」という役割を果たし、これを使うことで、測定単位が学習データの大きさに与える影響を取り除くことができて、AI(人工知能)の性能を上げることができます。
そう言われても、「標準化」って何?一体どういうことなの?などなかなかピンとこないかもしれません。そこで今回は、standardscaler(スタンダードスケーラー)の役割や、使い方、メリットやデメリット、気をつけるポイントなどについて、丁寧に説明します。
standardscalerとは
AI(人工知能)の代表的なオープンソースライブラリであるscikit-learn(スクリットラーン)には、standardscaler(スタンダードスケーラー)というクラスがあります。このクラスは、標準化という機能を果たしてくれます。
標準化はデータのばらつきの違いによる影響を、取り除くために必要です。それはどういうことなのか、説明しましょう。
アヤメ2:がくの長さ=4.9、はなびらの長さ=1.4
アヤメ3:がくの長さ=4.7、はなびらの長さ=1.3
……
このデータでは、がくの長さのほうがはなびらの長さよりもばらつきが大きいですよね。
だからといって、アヤメの品種を分類するうえで、がくの長さのほうが、はなびらの長さよりも重要なデータといえるかといえば、そうとは限りません。なぜなら、たとえばそもそもがくの長さのほうがサイズが大きいとか、栄養状態の影響を受けやすいとか、品種以外の理由でばらついている可能性もあるからです。
一方で、今回のデータにおけるはなびらの長さの単位が、cmではなくmmだった場合を考えてみましょう。データは次のようになります。
アヤメ2:がくの長さ=4.9、はなびらの長さ=1400
アヤメ3:がくの長さ=4.7、はなびらの長さ=1300
……
このデータで学習した場合には、AI(人工知能)ははなびらの長さを重く見て品種を分類します。ちょっとおかしいですよね。単位を変えただけなのに、AI(人工知能)の分類の基準が変わってしまいました。
標準化は、数式で表すと次のようになります。
標準偏差は、データのばらつきを表す指標です。標準偏差で割って、ばらつきをうまくそろえて、データによる判断を可能としました。
そして、この標準化を簡単に実現できるのが、standardscalerです!
standardscalerを使うことのメリット・デメリット
ここでは、standardscalerを使うことのメリットとデメリットを説明します。
standardscalerを使うメリット
- 自分で数式を書かなくても標準化を実現することができる
- 単位の違いなどによって起こるばらつきを取り除くことで、AI(人工知能)の精度を上げられる
メリットはなんといっても、自分で数式を書かなくてもよいこと。
dataという変数が元のデータだとすると、
scaler.fit(data)
newdata = scaler.transform(data)
とするだけで、標準化された新しいデータを作ることができます。たったの3行なので、簡単ですよね。
また、AI(人工知能)の精度向上が実現できるのもメリットです。特に、ばらつきが影響を与えやすい分類法(たとえば、k-means法)では、標準化によって精度を上げることができます。
また、AI(人工知能)では次元の数が問題になりますが、それを減らすときにもstandardscalerが活躍します。次元の数を減らす代表的な手法である「主成分分析」も、ばらつきの影響を受ける方法なので、standardcalerを用いればその影響を取り除けます。
standardscalerを使うデメリット
- 平均、ばらつきという情報が取り除かれる
- ばらつきの違いが重要度の違いと関係しているときには、精度が落ちることがある
デメリットとして、特殊なデータで分析をした場合はばらつきが取り除かれることで、AI(人工知能)の精度が落ちることがあります。
というのも、ばらつきが重要になるようなデータもあるからです。たとえば、夕焼けの写真では赤い光成分のばらつきが青い光成分のばらつきよりも大きいのですが、これらのばらつきを揃えてしまうと、夕焼けの写真を分類する精度が落ちてしまうことがあります。
では、standardscalerは使ったほうが良いのか、使わないほうが良いのか、結局どちらなのでしょうか。次は、そのことについても説明します。
sclit-learnでのstandardscalerの使い方
初めのほうに
と記述したうえで、
scaler.fit(data)
newdata = scaler.transform(data)
とすれば標準化されたデータセットを作ることができます。単に使うだけならこれで良いでしょう。
したがって、standardscalerを使ったほうが良いのかどうかわからないという問題の答えは、標準化を使用したものと使用しなかったものの両方を作って精度を確認して、自ら確かめましょう。実際にAI(人工知能)を作る場合に、ある手法を使ったものと使わなかったものを作成して、精度が良いほうを採用するというのは、一般的な方法です。
実際にstandardscalerの標準化の効果を確かめる方法
standardscalerを用いた標準化の効果は、標準化されたデータと標準化されていないデータでAI(人工知能)を作り、精度をそれぞれ確認しましょう。
AI(人工知能)のクラスには、精度を測定するための関数が存在します。たとえば、scikit-learnでは、scoreという関数が用意されています。この関数によって、精度を評価できます。
standardscalerを活用するときに、気をつけるポイント
standardscalerは手軽に使えるクラスです。どんどん使っていけば良いのですが、1つだけ気を付けるポイントがあります。
「決定木」という分類のAI(人工知能)があります。「決定木」とは、データの値によってどんどん枝分かれしていき、最終的にひとつの分類結果を示してくれるものです。これは、人間にも分類の根拠がわかりやすいという特徴があるAI(人工知能)です。
では、標準化されたデータをもとに決定木を学習したらどのような結果が出るでしょうか。正常に学習できますし、決定木の精度が落ちるようなことはありません。
しかし、個々の枝分かれにおいて示される分類の根拠の値は、もとのデータと異なります。「標準化がくの長さ」>0.3という枝分かれがあったとして、その0.3という値は、元々のがくの長さとは異なる値ですから、注意しましょう。
さて、今回はstandardscalerというクラスについて説明しました。
簡単におさらいしましょう。
standardscalerは、「標準化」という役割を実現してくれるクラス。標準化では、各データのばらつきの違いが与える影響を取り除くことができます。
scikit-learnのstandardscalerを用いると、とても簡単に標準化を実装できました。これによって、AI(人工知能)の精度を上げられることがあります。
一方で、standardscalerを使っても一部のデータでは精度向上につながらない場合もあるので、standardscalerを使ったデータと使わないデータの両方でAI(人工知能)を作成し、精度を比較することも有効です。
これだけ理解していれば心配はありません。standrdscalerを使えば、データのばらつきの違いを気にせずにAI(人工知能)を作ることができます。人口、気温、売上、体重など、世の中のデータのばらつきはさまざまですが、それを気にしなくて良いのです。しかも、思いがけない精度向上につながることもあるに違いありません。あなたもぜひ、ご自身のデータでstandardscalerを使って、その効果を実感しましょう。