随机森林误差(样本数量不一致的输入变量)

在阅读了这么多带有“样本数量不一致”错误的示例后,我仍然看不出我的代码有什么问题。


在 Excel 文件中,工作表 1 包含数据。表 2 包含变量的候选列表。


我将工作表 2 中的变量保存到一个数组中。并将其提供给随机森林模型,以评估其对表 1 中参数的影响。


但我收到“发现样本数量不一致的输入变量:[54, 2016]”


54 是工作表 2 中的变量数。 2016 是工作表 1 中的数据行数。


我想看看这 54 个变量如何影响表 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)

Sheet 1(另存为 df)看起来像这样 Sheet 1

http://img.mukewang.com/6152da160001f76610630397.jpg

Sheet 2(另存为 df2)看起来像这个 Sheet2

http://img3.mukewang.com/6152da1e00016ba613300093.jpg

错误日志如图所示 错误日志

http://img.mukewang.com/6152da250001d4d810380561.jpg

错误日志 2:未知标签类型:“连续”错误日志 2

http://img4.mukewang.com/6152da2d00017a2b08080563.jpg

allvar_train

http://img3.mukewang.com/6152da36000196b707310284.jpg

目标列车

http://img1.mukewang.com/6152da3c0001efd102020230.jpg


哔哔one
浏览 241回答 2
2回答

梵蒂冈之花

问题在于“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' 中使用。注意:此问题与随机森林无关
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python