【機械学習入門第3回】決定木をpythonで実装する

機械学習の基礎を学ぶための「機械学習入門」。以下のページを参考にして、日本語解説を加えました。ソースコードも以下にあります。

Your First Machine Learning Model
Explore and run machine learning code with Kaggle Notebooks | Using data from multiple data sources

今回は、機械学習モデルとして「決定木」を学びます。データの読み込みから、決定木モデルを学習するところまで、一通り試してみましょう。

データを選択する

データセットの変数が多すぎて、頭を包み込んだり、うまく印刷したりすることさえできませんでした。 この圧倒的な量のデータを、理解できるものにどのように削減できますか?

直感を使用していくつかの変数を選択することから始めます。 後のコースでは、変数に自動的に優先順位を付けるための統計手法を紹介します。

変数/列を選択するには、データセット内のすべての列のリストを表示する必要があります。 これは、DataFrameのcolumnsプロパティ(以下のコードの一番下の行)を使用して行われます。データは下記からダウンロードできます。

Melbourne Housing Snapshot
Snapshot of Tony Pino's Melbourne Housing Dataset
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
melbourne_data = melbourne_data.dropna(axis=0)

データのサブセットを選択する方法はたくさんあります。 パンダコースではこれらについてさらに詳しく説明しますが、ここでは2つのアプローチに焦点を当てます。

「予測対象」の選択に使用するドット表記
「機能」を選択するために使用する列リストを使用した選択

予測ターゲットの選択

ドット表記で変数を引き出すことができます。 この単一の列はシリーズに格納されます。これは、データの単一の列のみを持つDataFrameに広く似ています。

ドット表記を使用して、予測する列を選択します。これは、予測ターゲットと呼ばれます。 慣例により、予測ターゲットはyと呼ばれます。 したがって、メルボルンのデータに住宅価格を保存するために必要なコードは次のとおりです。

y = melbourne_data.Price

特徴量の選択

モデルに入力された(そして後で予測を行うために使用される)列は、「特徴」と呼ばれます。 私たちの場合、それらは住宅価格を決定するために使用される列になります。 ターゲットを除くすべての列を機能として使用する場合があります。 また、機能が少ない方が良い場合もあります。

今のところ、いくつかの機能のみを備えたモデルを作成します。 後で、さまざまな機能で構築されたモデルを反復して比較する方法を説明します。

角かっこで囲まれた列名のリストを提供することにより、複数の機能を選択します。 そのリストの各項目は文字列(引用符付き)である必要があります。

次に例を示します。

melbourne_features = ['Rooms', 'Bathroom', 'Landsize', 'Lattitude', 'Longtitude']

慣例により、このデータはXと呼ばれます。

X = melbourne_data[melbourne_features]

上位数行を表示するdescribeメソッドとheadメソッドを使用して住宅価格を予測するために使用するデータを簡単に確認してみましょう。

X.describe()
X.head()

これらのコマンドを使用してデータを視覚的に確認することは、データサイエンティストの仕事の重要な部分です。 データセットには、さらに調査する価値のある驚きが頻繁にあります。

モデルの構築

scikit-learnライブラリを使用してモデルを作成します。 サンプルコードに示されているように、コーディング時には、このライブラリはsklearnとして記述されます。 Scikit-learnは、DataFrameに通常保存されるデータの種類をモデル化するための最も人気のあるライブラリです。

モデルを作成して使用する手順は次のとおりです。

定義:どのタイプのモデルになりますか? デシジョンツリー? 他のタイプのモデル? モデルタイプの他のいくつかのパラメータも指定されています。
適合:提供されたデータからパターンをキャプチャします。 これがモデリングの中心です。
予測:それがどのように聞こえるか
評価:モデルの予測がどれほど正確であるかを判断します。
これは、scikit-learnを使用して決定木モデルを定義し、それを機能とターゲット変数に適合させる例です。

from sklearn.tree import DecisionTreeRegressor

melbourne_model = DecisionTreeRegressor(random_state=1)

melbourne_model.fit(X, y)

多くの機械学習モデルでは、モデルのトレーニングにある程度のランダム性があります。 random_stateに数値を指定すると、各実行で同じ結果が得られます。 これは良い習慣と考えられています。 任意の数を使用します。モデルの品質は、選択した値に正確に依存することはありません。

これで、予測に使用できる近似モデルができました。

実際には、すでに価格が設定されている家ではなく、市場に出回る新しい家を予測する必要があります。 ただし、トレーニングデータの最初の数行を予測して、予測関数がどのように機能するかを確認します。

print("Making predictions for the following 5 houses:")
print(X.head())
print("The predictions are")
print(melbourne_model.predict(X.head()))

コメント

タイトルとURLをコピーしました