【问题标题】:How can I encode my data for machine learning methods?如何为机器学习方法编码我的数据?
【发布时间】:2018-10-30 01:35:44
【问题描述】:

我想对机器学习方法的字符串输入字母进行编码。假设我的火车数据是这样的:

  score     text
    1   show photos
    1   show my photos
    2   who are you?

目前我正在做这样的事情:

for index, row in train_set.iterrows():

    list2 = []

    list2 = list(row.text.lower())

    for n, key in enumerate(list2):

        if key in dictionary:

            list2[n] = dictionary[key]

        else:

            dictionary[key] = i
            list2[n] = i
            i += 1

    train_set.set_value(index,'text', list2)

作为这个示例数据的结果,我得到:

  score                 text
    1    [0, 1, 2, 3, 4, 5, 1, 2, 6, 2, 0]
    1    [0, 1, 2, 3, 4, 7, 8, 4, 5, 1, 2, 6, 2, 0]
    2    [3, 1, 2, 4, 10, 13, 9, 4, 8, 2, 19, 21]

正如您所知道的,例如对于神经网络,使用此值不是一种正确的方法,因此在我看来,在这种情况下,一种热编码将是最佳解决方案。我想知道在text 数据帧的text 列和train_set 数据帧的text 列中转换这些值的最有效方法是什么,看起来像test_set 但显然没有预期的第一列价值观。我认为在这两种情况下,在使用一种热编码后我应该具有相同大小的列,并且相同的索引和行应该对应于 test_settrain_set 数据帧中的相同字符。我希望你明白我的意思。如果没有,请告诉我。我将尝试以更清晰的方式解释它。有什么想法我该怎么做?

【问题讨论】:

标签: python python-3.x machine-learning scikit-learn one-hot-encoding


【解决方案1】:

一种解决方案是使用自定义 Prepper 类来对您的训练集进行编码。随着训练集被编码,Prepper 类对象记录(word,one-hot index)对应关系。

然后您将使用相同的 Prepper 对象来编码您的测试集。

Prepper class的粗糙sketelon是:

from collections import defaultdict

class Prepper(object):

   def __init__(self):
      self.vocab = defaultdict(lambda : len(self.vocab))

   def encode_train_word(self, train_word):
      return self.vocab[train_word]

   def encode_test_word(self, test_word):
      if test_word in self.vocab:
         return self.vocab[test_words]
      else:
         return -1 # index for unknown token

如果我必须重新拍摄代码SN-P,那么它看起来像:

prepper = Prepper()

for index, row in train_set.iterrows():
   list2 = list(row.text.lower())
   encoded_list_2 = [prepper.encode_train_word(word) for word in list2]

   train_set.set_value(index, 'text', encoded_list_2)

## and for the test set

for index, row in test_set.iterrows():
   list2 = list(row.text.lower())
   encoded_list_2 = [prepper.encode_test_word(word) for word in list2]

   test_set.set_value(index, 'text', encoded_list_2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 2018-11-04
    • 2017-06-07
    • 2020-06-10
    • 2022-12-03
    • 2014-02-17
    相关资源
    最近更新 更多