You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

拟合sklearn模型时遇样本数不一致错误ValueError: [2,16773]求解

错误原因及解决方案

核心原因

你遇到的ValueError: Found input variables with inconsistent numbers of samples: [2, 16773],本质是**CountVectorizer只能处理一维文本输入**,但你传入的X_train是包含domain和urls两列的二维DataFrame。

CountVectorizer默认会把输入的每一列当作一个样本,所以它会错误地将你的16773行2列数据识别为2个样本,而你的y_train有16773个样本,两者样本数完全不匹配,直接触发错误。

验证逻辑

你可以做个简单测试验证这个问题:

from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer()
# 传入二维DataFrame,查看输出形状
print(cv.fit_transform(X_train).shape)  # 结果会是(2, xxx),而非预期的(16773, xxx)

这就证明CountVectorizer把两列当成了两个样本,而非16773个样本各带两个特征。

解决办法

有两种常用方案:

  • 方案1:合并文本特征
    把domain和urls两列合并成一列文本,再传入Pipeline:
# 合并训练集和测试集的特征列
X_train['combined_text'] = X_train['domain'] + ' ' + X_train['urls']
X_test['combined_text'] = X_test['domain'] + ' ' + X_test['urls']

# 使用合并后的单列文本作为模型输入
pipeline.fit(X_train['combined_text'], y_train)
  • 方案2:分别处理多文本特征
    如果想保留两个特征的独立信息,用ColumnTransformer分别对两列做文本向量化,再合并特征:
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer
from sklearn.ensemble import RandomForestClassifier

# 定义单文本列的处理管道
text_transformer = Pipeline([
    ('count', CountVectorizer()),
    ('tfidf', TfidfTransformer())
])

# 用ColumnTransformer分别处理两列文本特征
preprocessor = ColumnTransformer([
    ('domain_process', text_transformer, 'domain'),
    ('urls_process', text_transformer, 'urls')
])

# 构建完整的训练管道
full_pipeline = Pipeline([
    ('preprocess', preprocessor),
    ('clf', RandomForestClassifier())
])

# 拟合模型
full_pipeline.fit(X_train, y_train)

内容的提问来源于stack exchange,提问作者Sharhad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 12:55:15