0
点赞
收藏
分享

微信扫一扫

python_多项式交叉特征


# 定义:

# 多项式特征可以理解为对现有特征的乘积,比如现在有特征A,特征B,特征C,那就可以得到特征A的平方(A^2),A*B,A*C,B^2,B*C以及C^2. 新生成的这些变量即原有变量的有机组合,换句话说,当两个变量各自与y的关系并不强时候,把它们结合成为一个新的变量可能更会容易体现出它们与y的关系.

# 变量与结果 之间不是线性关系, 或者两个变量之间相互依赖时, 用多项式交叉特征

# 多项式特征和 交叉特征
import numpy as np
from sklearn.preprocessing import PolynomialFeatures

# 특성 행렬을 만듭니다.
features = np.array([[2, 3],
[2, 3],
[2, 3]])
features
# 创建 PolynomialFeatures 对象
polynomial_interaction = PolynomialFeatures(degree=2, include_bias=False)

# 创建 2阶的多项式特征和 交叉特征
polynomial_interaction.fit_transform(features)
array([[2., 3., 4., 6., 9.],
[2., 3., 4., 6., 9.],
[2., 3., 4., 6., 9.]])

# interaction_only=True 创建只包含多项式的特征
interaction = PolynomialFeatures(degree=2,
interaction_only=True, include_bias=False)
interaction.fit_transform(features)
array([[2., 3., 6.],
[2., 3., 6.],
[2., 3., 6.]])

python_多项式交叉特征

import numpy as np
import pandas as pd
from sklearn.preprocessing import PolynomialFeatures
#polynomial feature 多项式交叉特征

def col_pf(p=3,col=None,title='PF'):
'''不含常数项,含自乘项'''
assert p<=3
assert p>1
l=len(col)+1
col=[]
# for i in range(1,l):
# col.append(title+str(i))
if p>=2:
col=col+[title+str(i)+str(j) for i in range(1,l) for j in range(i+1,l)]
if p>=3:
col=col+[title+str(i)+str(j)+str(k) for i in range(1,l) for j in range(i+1,l) for k in range(j+1,l)]
return col

def poly_fea(input=None,degree=2,title='PF'):
poly=PolynomialFeatures(degree=degree,interaction_only=True,include_bias=False)
pf_trans=poly.fit_transform(input)
pf_trans=pf_trans[:,input.shape[1]:]

col=col_pf(p=degree,col=input.columns,title=title)

return pd.DataFrame(pf_trans,index=input.index,columns=col)


举报

相关推荐

0 条评论