Использование fmin со случайной лесной регрессией - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь использовать функцию scipy fmin в модели регрессии случайных лесов в примере набора данных.Модель работает хорошо, но когда я пытаюсь использовать функцию fmin с исходным предположением np.zeros (8), я получаю эту ошибку:

ValueError: Expected 2D array, got 1D array instead:
array=[0. 0. 0. 0. 0. 0. 0. 0.].
Reshape your data either using array.reshape(-1, 1) if your data has a 
single feature or array.reshape(1, -1) if it contains a single sample.

Поэтому я изменяю форму массива, и он возвращает точно такую ​​же ошибкусообщение.Вот код на данный момент:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import sklearn as sk
import scipy as sp


data = pd.read_csv('Concrete_Data.csv')
data.describe(include='all')
Y = data.iloc[:,-1]
X = data.iloc[:,0:-1]

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.2, 
random_state = 0)

from sklearn.ensemble import RandomForestRegressor
regressor = RandomForestRegressor(random_state = 0)
regressor.fit(X_train,y_train)

def f(x):
    p=regressor.predict(x)
    return p

guess = np.zeros(8)
guess = guess.reshape(-1, 1) 
minimum = sp.optimize.fmin(f,guess)
print('min = ', minimum)

Я также попытался дать ему строку из тренировочных данных в качестве первоначального предположения, и он возвращает точно такое же сообщение об ошибке, как и раньше.Можно ли это сделать?Если это возможно, это будет очень полезно для моей работы.Спасибо Джеймс

1 Ответ

0 голосов
/ 23 мая 2018

К сожалению, этот код не воспроизводится (внешние данные), а трассировка ошибки / стека является несколько неполной.

Из приведенного кода вам просто нужно изменить:

def f(x):
    p=regressor.predict(x)
    return p

->
def f(x):
    p=regressor.predict(x.reshape(1, -1))
    return p

при условии, что ваш регрессор возвращает скаляр, и вы хотите найти какой-то неизвестный входной образец, минимизирующий этот скаляр.

Причина этой ошибки заключается в том, что scipy (вероятно) сглаживается x внутри(в основном это делается во всех оптимизаторах внутри scipy), а это означает, что априорного изменения формы недостаточно.

...