python - 对单个句子进行预测时,收到错误 "Number of features of the model must match the input."

标签 python machine-learning scikit-learn

我是一名数据科学新手,我正在尝试将 TfidfVectorizer 与 RandomForestClassifier 结合使用来预测字符串上的二进制“是/否”结果,如下所示:

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split

df = pd.read_csv('~/Downloads/New_Query_2019_12_04.csv', usecols=['statement', 'result'])
df = df.head(100)

# remove non-values
df = df.dropna()

tfidfconverter = TfidfVectorizer(
    max_features=1500,
    min_df=5,
    max_df=0.7,
    stop_words=stopwords.words('english'))

X = tfidfconverter.fit_transform(df['statement']).toarray()
y = df['result'].values

X_train, X_test, y_train, y_test = train_test_split(
    X,
    y,
    test_size=0.2,
    random_state=0)

classifier = RandomForestClassifier(n_estimators=1000, random_state=0)
classifier.fit(X_train, y_train)

y_pred = classifier.predict(X_test)

所有这些看起来都很有效,但我一直困惑于如何根据模型预测短语。当我做类似的事情时:

good_string = preprocess_string('This is a good sentence')

tfidfconverter = TfidfVectorizer()

X = tfidfconverter.fit_transform([good_string]).toarray()

y_pred = classifier.predict(X)

我收到错误“模型的特征数量必须与输入匹配。”

我还尝试使用之前的 TfidfVectorizer 来拟合字符串:

tfidfconverter = TfidfVectorizer(
    max_features=1500,
    min_df=5,
    max_df=0.7,
    stop_words=stopwords.words('english'))

X = tfidfconverter.fit_transform([good_string]).toarray()

但我收到错误“max_df 对应于 < 文档而不是 min_df”。我想我只是对如何适应单个字符串的数组特征以匹配模型中的数字特征有点困惑。任何帮助将不胜感激。

最佳答案

问题是我通过具有相同构造函数参数的不同矢量化器运行它:

tfidfconverter = TfidfVectorizer(
max_features=1500,
min_df=5,
max_df=0.7,
stop_words=stopwords.words('english'))

而不是使用我在此处拟合文档时使用的相同矢量化器:

X = tfidfconverter.fit_transform(df['statement']).toarray()

我也不应该尝试拟合我试图预测的数据,而应该只对其进行转换。

X = tfidfconverter.transform([good_string]).toarray()

关于python - 对单个句子进行预测时,收到错误 "Number of features of the model must match the input.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59312150/

相关文章:

machine-learning - Tensorflow 训练和验证输入队列分离

python - XGBoost 产生非二进制预测

python - Pandas:在数据框中创建一个新列,其中的值是根据现有列计算得出的,即。计算最大值

python - GAE : Is it necessary to call fetch on a query before getting its cursor?

python - 如何使用 Python 响应 HTTP 请求

python - 访问 Numpy 数组的列?尝试通过转置或通过列访问来执行的错误

显示句子中单词上下文的 api

python - 安排训练和测试机器学习

matplotlib - 无法为 sklearn 部分依赖图设置 ylim

scikit-learn - 如果我在完成之前中断sklearn grid_search.fit(),我可以访问当前的.best_score_、.best_params_吗?