多項式特徴量の抽出
Scikit-learnには、特徴量間の交互作用項を自動で生成するためのクラス(PolynomialFeatures)があります。
今回はこちらで多項式特徴量の抽出を行ってみたいと思います。
実行環境はGoogle Corabです。
使用するのはお馴染みのTitanicのデータセットです。
import pandas as pd
train = pd.read_csv("./train.csv")
train.head()
![](https://assets.st-note.com/img/1708691336754-s6xuSqFs9Y.png?width=1200)
下記の特徴量を対象に多項式の特徴量の抽出を行ってみたいと思います。
SexとAgeについては前処理しておきます。
train['Sex'].replace(['male','female'], [0, 1], inplace=True)
train['Age'].fillna(train['Age'].median(), inplace=True)
Pclass – チケットクラス
Sex – 性別
Age – 年齢
SibSp – タイタニックに同乗している兄弟/配偶者の数
parch – タイタニックに同乗している親/子供の数
では、抽出を行なっていきます。
from sklearn.preprocessing import PolynomialFeatures
p = PolynomialFeatures(2)
PolynomialFeaturesの引数で次数を指定できます。デフォルトは2です。
2次の項まで乗算した組み合わせが出力されます。
poly_features = p.fit_transform(train[['Pclass', 'Sex', 'Age', 'SibSp', 'Parch']])
抽出した特徴量名を出力してみます。
p.get_feature_names_out().tolist()
['1',
'Pclass',
'Sex',
'Age',
'SibSp',
'Parch',
'Pclass^2',
'Pclass Sex',
'Pclass Age',
'Pclass SibSp',
'Pclass Parch',
'Sex^2',
'Sex Age',
'Sex SibSp',
'Sex Parch',
'Age^2',
'Age SibSp',
'Age Parch',
'SibSp^2',
'SibSp Parch',
'Parch^2']
pd.DataFrame(poly_features, columns=p.get_feature_names_out())
![](https://assets.st-note.com/img/1708692087152-YNkLsW9X3r.png?width=1200)
各特徴量を2次の項まで乗算した、組み合わせの出力が得られました。