运行Scikit-learn线性回归遇ValueError:样本数为0的问题咨询
问题原因及解决办法
问题原因
Python切片语法里,X[:-20]表示取数组从开头到倒数第20个元素之前的部分。你的数据集总共只有20条记录,倒数第20个元素就是第一条数据的位置,所以这个切片最终会返回一个没有任何样本的空数组(shape=(0,1)),而线性回归模型拟合时至少需要1个样本,因此触发ValueError。
解决办法
1. 手动调整切片范围
根据你需要的测试集大小调整切片参数:
- 比如想留2条数据做测试集,训练集就取前18条:
X_train = X[:-2],y_train = y[:-2] - 按固定比例拆分(比如8:2),直接取对应数量的样本:
X_train = X[:16],X_test = X[16:]
2. 使用Scikit-learn官方拆分工具(推荐)
用train_test_split函数可以自动按比例拆分,还能保证拆分的随机性和可复现性,示例代码:
from sklearn.model_selection import train_test_split # 按8:2拆分训练集和测试集,random_state固定随机种子确保结果一致 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
内容的提问来源于stack exchange,提问作者James0078
相关产品推荐
相关产品推荐

