何があったか
手元に Pandas の DataFrame がある条件で、ひさしぶりに 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)
ちゃんと学習できているようです。