使用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())