我在使用RandomForest fit函数时遇到了麻烦
这是我的训练集
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列表.切片熊猫框架总会产生2D列表.因此,在您的用例中引发了冲突.您需要将pandas DataFrame提供的2D列表转换为fit函数所期望的1D列表.
首先尝试使用1D列表:
Y_train = list(train.P1.values)
如果这不能解决问题,您可以尝试使用MultinomialNB错误中提到的解决方案:"未知标签类型":
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())