SkLearning预处理-PolynomialFeature-如何保留输出数组/数据帧的列名/标题数组、标题、数据、SkLearning

2023-09-03 14:58:22 作者:回忆撕扯着伤口

TLDR:如何从sklearn.precessing.PolynomialFeature()函数获取输出NumPy数组的头?

假设我有以下代码...

import pandas as pd
import numpy as np
from sklearn import preprocessing as pp

a = np.ones(3)
b = np.ones(3) * 2
c = np.ones(3) * 3

input_df = pd.DataFrame([a,b,c])
input_df = input_df.T
input_df.columns=['a', 'b', 'c']

input_df

    a   b   c
0   1   2   3
1   1   2   3
2   1   2   3

poly = pp.PolynomialFeatures(2)
output_nparray = poly.fit_transform(input_df)
print output_nparray

[[ 1.  1.  2.  3.  1.  2.  3.  4.  6.  9.]
 [ 1.  1.  2.  3.  1.  2.  3.  4.  6.  9.]
 [ 1.  1.  2.  3.  1.  2.  3.  4.  6.  9.]]
sklearn中的数据预处理和特征工程

如何才能使3x10矩阵/输出_nparray传递a、b、c标签与上述数据之间关系?

推荐答案

工作示例,全部在一行中(我假设这里的目标不是"可读性"):

target_feature_names = ['x'.join(['{}^{}'.format(pair[0],pair[1]) for pair in tuple if pair[1]!=0]) for tuple in [zip(input_df.columns,p) for p in poly.powers_]]
output_df = pd.DataFrame(output_nparray, columns = target_feature_names)

更新:正如@OmerB指出的,现在您可以使用get_feature_namesmethod:

>> poly.get_feature_names(input_df.columns)
['1', 'a', 'b', 'c', 'a^2', 'a b', 'a c', 'b^2', 'b c', 'c^2']