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

训练逻辑 Regression 遇样本数不匹配及表头识别问题求助

解决逻辑回归训练中的数据集拆分错误

问题根源

你遇到的两个问题本质上是同一个原因:错误地将多列特征定义成了元组,而非Pandas DataFrame。让我逐一拆解并修复:

1. 为什么TrainData.head()报错无表头?

你定义TrainData的方式是:

TrainData= Dataset["Watermark"],Dataset["Micro-print"],Dataset["Ultraviolet fields"],Dataset["Magnetic fields"],Dataset["Diameter"]

这会创建一个元组(tuple),里面每个元素是单独的Series。而元组并没有head()方法,自然会提示“无表头”(实际是没有这个属性)。正确的做法是用方括号包裹列名列表,得到一个完整的DataFrame:

TrainData = Dataset[["Watermark", "Micro-print", "Ultraviolet fields", "Magnetic fields", "Diameter"]]

2. 为什么train_test_split报样本数不一致?

当你把元组传给train_test_split时,函数会把元组里的每个Series当成独立的输入(比如这里是5个Series,但报错显示[4,25001]可能是代码笔误漏了一个列),而你的TestData是包含25001个样本的Series,两者维度完全不匹配,所以抛出ValueError。

只有当TrainData是一个特征DataFrame(每一行是一个样本,每一列是一个特征),TestData是对应的标签Series时,train_test_split才能正确识别样本数量并拆分。

修正后的完整代码

# 清理重复导入,移除无用的导入
import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import train_test_split

# 加载数据集并指定列名
colnames = ["Watermark", "Micro-print", "Ultraviolet fields", "Magnetic fields", "Diameter", "Target"]
Dataset = pd.read_csv("/Users/David/Documents/Python Assignment2/data-banknote.csv", sep=',', names=colnames)
Dataset.index = np.arange(1, len(Dataset)+1)

# 正确定义特征集和标签集
# 特征集:选取前5列,用方括号包裹列名列表得到DataFrame
TrainData = Dataset[["Watermark", "Micro-print", "Ultraviolet fields", "Magnetic fields", "Diameter"]]
# 标签集:选取Target列得到Series
TestData = Dataset["Target"]

# 现在可以正常调用head()查看数据
print("特征集前5行:")
print(TrainData.head())
print("\n标签集前5行:")
print(TestData.head())

# 验证样本数一致(可选,但能提前排查问题)
print(f"\n特征集样本数:{TrainData.shape[0]},标签集样本数:{TestData.shape[0]}")

# 正确拆分数据集
X_train, X_test, y_train, y_test = train_test_split(TrainData, TestData, test_size=0.3, random_state=0)

# 后续可以正常训练逻辑回归模型
model = LogisticRegression()
model.fit(X_train, y_train)

# 评估模型
y_pred = model.predict(X_test)
cm = confusion_matrix(y_test, y_pred)
print("\n混淆矩阵:")
print(cm)

额外小提示

  • 导入模块时避免重复(比如你重复导入了LogisticRegression和confusion_matrix),同时移除无用的导入(比如from sklearn.datasets import data,你并没有用到这个模块)。
  • 变量名建议更直观:比如把TrainData改成X,TestData改成y,这样更符合机器学习的通用命名习惯,避免和拆分后的训练集/测试集混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:15:06