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

在KNN算法中拟合多输入列时出现ValueError问题求助

KNN拟合报错:ValueError: setting an array element with a sequence

问题背景

输入包含两列:第一列为二元数据(0或1),第二列为100维特征向量;目标列经OneHot编码后得到15列。将数据输入KNN模型拟合时,触发如下错误:

ValueError: setting an array element with a sequence.

相关代码片段

X_level1 = np.asarray(dfCopy[['inputColumn1','inputColumn2']])
y_level1 = np.asarray(dfCopy[['OneHotEncodingColumn1','OneHotEncodingColumn2','OneHotEncodingColumn3',...,'OneHotEncodingColumn15']])

X_train1, X_val1, y_train1, y_val1 = train_test_split(X_level1, y_level1, test_size = 0.2, random_state=20)

数据示例

输入数据(X_level1):

array([[array([ 0.41164917,  0.33110523, ..., 0.55093   ,  1.0682331 ], dtype=float32), 1],
       ...], dtype=object)

输出数据(y_level1):

array([[0, 0, 0, ..., 0, 0, 0],
       ...,
       [0, 0, 0, ..., 0, 1, 0]], dtype=uint8)

错误原因

当前X_level1是object类型的嵌套数组,每个样本的特征是一个包含「100维数组+二元值」的嵌套结构,而非KNN模型要求的扁平二维数值数组(每一行对应一个样本,每一列对应一个特征维度)。这种嵌套结构会导致模型无法正确解析特征维度,触发序列赋值错误。

解决方案

需要将二元列与100维向量列合并为一个101维的扁平特征矩阵,具体步骤如下:

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

# 1. 提取并转换二元特征列:转为(n_samples, 1)的二维数组
col_binary = dfCopy['inputColumn1'].values.reshape(-1, 1)

# 2. 展开100维向量列:将每个样本的向量转为一行,得到(n_samples, 100)的二维数组
col_vector = np.vstack(dfCopy['inputColumn2'].values)

# 3. 合并特征矩阵:得到(n_samples, 101)的扁平数值数组
X_level1 = np.hstack([col_binary, col_vector])

# 4. 目标列保持原格式即可
y_level1 = dfCopy[['OneHotEncodingColumn1', ..., 'OneHotEncodingColumn15']].values

# 5. 拆分数据集并拟合模型
X_train1, X_val1, y_train1, y_val1 = train_test_split(X_level1, y_level1, test_size=0.2, random_state=20)
knn = KNeighborsClassifier()
knn.fit(X_train1, y_train1)

关键验证

执行完上述步骤后,可通过以下代码确认特征矩阵格式正确:

print(X_level1.shape)  # 应输出 (样本数量, 101)
print(X_level1.dtype)  # 应输出 float32 或 float64 等数值类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:15:29