Python 使用sklearn的OneHotEncoder时出现的问题

Python 使用sklearn的OneHotEncoder时出现的问题,python,machine-learning,scikit-learn,Python,Machine Learning,Scikit Learn,我试图一个字符一个字符地对一些文本进行热编码。我首先将文本映射为整数值 with open('data/texts/anna.txt') as data: text = data.read() vocab = tuple(set(text)) int2char = dict(enumerate(vocab)) char2int = {i: char for char, i in int2char.items()} encoded = np.array([char2int[

我试图一个字符一个字符地对一些文本进行热编码。我首先将文本映射为整数值

with open('data/texts/anna.txt') as data:
    text = data.read()

vocab    = tuple(set(text))
int2char = dict(enumerate(vocab))
char2int = {i: char for char, i in int2char.items()}

encoded    = np.array([char2int[i] for i in text]).reshape(1, -1)
categories = np.array([char2int[i] for i in vocab])

# encoder = OneHotEncoder(categories) 
encoder = OneHotEncoder()
encoder.fit(encoded)

test = encoder.transform(encoded[:10])
两件事:

  • 这个操作在拟合和变换方面都非常慢,所以我一定是做错了什么
  • 测试结果是所有结果的(11985223)标准。我只希望我传递给它的10个值被编码。所以我又做错了什么
  • 也许我应该把我的文本当作1985223个样本而不是特征编辑:似乎就是这样。现在我只是想知道这背后的直觉


    感谢您的帮助

    我建议您使用
    CountVectorizer
    ,因为它是专门为一个热编码词汇设计的

    from sklearn.feature_extraction.text import CountVectorizer
    
    sample = 'this is a sample'
    
    vectorizer = CountVectorizer()
    vectorizer.fit(sample.split())
    
    print(vectorizer.transform(['this']).toarray())
    

    哦,太酷了!很高兴知道!然而,我仍然有一个疑问,那就是句子中的一个字符是否应该被视为变量或样本,其背后的直觉是什么?我正在学习RNN,所以我的问题更多的是概念性的,而不是技术性的。