【问题标题】:How to replace float with binary matrix in pandas dataframe for keras model?如何在 keras 模型的熊猫数据框中用二进制矩阵替换浮点数?
【发布时间】:2020-05-20 10:13:11
【问题描述】:

对于学校项目,需要将 keras 模型训练到 Titanic 数据集。 我正在尝试将分类列编码为二进制矩阵并替换当前的字符串值,遗憾的是我无法管理它。在下面的示例中,我将“男性”和“女性”编码为二进制表示。

to_categorical 的结果:

[[0. 1.]
 [1. 0.]
 [1. 0.]
 ...
 [1. 0.]
 [1. 0.]
 [0. 1.]]

替换当前值时的结果:

0      0.0
1      1.0
2      1.0
3      1.0
4      0.0
      ... 
622    0.0
623    0.0
624    1.0
625    1.0
626    0.0

想要的结果:

0      [0. 1.]
1      [1. 0.]
2      [1. 0.]
3      [1. 0.]
4      [0. 1.]
      ... 
622    [0. 1.]
623    [0. 1.]
624    [1. 0.]
625    [1. 0.]
626    [0. 1.]

我对 Python 和 Keras 非常陌生。任何帮助将不胜感激。

label_encoder = LabelEncoder()
CATEGORICAL_COLUMNS = ['sex', 'class', 'deck', 'embark_town', 'alone']
NUMERIC_COLUMNS = ['age', 'n_siblings_spouses', 'parch', 'fare']

df = pd.read_csv('https://storage.googleapis.com/tf-datasets/titanic/train.csv')
properties = list(df.columns.values)
properties.remove('survived')


def transform_fn(label):
    vec = label_encoder.fit_transform(df[label])
    categorical = tf.keras.utils.to_categorical(vec)
    print(label + ": ", categorical)
    df[label] = tf.keras.utils.to_categorical(vec)


for c in CATEGORICAL_COLUMNS:
    transform_fn(c)

x = df[properties]
y = df['survived']

print(x['sex'])

【问题讨论】:

    标签: python pandas keras


    【解决方案1】:

    你可以试试pd.get_dummies(df)。此函数将分类变量转换为虚拟/指示变量。

    因此,如果您有 Sex 列,pd.get_dummies 将返回另一个带有 Sex_MaleSex_Female 列的 DataFrame。

    但是这样的转换提供了冗余信息。因此,数据科学家可以使用pd.get_dummies(df, drop_first=True) 来删除第一列,例如示例中的Sex_Male

    以后你可以使用df[<Col_name>].astype(<type>) 来获取你想要的任何类型。

    要仅从一列中获取虚拟对象,请执行以下操作:

    df_sex = pd.get_dummies(df['sex'])
    df_tmp = df.drop('sex', axis=1)
    df = pd.merge(df_sex, df_tmp, left_index=True, right_index=True)
    

    【讨论】:

    • 我试过了,它给了我数据框。但是我该如何替换我拥有的值。我试过 df['sex'] = pd.get_dummies(df['sex'])。然而,这只是用数据集第一列中的 1 和 0 替换了男性和女性。
    • 除了性别之外,还有更多标签,例如“class”、“embark_town”、“deck”等。所以当我尝试将所有单独的列放在一起时,例如:“sex_female”、“ sex_male','class_First','class_Second','class_Third','deck_A','deck_B','deck_C','deck_D','deck_E','deck_F'。这似乎不是解决方案。
    • 我改变了答案。看看
    猜你喜欢
    • 2020-12-09
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 2021-07-22
    相关资源
    最近更新 更多