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

sklearn交叉验证报错:输入变量样本数不一致[7111,1778]求解决

解决KNeighborsClassifier样本数不一致的问题

嘿,这个错误我可太熟了!一眼就看到问题出在哪——你调用cross_validation.train_test_split的时候把返回值的顺序搞反了!

错误根源

sklearn的train_test_split函数的标准返回顺序是:
X_train, X_test, y_train, y_test
而你写成了:
X_train, y_train, X_test, y_test

这就导致你把测试集的特征数据赋值给了y_train,测试集的标签数据赋值给了y_test。你的总样本数是8889,测试集占20%就是1778个样本,训练集是7111个样本,自然X_train(7111个)和错误的y_train(1778个)样本数不匹配,触发了这个ValueError。

额外的潜在问题

除了这个核心错误,你的代码还有两个小问题需要修正:

  • 你调用rock_rap.reset_index(drop=True)但没有重新赋值给rock_rap,这会导致后续数据的索引还是原来的,可能引发意想不到的问题,需要改成rock_rap = rock_rap.reset_index(drop=True)。
  • 创建label_genres时,你写了len(label_genres)但此时label_genres还未定义,会触发NameError。用reshape(-1, 1)可以自动计算行数,更安全。

修正后的关键代码段

# 筛选目标流派并修正索引
rock_rap = audio_features.loc[(audio_features['genres'] == 'rock') | (audio_features['genres'] == 'rap')]
rock_rap = rock_rap.reset_index(drop=True)

# 修正标签数组的重塑方式
label_genres = np.array(rock_rap['genres']).reshape(-1, 1)

final_features = rock_rap.drop('genres',axis = 1).astype(float)
final_features['speechiness'].fillna(final_features['speechiness'].mean(),inplace=True)

knn = neighbors.KNeighborsClassifier(n_neighbors = 3)
standard_scaler = preprocessing.StandardScaler()
final_features = standard_scaler.fit_transform(final_features)

# 修正train_test_split的变量顺序
X_train, X_test, y_train, y_test = cross_validation.train_test_split(final_features, label_genres, test_size=0.2)

knn.fit(X_train, y_train)

验证修正效果

修正后,X_train和y_train的样本数应该一致(都是总样本的80%),X_test和y_test的样本数也一致(总样本的20%),这样knn.fit()就能正常运行了。

内容的提问来源于stack exchange,提问作者Ha An Tran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:22:23