アメリカのデータ分析コンペKaggleでは、世界中の優秀なデータサイエンティストによって作成された様々なeラーニング教材が無料で公開されています。
その中でも、この記事では以下の講座について解説します。

ただ、全編英語ですし、ところどころ説明を省略しているところもあるので、私なりにかみ砕いて解説していきます。
この記事で取り扱うクラスは以下の通りです。
sklearn.tree.DecisionTreeRegressor
How Models Work(モデルの動かし方)
Introduction(イントロダクション)
まずは、機械学習のモデルがどのように機能し、どのように使用されるのか、その概要を説明します。ここで使用するのは最もシンプルなモデルの1つである決定木です。
例として、不動産価格を決定木で予測してみる場合を考えてみましょう。
わかりやすくするために、最もシンプルな決定木から始めます。下図の決定木では、ベッドルームの数によって枝が2つに分岐し、家の価格を予想しています。
ここで、家の予測価格は、決定木を作るときに使ったデータのうち、同じカテゴリーに分類される家の平均価格となっています。
つまり、使用したデータでベッドルームが1つしかない家の平均価格は$178,000、2つ以上ある家は$188,000となっていることから、上記のモデルが作られたのです。シンプルな決定木ではありますが、あながち的外れではないということが分かるかと思います。
ここで、この決定木を作るために使ったデータを「トレーニング(訓練)データ」と呼びます。
Improving the Decision Tree(決定木を改良する)
実際のトレーニング(訓練)データには、ベッドルームの数だけでなく、土地の広さ、立地条件など多くの要素が入っていますので、作成する決定木は上記のものより、もっと深くなります。
Basic Data Exploration(基本的なデータ探索)
Using Pandas to Get Familiar With Your Data(Pandasを使ってデータの扱いに慣れよう)
データを操作するのに便利なPandasの使い方を勉強します。
Pandasライブラリの最も重要な部分は、DataFrameです。DataFrameはテーブルとして考えられるタイプのデータを保持します。ExcelやSQLデータベースのテーブルに似たものです。
まずはPandasのライブラリをインポートしましょう。
import pandas as pd
次に、csvファイルからデータを読み込み、データの統計情報を出力します。
# save filepath to variable for easier access melbourne_file_path = '../input/melbourne-housing-snapshot/melb_data.csv' # read the data and store data in DataFrame titled melbourne_data melbourne_data = pd.read_csv(melbourne_file_path) # print a summary of the data in Melbourne data melbourne_data.describe()
Interpreting Data Description(データを解釈する)
describeで読みだしたデータの意味は以下の通りです。
カラム | 意味 |
count | データの個数 |
mean | 平均値 |
std | 標準偏差(データの広がり度合い) |
min | 最小値 |
25% | 下から25%番目の値 |
50% | 下から50%番目の値(中央値) |
75% | 下から75%番目の値 |
max | 最大値 |

countが他の列に比べて少ないと、その列には欠損値があるということが分かります。
Your Turn(練習問題)
最後に、Kaggle notebook上で実際のコードを使った練習問題を解いてみましょう。
Your First Machine Learning Model(初めての機械学習モデル)
Selecting Data for Modeling(モデル構築のためのデータを選ぶ)
先ほどは決定木のモデル構築のために「ベッドルームの数が2個以上あるかどうか(Bedroom2)」というデータだけを選びました。
新しくどのデータを選ぶかを考える前に、DataFrameのcolumnsプロパティ(下記コードの4行目)を使用して、データセット内のすべての列のリストを見てみます。
import pandas as pd
melbourne_file_path = '../input/melbourne-housing-snapshot/melb_data.csv'
melbourne_data = pd.read_csv(melbourne_file_path)
melbourne_data.columns
データを選ぶには2つのアプローチがあります。
- ドット記法: 予測対象(y)を選ぶ
- カラムリストからの選択: 特徴量(X)を選ぶ
Selecting The Prediction Target(予測対象を選ぶ)
まず、機械学習で何を予測するかを決めます。
ドット記法(”.”ドットを使ってプロパティにアクセスする)を使って、予測対象(y)を選択します。
下記のコードで、メルボルン(melbourne_data)の住宅価格(Price)をyに格納します。
y = melbourne_data.Price
Choosing “Features”(特徴量を選ぶ)
次に、モデルで予測に使用する列(特徴量)を選びます。
今回の例では、住宅価格Priceを決定するために使用する列を選びます。すべての列を特徴量として使用することもできますが、あえて特徴量を少なくした方が良い場合もあります。
複数の特徴量を選択するには、下記のように角括弧 [] の中に引用符 ” 付きで列名を指定します。
melbourne_features = ['Rooms', 'Bathroom', 'Landsize', 'Lattitude', 'Longtitude']
次に、選択した特徴量をXに格納します。
X = melbourne_data[melbourne_features]
describeで統計情報を出力してみましょう。
X.describe()

すべて数値データですね。また、データの欠落はなさそうです。
次にheadメソッドで、データの上位5行を確認してます。
X.head()
Building Your Model(モデルを構築する)
次に、scikit-learnというライブラリを使って、機械学習モデルを構築していきます。
下記はモデル構築の流れです。
1.定義 | どの機械学習モデルを使うのかを決め、パラメータを指定する |
2.学習 | 与えられたデータからパターンを学習する |
3.予測 | 学習済みのモデルを使って未知のデータを予測します |
4.評価 | モデルの予測がどの程度正確かを評価します。 |
以下のコードでは、このうち1、2を表現しています。scikit-learnで決定木モデルDecisionTreeRegressorを定義し、特徴量Xと予測対象yを指定して学習しています。
from sklearn.tree import DecisionTreeRegressor
# Define model. Specify a number for random_state to ensure same results each run
melbourne_model = DecisionTreeRegressor(random_state=1)
# Fit model
melbourne_model.fit(X, y)

ようやく決定木のモデルの完成です!ちなみに、random_stateに整数の値を指定すると毎回の実行結果が同じになるため、モデルに再現性が生まれるので、オススメです。
いよいよ、このモデルを使って住宅価格を予測(モデル構築の3番目)してみましょう。実際は、すでに住宅価格が分かっている住宅(訓練データ)ではなく、未知の住宅(テストデータ)に対して予測を行いますが、今回は訓練データを使って予測を行います。

決定木を使った予測結果が出ましたね。
Your Turn(練習問題)
最後にKaggle notebook上で実際のコードを使った練習問題があるので、知識の定着のためにもトライしてみてください。

今回は決定木を使った機械学習モデルの構築について学びました。機械学習の流れの基礎が抑えられる、いい講座だったと思います。次回はモデルの評価や、オーバーフィット、アンダーフィットについて学んでいきます。
以上、最後までお読みいただきありがとうございました。
コメント