SKLearn ValueError: 设定数组元素时出现重复

2024-04-20 10:11:41 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我的代码逐行遵循本教程,但唯一主要的区别是数据的结构。在本教程中,有4个功能(数据表中有4列),列中的每个条目都是一个数字。在我的代码中,我有一个特性(数据表中有一列),列中的每个条目都是一个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(vectors_train, labels)替换clf.fit(train[features], labels)行时,错误消失了。但是,我想知道为什么当我使用与教程相同的策略时它不起作用,以及如何使它以类似的方式工作。你知道吗

任何帮助都将不胜感激。谢谢!你知道吗


Tags: importdataframelabelsis错误train教程数组
2条回答

出现此错误是因为调用fit方法时数据格式不正确。 您的输入是list的DataFrame(只有一列),但是fit方法需要numpy数组。你知道吗

如果你这样做,它应该会起作用:

X = np.array(train[features][0].tolist())
clf.fit(X, labels_train)

所以X是一个有4个例子的数组,每个例子有3个特征。你知道吗

删除features变量并生成最后一行:

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

上面的代码没有出现错误。你知道吗

但是,{int}和cd6一样,因为它不需要使用cd5。你知道吗

相关问题 更多 >