我在使用RandomForest拟合函数时遇到问题
这是我的训练套装
P1 Tp1 IrrPOA Gz Drz2
0 0.0 7.7 0.0 -1.4 -0.3
1 0.0 7.7 0.0 -1.4 -0.3
2 ... ... ... ... ...
3 49.4 7.5 0.0 -1.4 -0.3
4 47.4 7.5 0.0 -1.4 -0.3
... (10k rows)
由于使用sklearn.ensemble RandomForest 的所有其他变量,我想预测P1
colsRes = ['P1']
X_train = train.drop(colsRes, axis = 1)
Y_train = pd.DataFrame(train[colsRes])
rf = RandomForestClassifier(n_estimators=100)
rf.fit(X_train, Y_train)
这是我得到的错误:
ValueError: Unknown label type: array([[ 0. ],
[ 0. ],
[ 0. ],
...,
[ 49.4],
[ 47.4],
我没有发现任何关于这个标签错误的信息,我使用的是Python 3.5。任何建议都会有很大帮助!
当您将标签(y)数据传递给rf.fit(X,y)
时,它希望y是1D列表。对Panda帧进行切片总是会产生2D列表。因此,在您的用例中引发了冲突。您需要将pandas DataFrame提供的2D列表转换为fit函数所期望的1D列表。
首先尝试使用1D列表:
Y_train = list(train.P1.values)
如果这不能解决问题,您可以尝试多项式NB错误中提到的解决方案:";"未知标签类型":
Y_train = np.asarray(train['P1'], dtype="|S6")
所以你的代码变成了
colsRes = ['P1']
X_train = train.drop(colsRes, axis = 1)
Y_train = np.asarray(train['P1'], dtype="|S6")
rf = RandomForestClassifier(n_estimators=100)
rf.fit(X_train, Y_train)
根据这篇SO文章,分类器需要整数或字符串标签。
您可以考虑改用回归模型(可能更适合您的数据,因为每个数据看起来都是浮动的),如下所示:
X_train = train.drop('P1', axis=1)
Y_train = train['P1']
rf = RandomForestRegressor(n_estimators=100)
rf.fit(X_train.as_matrix(), Y_train.as_matrix())
可能有点晚了,但我刚刚收到这个错误,并通过使用确保我的y变量是type(int)来解决它
y = df['y_variable'].astype(int)
在进行列车测试拆分之前,也像其他人所说的那样,您的问题似乎更适合RFReg,而不是RF