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

LogisticRegression拟合报错:y应为1d数组 得到(74216,2)形状数组

问题根因

报错和max_features的取值大小无直接关联,核心原因是TFIDF生成的特征词表中存在和标签列同名的target词,导致列拼接后result里出现了两个target列:

  • 当max_features=1000时,按词频排序取前1000个特征词,target不在这个范围内,列名无重复,执行drop('target', 1)可以正常删除唯一的标签列,y = result['target']得到的是一维数组,代码可正常运行。
  • 当max_features=1500时,target刚好落在新增的500个特征词范围内,拼接后DataFrame存在两个同名target列,此时y = result['target']返回的是两列组成的DataFrame,形状为报错提示的(74216, 2),传入逻辑回归拟合时就会触发维度不匹配错误。
排查验证

拼接生成result后,执行以下代码即可确认重复列:

print(result.columns[result.columns.duplicated()])

输出结果会包含'target',可直接验证上述问题。

解决方案

选任意一种即可:

  • 方案1(最稳妥,无侵入):给TFIDF生成的特征列加统一前缀,从根源避免和原有列重名,修改向量化转DataFrame的代码即可:
# 旧版sklearn把get_feature_names_out()替换为get_feature_names()
vectorizer_df = pd.DataFrame(
    x.toarray(),
    columns=[f"tfidf_{word}" for word in vectorizer.get_feature_names_out()]
)
  • 方案2(流程更合理):提前拆分标签列,不要把标签和TFIDF特征做拼接,避免列名冲突,同时可以直接用稀疏矩阵计算节省内存:
from scipy.sparse import hstack

# 提前拆分标签和非文本特征
y = df["target"]
non_text_features = df.drop(["text_column", "target"], axis=1)

# 执行向量化
vectorizer = TfidfVectorizer(max_features=1500)
x_tfidf = vectorizer.fit_transform(df["text_column"])

# 拼接特征,不需要转稠密DataFrame
x = hstack([non_text_features.values, x_tfidf])

# 后续直接拆分训练集测试集即可,逻辑回归支持稀疏矩阵输入
  • 方案3(最简,无额外特征场景用):如果不需要保留文本之外的其他特征,不用做DataFrame转换和拼接,直接用TFIDF输出的稀疏矩阵作为特征输入,既省内存又不会出现列名问题:
vectorizer = TfidfVectorizer(max_features=1500)
x = vectorizer.fit_transform(df["text_column"])
y = df["target"]

优化建议:当前代码把TFIDF放在Pipeline外预处理,不仅流程繁琐,还容易在测试集上引入数据泄露。更规范的写法是把TFIDF和分类器都放进Pipeline,流程更简洁也能避免上述问题,参考代码:

# 直接拆分原始文本数据和标签,不需要提前做向量化
x_train, x_test, y_train, y_test = train_test_split(
    df["text_column"],
    df["target"],
    test_size=0.3,
    random_state=0
)

classifier = Pipeline([
    ("tfidf", TfidfVectorizer(max_features=1500)),
    ("clf", LogisticRegression(solver="liblinear"))
])
classifier.fit(x_train, y_train)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:06:31