Share!

機械学習、と聞くとかなり複雑な数式をイメージして思わず身構えてしまう方もいるかと思いますが、実際には、あらかじめ誰かが複雑な数式を使って組み合わせてくれた「パッケージ」のようなものを組み合わせるだけで簡単に使用できる機械学習ツールも存在します。

Pythonの代表的な機械学習のオープンソースライブラリであるscikit-learn(サイキットラーン、と読みます)はその一つです。

今回の記事では、

  • scikit-learnとは何か
  • scikit-learnでできること

についてご紹介していきたいと思います!

scikit-learnとは

scikit-learnは「サイキット・ラーン」と読み「Pythonの代表的な機械学習のオープンソースライブラリ」です。

もともとのscikit-learnプロジェクトはグーグル・サマー・オブ・コード・プロジェクトscikits.learnとしてデイビット・クルナポ(David Cournapeau)氏によって開始されました。特に2015年以降は頻繁に活用されていて、Evernoteなどでも活用されています。

オープンソースで公開されているので、個人、商用に限らず誰でも無料で利用することができます

Pythonとは


そもそもPythonとは、という方もいらっしゃるかと思うので簡単に説明すると、Pythonは、汎用のプログラミング言語で、

  1. コードがシンプルで扱いやすく設計されている
  2. C言語などに比べて、可読性の高いプログラムが書ける
  3. 少ないコード行数で書ける
  4. ライブラリが豊富

という特徴があります。詳しくはこちらのサイトで丁寧に説明されていますので、興味のある方はそちらをどうぞ!

機械学習のライブラリとは?


では、機械学習のライブラリとはどのようなものでしょうか?

ライブラリとは、よく使われれる複数のプログラムを再利用できるようにひとまとめにしたものです。ただし、ライブラリだけではプログラムとして作動することはありません。

一般的には、作動するプログラムに何らかの機能を提供するコードの集まりをライブラリと呼びます。scikit-learnは凡庸性の高いプログラミング言語「Python」で頻繁に使われるコードをすぐに引き出せる「機械学習のライブラリ」です。

scikit-learnは現在でも活発に開発が行われているため、インターネット上での情報収集も比較的簡単で、サンプルデータなども数多く存在しています。

他にも

  • どのアルゴリズムでも同じような書き方で利用が可能
  • インストールしてすぐ機械学習を試すことができる

という特徴があります。

探しやすく、同じような書き方ででき、すぐに試すことができることから、機械学習を始めたばかりの人に最適なライブラリと言われているようです。

機械学習の分野において、Pythonが他言語よりも活用されている理由として、Pythonが機械学習にもっとも適していた、というよりも、数値計算ライブラリが充実していたという側面があげられます。また文法がシンプルで読みやすいため、プログラミング初心者が最初に勉強する言語として適していた、という理由も普及した理由と言えます。

scikit-learnを使うには

scikit-learnを使うには、Anacondaなどの開発環境のパッケージを使うのが一般的と言われています。

Anacondaという開発環境パッケージを導入すれば、すぐにscikit-learnを利用することが可能となります。とはいえ、Anacondaなどの開発環境は必須ではなく、手動でscikit-learnをインストールすれば使うことができます。

scikit-learnの主な機能

出典:scikit-learn.org

scikit-learnを使いこなすためのガイドとして、主な機能がわかりやすく分類されているアルゴリズムチートシートというのがあります。これはスタートから始まり、データの数やカテゴリー、ラベルありなし、データの数が10万件以上など、条件に沿って辿っていくと、どの機能を使うべきかを教えてくれる、というガイドラインシートです。

scikit-learnを使った機械学習を行う際に、やりたいことを実現させるための手順がわかりやすく4つのカテゴリーに分類されています。

その4つのカテゴリーとは下記の通りです。

  • 分類(classification)
  • 回帰(regression)
  • 次元圧縮(dimensionality reduction)
  • クラスタリング(clustering)

