Случайная лесная ошибка (входные переменные с непоследовательным количеством выборок) - PullRequest
0 голосов
/ 29 декабря 2018

Прочитав так много примеров с ошибками «несогласованное количество примеров», я все еще не могу понять, что не так с моим кодом.

В файле Excel лист 1 содержит данные.Лист 2 содержит краткий список переменных.

Я сохранил переменные из листа 2 в массив.И скормить его модели случайного леса, чтобы оценить его влияние на параметр в листе 1.

Но я получаю сообщение «Найдены входные переменные с непоследовательным количеством выборок: [54, 2016]»

54 - это число переменных на листе 2. 2016 - это количество строк данных на листе 1.

Я пытаюсь увидеть, как эти 54 переменные влияют на переменную Target на листе 1.

Как мне манипулировать моими данными, чтобы эта работа работала?

Заранее большое спасибо.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split

from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import SelectFromModel
from sklearn.metrics import accuracy_score

df = pd.read_excel(r'C:\Users\ngks\Desktop\TP Course\Project Module\ProjectDataSetrev2.xlsx',sheet_name=0)
df2 = pd.read_excel(r'C:\Users\ngks\Desktop\TP Course\Project Module\ProjectDataSetrev2.xlsx',sheet_name=1)

df['DateTime']=pd.to_datetime(df['Time Stamp'], format='%Y-%m-%d %H:%M:%S')
df.set_index(df['DateTime'], inplace=True)

print(len(df2.columns))

allvar = list()

for each_var in df2.columns:
    allvar.append(each_var)

allvar = np.array(allvar)
print(allvar)

target = df['(CUP) Chiller Optimization Plant Efficiency [kW/RT]']
target=target.values.reshape(len(target),1)

allvar_train,allvar_test,target_train,target_test= train_test_split(allvar,target, random_state=0, test_size=0.6)

clf = RandomForestClassifier(n_estimators=10000, random_state=0, n_jobs=-1)

clf.fit(allvar_train, target_train)

for feature in zip(feat_labels, clf.feature_importances_):
    print(feature)

Лист 1 (сохранен как df) выглядит следующим образом Лист 1

Лист 2 (сохранен как df2) выглядит следующим образом Лист2

Журнал ошибок выглядит так, как показано Журнал ошибок

Журнал ошибок 2: неизвестный тип метки: «непрерывный» Журнал ошибок 2

allvar_train

целевой поезд

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

Вот код, который работает для меня.

  import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt

    from sklearn.metrics import mean_squared_error
    from sklearn.model_selection import train_test_split

    from sklearn.ensemble import RandomForestRegressor
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.feature_selection import SelectFromModel
    from sklearn.metrics import accuracy_score

    df = pd.read_excel(r'C:\Users\ngks\Desktop\TP Course\Project Module\ProjectDataSetrev3.xlsx',sheet_name=0)
    df2 = pd.read_excel(r'C:\Users\ngks\Desktop\TP Course\Project Module\ProjectDataSetrev3.xlsx',sheet_name=1)

    df['DateTime']=pd.to_datetime(df['Time Stamp'], format='%Y-%m-%d %H:%M:%S')
    df.set_index(df['DateTime'], inplace=True)

    print(len(df2.columns))

    allvarlist = list()

    for each_var in df2.columns:
        allvarlist.append(each_var)

    countvar = len(allvarlist)

    allvar = df[allvarlist]
    allvar = allvar.values.reshape(len(allvar),countvar)

    target = df['(CUP) Chiller Optimization Plant Efficiency [kW/RT]']
    target=target.values.reshape(len(target),1)

    allvar_train,allvar_test,target_train,target_test= train_test_split(allvar,target, random_state=0, test_size=0.7)

    clf = RandomForestRegressor(n_estimators=10000, random_state=0, n_jobs=-1)

    #print(allvar_train)
    #print(target_train)

    clf.fit(allvar_train,np.ravel(target_train))

    for feature in zip(allvarlist, clf.feature_importances_):
        print(feature)

    importances = clf.feature_importances_
    #indices = np.argsort(importances)

    plt.figure().set_size_inches(14,16)
    plt.barh(range(allvar_train.shape[1]), importances, color="r")
    plt.yticks(range(allvar_train.shape[1]),allvarlist)
0 голосов
/ 29 декабря 2018

Проблема связана с 'train_test_spilt', когда вы передаете только имя столбца объекта, а не данные.Используйте список столбцов для получения данных из DataFrame следующим образом.

allvar_train,allvar_test,target_train,target_test= train_test_split(df[allvar],target, random_state=0, test_size=0.6)

Вам не обязательно преобразовывать 'allvar' и 'target' в массив numpy, который может использоваться непосредственно в 'train_test_split'.

Примечание. Эта проблема не имеет ничего общего со случайным лесом

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...