【发布时间】:2018-09-03 02:33:12
【问题描述】:
我想写一个 Naive Base 文本分类器。 因为 sklearn 不接受“文本形式”功能,所以我正在使用 TfidfVectorizer 对其进行转换。
我成功地仅使用转换后的数据作为特征创建了这样的分类。代码如下所示:
### text vectorization--go from strings to lists of numbers
vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5,
stop_words='english')
X_train_transformed = vectorizer.fit_transform(X_train_raw['url'])
X_test_transformed = vectorizer.transform(X_test_raw['url'])
### feature selection, because text is super high dimensional and
### can be really computationally chewy as a result
selector = SelectPercentile(f_classif, percentile=1)
selector.fit(X_train_transformed, y_train_raw)
X_train = selector.transform(X_train_transformed).toarray()
X_test = selector.transform(X_test_transformed).toarray()
clf = GaussianNB()
clf.fit(X_train, y_train_raw)
.....
一切都按预期工作,但是当我想添加其他功能时遇到问题,例如。指示天气的标志给定文本包含某个关键字。 我尝试了多种方法来正确转换“url”功能,然后将转换后的功能与另一个布尔功能相结合,但我没有成功。 假设我有一个包含两个功能的熊猫框架:'url'(我想要转换)和'contains_keyword'标志,应该如何完成任何提示?
失败的解决方案如下:
vectorizer = CountVectorizer(min_df=1)
X_train_transformed = vectorizer.fit_transform(X_train_raw['url'])
X_test_transformed = vectorizer.transform(X_test_raw['url'])
selector = SelectPercentile(f_classif, percentile=1)
selector.fit(X_train_transformed, y_train_raw)
X_train_selected = selector.transform(X_train_transformed)
X_test_selected = selector.transform(X_test_transformed)
X_train_raw['transformed_url'] = X_train_selected.toarray().tolist()
X_train_without = X_train_raw.drop(['url'], axis=1)
X_train = X_train_without.values
这会生成包含布尔标志和列表的行,该列表是 sklearn 模型的错误输入。我不知道我应该如何正确地改变它。感谢您的帮助。
这里是测试数据:
url,target,ads_keyword
googleadapis l google com,1,True
googleadapis l google com,1,True
clients1 google com,1,False
c go-mpulse net,1,False
translate google pl,1,False
url - 从 dns 查询中提取的分割域
target - 分类的目标类
ads_keyword - 表示天气的标志,“url”包含“ads”字。
我想使用 TfidfVectorizer 转换“url”,并将转换后的数据与“ads_keyword”(未来可能还有更多特征)一起用作训练朴素贝叶斯模型的特征。
【问题讨论】:
-
您能否发布一个小的(5-10 行)可重现的样本数据集(文本/CSV/“Python 代码”格式,以便我们复制和粘贴)?
-
当然,更新了原始条目。如果您需要更多信息,请告诉我,因为我仍然不知道如何正确地做到这一点。
标签: python pandas machine-learning scikit-learn classification