![](/img/trans.png)
[英]sklearn - how to use TfidfVectorizer to use entire strings?
[英]How to use sklearn TfidfVectorizer on new data
我有一個相當簡單的 NLTK 和 sklearn 分類器(我是一個完全的菜鳥)。
我做通常的進口
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.feature_extraction.text import CountVectorizer
from nltk.tokenize import RegexpTokenizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn import metrics
from sklearn.feature_extraction.text import TfidfVectorizer
我加載數據(我已經清理過了)。 這是一個非常簡單的數據框,有兩列。 第一個是'post_clean'
,其中包含已清理的文本,第二個是'uk'
,它是True
或False
data = pd.read_pickle('us_uk_posts.pkl')
然后我用 tfidf 進行矢量化並拆分數據集,然后創建模型
tf = TfidfVectorizer()
text_tf = tf.fit_transform(data['post_clean'])
X_train, X_test, y_train, y_test = train_test_split(text_tf, data['uk'], test_size=0.3, random_state=123)
clf = MultinomialNB().fit(X_train, y_train)
predicted = clf.predict(X_test)
print("MultinomialNB Accuracy:" , metrics.accuracy_score(y_test,predicted))
顯然,除非我在這里完全遺漏了一些東西,否則我的准確度為 93%
我的兩個問題是:
1) 我現在如何使用這個模型對一些沒有已知UK
價值的物品進行實際分類?
2)如何使用完全獨立的測試集(我沒有拆分)來測試這個模型?
我試過了
new_data = pd.read_pickle('new_posts.pkl')
new_posts 數據格式相同的地方
new_text_tf = tf.fit_transform(new_data['post_clean'])
predicted = clf.predict(new_X_train)
predicted
和
new_text_tf = tf.fit_transform(new_data['post_clean'])
new_X_train, new_X_test, new_y_train, new_y_test = train_test_split(new_text_tf, new_data['uk'], test_size=1)
predicted = clf.predict(new_text_tf)
predicted
但兩者都返回“ValueError:維度不匹配”
在訓練期間使用 tf.fit_transform() 提取詞匯以生成稀疏向量后,您需要使用 tf.transform() 而不是 fit_transform()。 所以測試集的特征應該是
new_text_tf = tf.transform(new_data['post_clean'])
當您在測試/新數據上使用 tf.fit_transform() 時,它會根據測試數據中可能與訓練數據不同的單詞提取新詞匯表。 詞匯表的差異會產生維度不匹配錯誤。
您還應該將測試數據和訓練數據合並為一個主集,然后在該主集上運行 fit_transform() 以便即使是僅在測試集中的單詞也能在您的矢量化器中捕獲。 其余代碼可以保持不變。 如果測試集中的單詞不在訓練集中,這樣做可以提高您的准確性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.