Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

定番のPython機械学習ライブラリ「scikit-learn」ではじめての学習モデル作成から改善まで

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2018/12/12 14:00

 本連載ではプログラミングの基本は理解しているが、より実践的なデータ解析に取り組みたい方を対象に、スクリプト言語によるデータ解析の実践を解説します。スクリプト言語の中でも特にデータ解析環境が整っているPythonをとりあげ、対話型解析ツールやライブラリによるデータ解析の実行・可視化の方法をを解説します。第4回となる本稿ではPythonによる機械学習を解説します。まず機械学習の概観について確認し、Jupyter Notebookとライブラリscikit-learn使った機械学習の手順を解説します。

目次

対象読者

  • Pythonの基本的な文法を理解しておりデータ解析のスキルアップに取り組みたい方

サンプルの動作確認環境

  • MacOS 10.13
  • Anaconda 5.1
  • Python 3.6
  • Jupyter Notebook 5.4

機械学習の概要

 本稿では、実際にPythonでの機械学習に入る前に、機械学習自体について簡単に触れます。

機械学習とは

 機械学習とは、学問としてはコンピューターサイエンス(情報工学)の分野で主に研究される技術です。人間の学習と同じことをコンピューターで機能として実現しようとするものです。そのため人工知能(AI)の研究の1分野でもあります。データから学習し、予測や分類を行う機械学習モデルを作ることが目的になります。

統計と機械学習の関係

 前回記事で統計を取り上げました。統計と機械学習はデータ解析やデータサイエンスの関連分野でよく見かけると思います。これら2つの技術は、お互いにどういった関係になっているのでしょうか。書籍やWeb記事での説明も多くありますが、いまひとつ分からない方も多いかと思います。以下は筆者なりの認識を記述しておきたいと思います。

 統計と機械学習はともにデータ解析における課題を解決する手法です。手法のプロセスが違いますが、両方の分野で使われる手法やモデルも数多くあります。つまりお互いに排他的な技術分野ではありません。

統計と機械学習の範囲
統計と機械学習の範囲

 機械学習と反対の技術は「ルールベース」です。ルールベースは事前に人間がルールを決め、機械(コンピューターなど)はそのルールに従って処理をします。例えば郵便番号は数字ごとに住所がルールとしてきっちり決まっています。機械でこれを処理する際はルール通りに振り分けるだけです。

 機械学習はルールにあたるパラメータ(しきい値、関数の係数など)をデータを材料にして自ら動的に変更します。例えば手書き文字認識の分野では、人間の手書き文字画像と正解をデータとして学習します。データに基づいて自らパラメータを変更し、結果として画像データから文字を識別できるモデルになります。

 一方、統計の最大の特徴としては標本(サンプル)を用いる点にあります。数値の処理により、全体の一部から全体を予測する技術が統計です。この反対にあたる概念は「ビッグデータ」になるでしょうか。

 ビッグデータは定義としては単に大きなデータのことです。1台のコンピューターで処理できない量、従来のリレーショナルデータベースで処理できない量(例えばテラバイト・ペタバイトくらい)のデータのことを指す場合が多いです。

 ビッグデータを扱うことの本質は全量データを扱えることにあります。ロングテールと言う言葉をご存じの方も多いでしょう。例えばAmazonは売り上げが上位の商品だけでなく、ロングテールと呼ばれる下位の商品も”すべて”取り扱うことにより大きな価値を生み出しました。Googleも”すべて”のWebサイトを整理することで検索の価値を高めました。

 このビッグデータ処理に相性がいいのが機械学習です。量が多いと人間にとっては大変な処理ですが、機械では(コンピューターリソースさえ用意すれば)わけないことです。また機械学習では一般にデータが多ければ多いほど学習の精度が高まります。例えばGoogleは検索や動画サービスなどで入手した大量のデータを活用して精度の高いAIを作っています。

 また、統計はデータに潜む特徴や法則を(関数など数式として)見いだそうという(科学的な)技術と言えます。一方、機械学習はAIなど予測や分類を仕事として人間の代わりに働くものを作ろうという(工学的な)技術と言えるでしょう。

統計と機械学習の関係
統計と機械学習の関係

 それぞれ発展の歴史や目的に違いがあります。これらを理解しておいて、目的にあわせて技術や用語を使い分けていただければと思います。

機械学習ライブラリscikit-learnについて

 Pythonでは機械学習の定番ライブラリとしてscikit-learnがあります。機械学習ではアルゴリズムとして時には複雑なプログラムを組む必要がありますが、scikit-learnはこれをライブラリとして提供してくれます。今回の記事ではこのscikit-learnを活用していきます。


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

著者プロフィール

  • WINGSプロジェクト 西 潤史郎(ニシ ジュンシロウ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きた...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

バックナンバー

連載:Pythonによるデータ解析入門
All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5