我一直在使用sklearn建立模型,其中很大一部分利用CountVectorizer()
函数从训练集中的一组字符串创建稀疏矩阵。
例如:
vectorizer = CountVectorizer(max_features=3000)
sparse_matrix = vectorizer.fit_transform(corpus).toarray()
导出模型后,格式化数据的最佳方法是我想创建预测以匹配训练所创建的特征名称的方法?我是否还应该导出(通过泡菜?)vectorizer.get_feature_names()
,然后使用它?还是有更好的方法?
换句话说,如果我在训练集vectorizer.get_feature_names() = ['apple', 'dog', 'cat']
中要对'hello cat'
进行预测,那么我对预测请求进行特征提取的方法应该是什么?如果我错了,请纠正我,但是特征提取的结果需要为[0, 0, 1]
才能与模型匹配。
在这里我也可能完全不了解我的方法,因此我们将不胜感激
谢谢!
答案 0 :(得分:1)
键入时
vectorizer = CountVectorizer(max_features=3000)
sparse_matrix = vectorizer.fit_transform(corpus).toarray()
此vectorizer
用于填充corpus
中的单词的词汇表
因此,使用相同的vectorizer
来transform
另一个数据集,您将看到新数据集的词频与corpus
的词汇量相对应
请记住,您执行fit_transform(X)
时说“使用X
的词汇”,并且只执行了一次。然后,您只需tranform(Y)
就可以这样说:“无论您将X用作什么,都将它们用作列,并将Y
中的术语放入这些X
列中
from sklearn.feature_extraction.text import CountVectorizer
corpus = ['love dogs, hate cows, and also pigs, actually dogs too']
vectorizer = CountVectorizer(max_features=3000)
sparse_matrix = vectorizer.fit_transform(corpus)
df = pd.DataFrame(sparse_matrix.toarray())
df.columns = vectorizer.get_feature_names()
print(df)
会给你这个:
actually also and cows dogs hate love pigs too
0 1 1 1 1 2 1 1 1 1
然后:
test = vectorizer.transform(['hello cat']) #Notice how I use transform and not fit_transform
df = pd.DataFrame(test.toarray())
df.columns = vectorizer.get_feature_names()
print(df)
actually also and cat cows dogs hate love pigs too
0 0 0 0 1 0 0 0 0 0 0
请注意,hello cat
如何适合调用fit_transform
的词汇表。因此,在特征提取中,您将“ hello cat”匹配到您叫fit_transform
的词汇表上!
现在,将这10列全部用作功能来预测标签y
。您正在做的就是向量空间模型