train_test_split函数报错:训练集为空的问题解决方法
修复板球运动员得分预测程序的ValueError问题
你编写的板球运动员得分预测程序运行时出现以下错误:
ValueError: With n_samples=1, test_size=0.33 and train_size=None, the resulting
train set will be empty. Adjust any of the aforementioned parameters
问题根源
你的代码中X和Y的定义完全错误:你只是把列名放进了列表,并没有从加载的data数据框中提取实际的样本数据,导致train_test_split只识别到1个"样本"(就是那串列名),按33%的测试集拆分后,训练集样本数为0,触发报错。
修复步骤
- 正确提取特征与目标变量:使用pandas的列索引语法,从
data中取出对应列的真实数据 - 确保数据集有足够样本:检查你的
Rohit Sharma.csv文件,确保里面有至少2条以上的有效数据(样本量越多,模型效果越好);如果样本极少,可以适当调小test_size(比如设为0.2或0.1)
修正后的完整代码
import pandas as pd from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split # 加载数据集 data = pd.read_csv('Rohit Sharma.csv') # 正确提取特征矩阵X和目标变量Y X = data[['against','wickets','currentrun','weather','ball','over']] Y = data['runsmade'] # 拆分训练集和测试集(如果样本少,可将test_size调至0.2或更小) x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.33, random_state=42) # 训练模型 reg = LinearRegression() reg.fit(x_train, y_train) # 预测并输出结果 a = reg.predict(x_test) print(a) print(data)
额外提示
- 如果CSV中存在缺失值,训练前需要先处理(比如用
data.dropna()删除缺失行,或data.fillna()填充),否则模型训练会报错 - 线性回归对特征的数值类型有要求,确保
X中的列都是数值型数据(如果有字符串类型的特征,比如against是对手名称,需要先做编码处理,比如独热编码)
内容的提问来源于stack exchange,提问作者PallabGhosh
相关产品推荐
相关产品推荐

