Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在使用sklearn进行一次热编码后给出列名?_Python_Encoding_Scikit Learn_One Hot Encoding - Fatal编程技术网

Python 如何在使用sklearn进行一次热编码后给出列名?

Python 如何在使用sklearn进行一次热编码后给出列名?,python,encoding,scikit-learn,one-hot-encoding,Python,Encoding,Scikit Learn,One Hot Encoding,这是我的问题,我希望有人能帮我解决 为了说明这一点,我的数据集中有10多个分类列,每个列都有200-300个类别。我想把它们转换成二进制值。为此,我使用第一个标签编码器将字符串类别转换为数字。标签编码器代码和输出如下所示 在标签编码器之后,我使用了一个来自scikit的热编码器再次学习,它工作正常。但问题是,我需要一个热编码器后的列名。例如,列A在编码之前具有分类值A=[1,2,3,4,…] 编码后应该是这样的, A-1,A-2,A-3 任何人都知道如何在一次热编码后将列名分配给(旧列名-值名

这是我的问题,我希望有人能帮我解决

为了说明这一点,我的数据集中有10多个分类列,每个列都有200-300个类别。我想把它们转换成二进制值。为此,我使用第一个标签编码器将字符串类别转换为数字。标签编码器代码和输出如下所示

在标签编码器之后,我使用了一个来自scikit的热编码器再次学习,它工作正常。但问题是,我需要一个热编码器后的列名。例如,列A在编码之前具有分类值<代码>A=[1,2,3,4,…]

编码后应该是这样的,

A-1,A-2,A-3

任何人都知道如何在一次热编码后将列名分配给(旧列名-值名称或数字)。这是我的一个热编码和它的输出


我需要有名称的列,因为我训练了一个ANN,但每次出现数据时,我不能一次又一次地转换所有过去的数据。所以,我每次只想添加新的。无论如何谢谢。

您可以使用
.get\u feature\u names()
属性获取列名

>>> ohenc.get_feature_names()
>>> x_cat_df.columns = ohenc.get_feature_names()

详细示例如下。

此示例有助于未来读者:

将熊猫作为pd导入
从sklearn.preprocessing导入OneHotEncoder
train_X=pd.DataFrame({'Sex':['male','femal']*3,'AgeGroup':[0,15,30,45,60,75]})
encoder=onehotcoder(稀疏=False)
train_X_encoded=pd.DataFrame(编码器.fit_变换(train_X['Sex']]))
train_X_encoded.columns=encoder.get_feature_name(['Sex'])
列车X.下降(['Sex'],轴=1,原地=True)
OH_X_train=pd.concat([train_X,train_X_编码],轴=1)

嘿,我遇到了同样的问题,我有一个自定义估计器,它从Sklearn.base扩展了BaseEstimator类

我在init中添加了一个名为self.feature\u name的class属性,然后作为转换方法的最后一步,我用结果中的列更新了self.feature\u name

from sklearn.base import BaseEstimator, TransformerMixin
import pandas as pd

class CustomOneHotEncoder(BaseEstimator, TransformerMixin):

    def __init__(self, **kwargs):
        self.feature_names = []

    def fit(self, X, y=None):
        return self

    def transform(self, X):

        result = pd.get_dummies(X)
        self.feature_names = result.columns

        return result

有点基本,我知道,但它做的工作,我需要它

如果要从sklearn管道中检索要素重要性的列名,可以从分类器步骤中获取要素,从一个热编码步骤中获取列名

a = model.best_estimator_.named_steps["clf"].feature_importances_
b = model.best_estimator_.named_steps["ohc"].feature_names

df = pd.DataFrame(a,b)
df.sort_values(by=[0], ascending=False).head(20)


请从代码编辑器中复制实际文本,将其粘贴到问题中,然后将其格式化为代码。这有助于其他人更轻松地阅读和测试您的代码。尝试运行此示例时说:“ValueError:无法将字符串转换为浮点值:”“female”
from sklearn.base import BaseEstimator, TransformerMixin
import pandas as pd

class CustomOneHotEncoder(BaseEstimator, TransformerMixin):

    def __init__(self, **kwargs):
        self.feature_names = []

    def fit(self, X, y=None):
        return self

    def transform(self, X):

        result = pd.get_dummies(X)
        self.feature_names = result.columns

        return result

a = model.best_estimator_.named_steps["clf"].feature_importances_
b = model.best_estimator_.named_steps["ohc"].feature_names

df = pd.DataFrame(a,b)
df.sort_values(by=[0], ascending=False).head(20)