使用sklearn.preprocessing.PolynomialFeatures来进行特征的构造。
它是使用多项式的方法来进行的,如果有a,b两个特征,那么它的2次多项式为(1,a,b,a^2,ab, b^2)。
PolynomialFeatures有三个参数
degree:控制多项式的度
interaction_only: 默认为False,如果指定为True,那么就不会有特征自己和自己结合的项,上面的二次项中没有a^2和b^2。
include_bias:默认为True。如果为True的话,那么就会有上面的 1那一项。
代码演示
数据说明:我们使用了游戏数据中的攻击和防御两个特征用来构造多项式特征,使用的多项式为2
代码:
第一步:导入数据
第二步:分离出[‘Attack’, ‘Defense’]两个特征
第三步:使用 PolynomialFeatures 进行多项式的变化,
第四步:使用pd.DataFrame对获得的列表添加列名,用于展示
- import numpy as np
- import pandas as pd
- import matplotlib.pyplot as plt
- poke_df = pd.read_csv('datasets/Pokemon.csv', encoding='utf-8')
- att_de = poke_df[['Attack', 'Defense']]
- # 对att_de进行两两特征之间的多项式特征扩展,可以认为是把特征投向高维
- from sklearn.preprocessing import PolynomialFeatures
- #degree 表示多项式的维度,即^2, interaction_only表示是否仅使用a*b,include_bias表示是否引入偏执项1
- po = PolynomialFeatures(degree=2, interaction_only=False, include_bias=False)
- att_de_po = po.fit_transform(att_de)
- print(att_de_po[:5])
- # 使用pd.DataFrame将数据转换为pd格式
- att_de_po_pd = pd.DataFrame(att_de_po, columns=['Attack', 'Defense', 'Attack^2', 'Att_Def', 'Defense^2'])
- print(att_de_po_pd.head())