python - SKLearn ValueError:使用序列设置数组元素
问题描述
作为项目的一部分,我正在尝试使用 Python 的 SKLearn 库中的随机森林分类器。我一直在使用本教程作为指南:https ://chrisalbon.com/machine_learning/trees_and_forests/random_forest_classifier_example/ 。
我的代码逐行遵循本教程,但唯一的主要区别是数据的结构。在教程中,有 4 个特征(数据表中的 4 列),每列中的每个条目都是一个数字。在我的代码中,我有 1 个功能(数据表中的 1 列),列中的每个条目都是一个 numpy 数组。当我调用 fit() 函数时,出现以下错误: ValueError: setting an array element with a sequence。
这是我的代码:
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]
不会,并且如果您将该 int 提供给使用as ,它仍然无法工作,因为它需要一个列表或数组,cls.fit
所以会也工作。train[features]
columns[0]
features
train[features].tolist()
推荐阅读
- html - 如何使用 TWIG 计算课程出现在页面上的次数?
- vue.js - Facebook/Twitter 上的 Nuxt.js 预览不起作用:404 错误
- javascript - 使用类组件在 React 中将 Ref 从子级传递给父级
- java - 循环内的 PreparedStatement.setString 是如何工作的?
- python - 如何让 TensorFlow 安装在我的计算机上?点安装不工作
- react-native - React-native FlatList 组件不工作
- ruby-on-rails - Typhoeus 是线程安全的吗?
- angular - 在 html 中显示对象并获取:“NgFor 仅支持绑定到 Iterables,例如数组”
- html - 如何在框元素中定位表格单元格
- haskell - 如何一起使用`let`和`where`?