В рамках проекта я пытаюсь использовать классификатор случайных лесов из библиотеки 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)
, ошибка исчезает. Однако я хочу знать, почему он не работает, когда я использую ту же стратегию, что и в руководстве, и как заставить его работать аналогичным образом.
Любая помощь будет высоко ценится. Спасибо!