Python机器学习识别矩阵异常索引:决策树训练报错排查
问题原因
- 你的特征集
X中的每个样本是list/嵌套list类型(对应DataFrame里State列存储的8×15矩阵),而sklearn的分类器要求输入的特征必须是二维数值数组(每个元素是单个数值,而非容器类型)。当模型尝试将特征转换为float类型时,遇到list就会触发类型错误。
解决办法
1. 展开矩阵为一维特征向量
把State列中每个8×15的二维矩阵展开成120个独立的数值特征,让X符合sklearn要求的输入格式:
import numpy as np import pandas as pd from sklearn.tree import DecisionTreeClassifier # 假设你的DataFrame名为df # 方法1:将矩阵展开为一维列表,再转成二维数组 X = np.array(df['State'].apply(lambda mat: np.array(mat).flatten()).tolist()) # 方法2:直接展开为多列的DataFrame X = pd.DataFrame(df['State'].apply(lambda x: np.array(x).ravel()).tolist())
2. 确认标签集y的格式
如果Result列存储的是[-1,-1]这样的列表,需要转换成分类器可处理的格式:
- 如果是二分类任务(区分正常/异常):可以将
[-1,-1]映射为0,其他索引对映射为1; - 如果是多分类任务(识别具体的异常行列):需要将每个唯一的索引对映射为一个整数标签,比如:
# 把每个索引对转成元组,再映射为整数 y_mapping = {tuple(idx): i for i, idx in enumerate(df['Result'].unique())} y = df['Result'].apply(lambda x: y_mapping[tuple(x)])
3. 验证输入合法性
可以用sklearn的工具检查输入格式是否正确:
from sklearn.utils.validation import check_array check_array(X) # 无报错则说明格式正确
内容的提问来源于stack exchange,提问作者Pedro R.
相关产品推荐
相关产品推荐

