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