如何为sklearn分类器重塑3D坐标数据 解决序列赋值报错问题
错误原因
sklearn所有分类器的输入特征矩阵都要求是二维数值结构,维度格式为(样本数量, 单样本特征数量)。你当前的特征数据每个单元格存储了长度为3的坐标列表,整体数据是三维结构(样本数量, 列数, 3),pandas会将这类数据识别为元素为序列的数组,因此训练时抛出ValueError: setting an array element with a sequence错误。
解决方法
将三维特征的最后一维展平,把每个样本的所有坐标值拼接成一维特征,即可适配sklearn的输入要求。假设你当前有178个样本,特征区共33列(2到35列),每列存储3个坐标,展平后每个样本的特征数为33*3=99,数据维度变为(178, 99)符合输入要求。
修复后的代码如下:
import numpy as np import pandas as pd from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import train_test_split # 读入数据(修正原代码重复赋值dataset1的笔误) dataset1 = pd.read_csv("你的数据文件路径.csv") # 标签需要为1维数组,修正原代码y的取值逻辑,替换为你的实际标签列名 y = dataset1["标签列名"] # 提取特征并展平 X = dataset1.iloc[:178, 2:35].values # reshape中-1表示自动计算该维度的大小 X = X.reshape(X.shape[0], -1) # 拆分训练集、测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 模型训练 classifier = KNeighborsClassifier(n_neighbors=32) classifier.fit(X_train, y_train)
注意事项
- 原代码重复对
dataset1执行读入操作,第二次读入的内容会覆盖第一次的结果,根据实际需求调整即可。 - 原代码中y的取值逻辑不符合分类任务要求,单标签分类场景下标签y必须是形状为
(样本数量,)的一维数组,不能和特征X为同维度的二维结构,需要替换为实际的标签列取值。
内容的提问来源于stack exchange,提问作者joka
相关产品推荐
相关产品推荐

