search
LoginSignup
12

More than 1 year has passed since last update.

posted at

updated at

直観でわかる、Pandas → Scikit-learnへの渡し方

何があったか

手元に PandasDataFrame がある条件で、ひさしぶりに Scikit-learn を使おうとしたら、どういう形で渡すんだっけ?と少し迷いました。同じ境遇のとき、直観的に思い出せるように書き出します。

前提

手元にDataFrame がある前提です( 今回はダミーデータで DataFrame を自作します )。
直観的理解を目指して、サンプルでは説明変数3つ ( X1, X2, X3 ) だけの、超簡易なものを使います。
目的変数 ( Y ) はバイナリラベル ( 1, 0 ) とします。

import pandas as pd
data = [[1,1,0,0], [0,0,0,1], [0,0,1,1]]
index = ["a", "b", "c"]
columns = ["Y","X1","X2","X3"] 
df = pd.DataFrame(data, index=index, columns=columns)
Y X1 X2 X3
a 1 1 0 0
b 0 0 0 1
c 0 0 1 1

DF→Sklearn

この DataFrame から、学習データ ( X_train ) とラベルデータ ( y_train )Numpy Array として作成し、sklearnに渡して学習させます。
モデルはここでは、決定木分類にしておきましょう。
ちなみに、決定木やランダムフォレストは、そのアルゴリズム性質上、データを正規化しなくてよいので、とりあえずモデルを作ってみるというような時にはおすすめです。

from sklearn.tree import DecisionTreeClassifier
y_train = df["Y"].values
X_train = df.drop("Y", axis=1).values
model = DecisionTreeClassifier().fit(X_train, y_train)

ちゃんと学習できたのか、以下の新しいデータをテストデータとして、モデルに予測させてみます ( 予測というか暗記ですが… )。3つのインスタンスの Y を予測しますが、仮に d, e, f とすると、d=0, e=1, f=0になると想像できます。

new_data = [[0,0,1], [1,0,0], [0,1,1]]
model.predict(new_data)
# 出力は array([0, 1, 0], dtype=int64)

ちゃんと学習できているようです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
12