Python RandomForest - 未知标签错误
Posted
技术标签:
【中文标题】Python RandomForest - 未知标签错误【英文标题】:Python RandomForest - Unknown label Error 【发布时间】:2016-03-18 17:05:21 【问题描述】:我在使用 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。 任何建议都会有很大帮助!
【问题讨论】:
您使用的是哪个版本的 sklearn? 【参考方案1】:参加聚会可能有点晚了,但我刚刚收到此错误并通过使用
确保我的 y 变量是 type(int) 来解决它 y = df['y_variable'].astype(int)
在进行火车测试拆分之前,也像其他人所说的那样,您的问题似乎更适合 RFReg 而不是 RF
【讨论】:
'y_variable' 拼写【参考方案2】:根据this SO post,分类器需要整数或字符串标签。
您可以考虑改用回归模型(可能更适合您的数据,因为每个数据看起来都是浮点数),如下所示:
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())
【讨论】:
谢谢,但没有区别 根据我对完整错误报告的了解,从我调用“fit”函数的行 报告中:rf.fit(X_train, Y_train) File "C:\Anaconda3\lib\site -packages\sklearn\ensemble\forest.py",第 235 行,适合 y,expanded_class_weight = self._validate_y_class_weight(y) ... @Dragonfly,非常抱歉花了这么长时间,但我希望这能回答你的问题。 查看问题,因为训练集中的所有字段都是浮点数。所以,我认为回归比分类器更有用。 回归工作正常!非常感谢 !我使用了 RandomForestRegressor 而不是 ExtraTreesRegressor。我将尝试找出这两者之间的区别【参考方案3】:当您将标签 (y) 数据传递给 rf.fit(X,y)
时,它期望 y 是一维列表。对 Panda 框架进行切片总是会产生一个 2D 列表。因此,在您的用例中引发了冲突。您需要将 pandas DataFrame 提供的二维列表转换为 fit 函数所期望的一维列表。
先尝试使用一维列表:
Y_train = list(train.P1.values)
如果这不能解决问题,您可以尝试MultinomialNB error: "Unknown Label Type"中提到的解决方案:
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)
【讨论】:
我现在明白了这个问题,但是你的代码不能工作。我正在寻找其他方法来进行转换 你可以试试Y_train = list(train.P1.values)
吗?如果有任何错误信息,请告诉我
错误信息没有改变。 Y_train 形状看起来不错,虽然 print(Y_train) [ 0. 0. 0. ..., 49.4 47.4 45.4] Y 形状给出了 (34208,) - #34208 是行数
感谢您的错误信息。你可以试试这个:Y_train = np.asarray(train['P1'], dtype="|S6")
成功了,非常感谢!我的电脑崩溃了 3 次,因为它无法支持微积分...以上是关于Python RandomForest - 未知标签错误的主要内容,如果未能解决你的问题,请参考以下文章
如何对 RandomForest 进行二值化以在 python 中绘制 ROC?
如何将randomforest分类器应用于所有数据集,一次在python中使用一小部分
在 scikit-learn 中运行 Randomforest 的 MemoryError