Python

【入門者向け】scikit-learnの使い方について徹底解説して実装していく!

Scikit-learn 入門
ウマたん
ウマたん
本記事では、Pythonのライブラリ「Scikit-learn」について解説していきます。Scikit-learnは簡単に機械学習モデルを構築することの出来るライブラリで非常に重宝します。本記事の最後では実際に機械学習手法「ランダムフォレスト」をScikit-learnを使って実装してみましょう!

こんにちは!

データサイエンティストのウマたん(@statistics1012)です。

機械学習手法を簡単に呼び出して使うことのできる必須ライブラリ「Scikit-learn」について解説していきます!

データ加工に使う時もありますよ!

データ分析の工程において、やっぱりモデル構築というのは花形でありデータ分析の醍醐味です。

無数の機械学習手法がある中で「どの手法を選ぶか」は非常に大事。

ロボたん
ロボたん
手法がたくさんあってどれを使えばよいのか分からないよー!
ウマたん
ウマたん
どの手法をどの場面で使えばよいのか理解していこう!

この記事を読めばScikit-learnの正しい使い方や実装方法が分かるようになります!

Scikit-learnとは

Scikit-learn

Scikit-learnはPythonのオープンソース機械学習ライブラリです。

Scikit-learnの読み方は「サイキットラーン」。

誰でも自由に使えて、使える機械学習手法が多岐にわたるのでまずはScikit-learnをおさえておけば、ほとんどの機械学習手法を実装することが可能です。

ただ深層学習まわりはScikit-learnでは実装できないので、TensorflowやKerasなどを利用することになります。

Scikit-learnの使い方

python

それでは、そんなScikit-learnの使い方について見ていきましょう!

Scikit-learnはPythonのsklearnからモジュールを呼び出して使います。

たとえばこのように記述することで線形回帰分析が使えるようになります。

Scikit-learnで使える機械学習手法については公式ドキュメントの以下のチートシートが役立ちます。

Scikit-learn出展:https://scikit-learn.org/stable/tutorial/machine_learning_map/

まずスタートして、サンプル数が50未満ならデータをもっと集めます。

そこから質的変数なのか量的変数なのか、ラベル付きの教師あり学習なのか否かなどの基準を基に分岐していきます。

何となく感覚で選んでいる機械学習手法が、このチートシートによって分かりやすく分類されます。

ぜひ、Scikit-learnを使って機械学習モデルを構築する際はこのチートシートを参考にデータを分類してみてください!

Scikit-learnを簡単に実装

pc python

それでは実際にScikit-learnを実装していきましょう!

決定木バギングを組み合わせた強力な機械学習手法である「ランダムフォレスト」を使って定番のirisデータを分類していきます。

irisデータとはあやめの種類を分類したデータで目的変数は3カテゴリーの質的変数、説明変数は花びらの幅とか4つです。

サンプルは150個で、分類しやすいデータなのでどんな手法でも割と簡単に分類できます。

先ほどのチートシートに沿って見ていくと・・・

50サンプル以上あって目的変数が質的変数でラベル付きなので、まずは左上のClassificationに分類されますね。

そしてサンプルは100,000未満なのでLinear SVCが良いと出てきます。

Linear SVCとは線形分離をするサポートベクターマシンです。

ワークしなかったら次に進めとチートシートには書いてありますが、次に進んでみましょう。

テキストデータではないので、k近傍法になります。

k近傍法は周りの学習データのクラスからその未知データの分類を決定する手法で非常にシンプルで使いやすい手法。

kとは手法に与えるパラメーターで、近くに存在する学習データのクラス数を示しています。

K近傍法

ここからワークしなかったら進めと書いている最終地点までいくと・・・ensemble classificationが登場しました!

このensemble classification(アンサンブル クラシフィケーション)に内包されるのが「ランダムフォレスト」!

決定木をバギング(アンサンブル学習の1つ)した手法なんです。

今回はirisデータにはオーバースペックですが、このランダムフォレストを実際に使っていきましょう!

これだけの記述でirisデータの分類モデルを構築して未知データの分類まで出来ちゃいました。

分類精度は0.9734

分類しやすいデータなのでどの手法を使ってもそれなりの精度が出るのですが、まずまずの精度ですね!

どのような処理をおこなっているのか順を追って見ていきましょう!

まずは、こちらでランダムフォレストの関数を呼び出しています。

datasetsには様々なデータセットが格納されていてirisデータはここから呼び出します。

また最後のtrain_test_splitは学習データと未知データにデータセットを分類するためのものです。

モデル構築に使ったデータをモデル評価に使ってしまうと、現状のデータに過度にフィッティングしてしまう”過学習”という問題が起きます。

予測精度の高いモデルを構築するためには、学習データと未知データを必ず分けるようにしましょう!

irisデータを読み込み、目的変数と説明変数に分け、学習データと未知データに分類しています。

ここで実際にモデル構築をしています。

n_estimatorsはバギングに用いる決定木の数です。

デフォルトでは10になっています。

最後に未知データに対してどれだけの予測精度をたたき出すことができたか算出しています。

Scikit-learnを使えば、こんなに簡単に複雑な機械学習手法を使うことが出来ちゃうんです!

ぜひScikit-learnを使ってランダムフォレスト以外の手法も使ってみてください!

Scikit-learn まとめ

Scikit-learnの使い方や実際の実装について見てきました。

機械学習の手法はたくさんあるので、どれを使えばよいか迷うことも多いでしょう。

そんな時はぜひこのScikit-learnチートシートを見てみてください!

Scikit-learn
ロボたん
ロボたん
たくさんある手法のうちどれを使えばいいのか分かりやすい!
ウマたん
ウマたん
Scikit-learnをマスターして適切な場面で適切な機械学習手法を使えるようになろう!

機械学習手法について以下の記事で詳しくまとめていますのでこちらも合わせてチェックしてみてください!

機械学習
機械学習入門に必要な知識と勉強方法をPythonとRの実装と一緒に見ていこう!当サイト【スタビジ】の本記事では、入門者向けに機械学習についてカンタンにまとめていきます。最終的にはどのように機械学習を学んでいけばよいかも見ていきます。細かい手法の実装もPython/Rを用いておこなっていくので適宜参考にしてみてください。...
Pythonを初学者が最短で習得する勉強法

Pythonを使うと様々なことができます。しかしどんなことをやりたいかという明確な目的がないと勉強は捗りません。

Pythonを習得するためのロードマップをまとめましたのでぜひチェックしてみてくださいね!