python - SKLearn值错误: setting an array element with a sequence

标签 python pandas numpy dataframe scikit-learn

作为项目的一部分,我尝试使用 Python 的 SKLearn 库中的随机森林分类器。我一直使用本教程作为指导:https://chrisalbon.com/machine_learning/trees_and_forests/random_forest_classifier_example/ .

我的代码逐行遵循本教程,但唯一的主要区别是数据的结构。在教程中,有 4 个特征(数据表中有 4 列),每列中的每个条目都是一个数字。在我的代码中,我有 1 个特征(数据表中的 1 列),并且列中的每个条目都是一个 numpy 数组。当我调用 fit() 函数时,出现以下错误: ValueError:使用序列设置数组元素。

这是我的代码:

import pandas as pd
import numpy as np
import random
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import confusion_matrix

trainingData = [[[0, 0, 3], 0.77], [[24, 0, 5], 30], [[0, 0, 4], 0.77], [[0, 0, 0], 0.77]]
vectors_train = []
for i in range (0, len(trainingData)):
    vectors_train.append(trainingData[i][0])

testingData = [[[1, 0, 0], 0.77], [[30, 0, 5], 30], [[0, 0, 0], 0.77], [[0, 0, 0], 0.77]]
vectors_test = []
for i in range (0, len(testingData)):
    vectors_test.append(testingData[i][0])

dataframe_training = pd.DataFrame(trainingData)
dataframe_training['is_train'] = True
dataframe_testing = pd.DataFrame(testingData)
dataframe_testing['is_train'] = False
frames = [dataframe_training, dataframe_testing]
dataframe = pd.concat(frames)
dataframe.rename(index = str, columns = {0: 'Vector', 1: 'Label', 2: 'is_train'})

train, test = dataframe[dataframe['is_train']==True], dataframe[dataframe['is_train']==False]
features = dataframe.columns[:1]
labels_train, uniques = pd.factorize(train[1], sort = True)
clf = RandomForestClassifier()

clf.fit(train[features], labels)              # Value error occurs here

我对这个错误的实际含义感到困惑。哪个数组元素被设置为一个序列,这个序列在哪里?我还知道train[features]是一个DataFrame对象,并且fit()函数接受两个参数,这两个参数都必须是类似数组的。 labels 是一个数组,错误明确指出第一个参数有问题,那么我是否需要进行数据类型转换?

当我将行 clf.fit(train[features], labels) 替换为 clf.fit(vectors_train, labels) 时,错误消失。但是,我想知道为什么当我使用与教程相同的策略时它不起作用,以及如何让它以类似的方式工作。

任何帮助将不胜感激。谢谢!

最佳答案

删除 features 变量并添加最后一行:

clf.fit(train[0].tolist(), labels)

上面的代码没有引发错误。

您的代码不起作用,因为 columns 与您一样 column[:1] 返回包含一列的序列,但是 column[0] code> 不会,如果您将该 int 提供给 cls.fit 并使用 columns[0] 执行 train[features] 作为 features,它仍然无法工作,因为它需要列表或数组,因此 train[features].tolist() 也可以工作。

关于python - SKLearn值错误: setting an array element with a sequence,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56980042/

相关文章:

python pandas - 使用整数作为列名对数据框进行子集化

python - 比较两个数据框并根据掩码值向数据框添加新列

python - 从 JSON 文件到 Numpy 数组

python - Pandas 具有多索引的行式聚合

python twitter api 最新结果

python - 如何在 pandas dataframe Python 中查找带有分隔符的字符串并将其替换为新行

Python Numpy : np. int32 "slower"比 np.float64

python - 从 Dataframe 中的 2 个或更多列获取唯一值的有效方法

python - 将多个列表水平组合成一个列表

python - 用 Pandas 转换日期列