ValueError:无法强制序列,长度必须为 1:给定 n

Tyo*_*nic 12 python regression machine-learning random-forest scikit-learn

我一直在尝试使用来自 的 RF 回归scikit-learn,但我的标准(来自文档和教程)模型出现错误。这是代码:

\n
import pandas as pd\nimport numpy as np\nfrom sklearn.ensemble import RandomForestRegressor\n\ndb = pd.read_excel('/home/artyom/myprojects//valuevo/field2019/report/segs_inventar_dataframe/excel_var/invcents.xlsx')\n\nage = df[['AGE_1', 'AGE_2', 'AGE_3', 'AGE_4', 'AGE_5']]\n\nhight = df [['HIGHT_','HIGHT_1', 'HIGHT_2', 'HIGHT_3', 'HIGHT_4', 'HIGHT_5']]\n\ndiam = df[['DIAM_', 'DIAM_1', 'DIAM_2', 'DIAM_3', 'DIAM_4', 'DIAM_5']]\n\nza = df[['ZAPSYR_', 'ZAPSYR_1', 'ZAPSYR_2', 'ZAPSYR_3', 'ZAPSYR_4', 'ZAPSYR_5']]\n\ntova = df[['TOVARN_', 'TOVARN_1', 'TOVARN_2', 'TOVARN_3', 'TOVARN_4', 'TOVARN_5']]\n\n#df['average'] = df.mean(numeric_only=True, axis=1)\n\n\ndf['meanage'] = age.mean(numeric_only=True, axis=1)\ndf['meanhight'] = hight.mean(numeric_only=True, axis=1)\ndf['mediandiam'] = diam.mean(numeric_only=True, axis=1)\ndf['medianza'] = za.mean(numeric_only=True, axis=1)\ndf['mediantova'] = tova.mean(numeric_only=True, axis=1)\n\nunite = df[['gapA_segA','gapP_segP', 'A_median', 'p_median', 'circ_media','fdi_median', 'pfd_median', 'p_a_median', 'gsci_media','meanhight']].dropna()\n\nfrom sklearn.model_selection import train_test_split as ttsplit\n\ndf_copy = unite.copy()\ntrainXset = df_copy[['gapA_segA','gapP_segP', 'A_median', 'p_median', 'circ_media','fdi_median', 'pfd_median', 'p_a_median', 'gsci_media']]\n\ntrainYset = df_copy [['meanhight']]\n\ntrainXset_train, trainXset_test, trainYset_train, trainYset_test = ttsplit(trainXset, trainYset, test_size=0.3) # 70% training and 30% test\n\nrf = RandomForestRegressor(n_estimators = 100, random_state = 40)\nrf.fit(trainXset_train, trainYset_train)\npredictions = rf.predict(trainXset_test)\nerrors = abs(predictions - trainYset_test)\nmape = 100 * (errors / trainYset_test)\naccuracy = 100 - np.mean(mape)\nprint('Accuracy:', round(accuracy, 2), '%.')\n
Run Code Online (Sandbox Code Playgroud)\n

但输出\xe2\x80\x99t 看起来没问题:

\n
---> 24 errors = abs(predictions - trainYset_test)\n     25 # Calculate mean absolute percentage error (MAPE)\n     26 mape = 100 * (errors / trainYset_test)\n..... somemore track\nValueError: Unable to coerce to Series, length must be 1: given 780\n
Run Code Online (Sandbox Code Playgroud)\n

我该如何修复它?780的形状是trainYset_test. I\xe2\x80\x99m 不是寻求解决方案(即为我编写代码),而是寻求有关为什么会发生此错误的建议。我按照教程中的一切进行操作。

\n

小智 11

通过查看错误可以清楚地看出,数组的形状必须为 one ,

所以使用 reshape 使其成为正确的形状,

predictions=predictions.reshape(780,1)
Run Code Online (Sandbox Code Playgroud)