これに推薦(Recommendation)が追加される場合もあります。それぞれのカテゴリーにどのような機能があるのか一部ご紹介します。

分類(classification)


与えられたデータを分類します。このカテゴリー内にある主な分類方法の説明は下記の通りです。

・SGD(stochastic gradient descent、確率的勾配降下法)

大規模なデータ(10万件以上)に対し、そこそこの解答がすぐに欲しい場合などによく使われる線形のクラス分類手法です。

・カーネル近似

SGDではうまく分類できない場合に利用する非線形なクラス分類手法で、こちらも大規模データ向けです。

・Linear SVC

中小規模(10万件未満)に使われている線型の分類手法です。

・k近傍法

Linear SVCではうまく分類できない場合に利用します。これも10万件以下の中小規模データ向けです。

回帰(regression)


与えられたデータをもとに、目的とする値を予測するものです。このカテゴリー内にある主な予測方法の説明は下記の通りです。

・SGD(stochastic gradient descent、確率的勾配降下法)

前述の通り、大規模なデータ(10万件以上)に対し、そこそこの精度の予測がすぐに欲しい場合などによく使われます。

・LASSO、ElasticNet

中小規模(10万件未満)で、説明変数の一部が重要な場合におすすめな分析手法と言われています。

・Ridge、Liner SVR

中小規模(10万件未満)で、説明変数の全てが重要な場合におすすめな、分析手法と言われています。

・SVR(ガウスカーネル)、Ensemble

Ridge、またはLinerSVRではうまく分析できない場合に利用する分析手法です。

次元圧縮


データの特徴の次元数が多すぎると可視化できないため、2次元まで次元を圧縮します。次元圧縮にも複数のやり方があります。

・PCA (主成分分析・線形アルゴリズム)

PCAはPrincipal Component Analysisの略で、主成分分析と訳されます。この手法では、データの特徴に重みをつけた上で結合し、少数の新たな軸の特徴を作り出します。その結果、データ全体の特徴を捉えつつ、次元を削減することができる、という線形アルゴリズムです。

他にも

・NMF
・KernelPCA (非線形アルゴリズム)
・Isomap(非線形アルゴリズム)

などのアルゴリズムがあります。詳しく知りたい方はこちらの記事を参考にしてみてください。

クラスタリング(clustering)


クラスタリングでは特徴ベクトルだけに基づいてデータをグループ分けします。

  • KMeans
  • スペクトラルクラスタリング
  • GMM
  • MeanShift
  • VBGMM

などのアルゴリズムがあります。クラスタリングについて詳しく知りたい方はこちらの記事を参考にしてみてください。

終わりに

今回の記事では、scikit-learn(サイキットラーン)について簡単に紹介してきました。

scikit-learnに限らず、オープンソースライブラリというとてもありがたい仕組みはかなり活性化してきています。言ってみれば世界規模でのギブアンドテイクのシステムなので、これをうまく活用することで、実用化するまでの時間を短縮するだけでなく、専門家レベルの知識がなくても機械学習を実用的に活用することを可能にしてくれます。

つまり、何事もわからないから手も足もでない、というのは言ってしまえば一昔前の話です!今の時代、やりたい、と思うことがあれば、大抵のことはインターネット回線とグーグル検索と多くのやる気と少しの勇気とそれなりの時間さえあれば実現できる、はずです。

そして、さだまさし曰く、「元気と勇気は使えば使うほど増える」ものです!機械学習やPythonに興味が湧いてきた方は、令和の始まりに、Pythonのお勉強を始めてみてはいかがでしょうか?

参考URL:
・機械学習のライブラリ!scikit-learnとは【初心者向け】|TechAcademy magazine
・【機械学習初心者向け】scikit-learn「アルゴリズム・チートシート」の全手法を実装・解説してみた | Qiita

(桑折和宗)

この記事を読んだあなたにおすすめのタグ

この記事を読んだあなたにおすすめのタグ

「テクノロジー」ランキング

人気のカテゴリ