ValueError:未知标签类型:拟合数据时的“连续多输出”

时间:2019-06-18 22:06:55

标签: python machine-learning scikit-learn

我想基于一个带有scikit-learn的{​​{1}}的输入参数来预测多个结果。 由于某种原因,我总是会收到此错误,并且我不知道出了什么问题:

MultiOutputClassifier

我尝试使ValueError: Unknown label type: 'continuous-multioutput'成为分类数据,我尝试了my_data['Clicked'],但它给了我同样的错误。

我已经在一些简单的虚拟数据库上尝试了相同的代码,并且效果很好。 这是有效的代码:

my_data['Clicked'] = my_data['Clicked'].astype('category')

对于上面的代码,一切正常,但是对于下面的代码,我得到了错误。 我不知道问题出在哪里,因为我刚刚使用了更大的数据集和值,根据这些数据集和值我预测参数仅为0和1。零和一应该是from sklearn.multioutput import MultiOutputClassifier from sklearn.linear_model import LogisticRegression dic = {'par_1': [10, 30, 13, 19, 25, 33, 23], 'par_2': [1, 3, 1, 2, 3, 3, 2], 'outcome': [101, 905, 182, 268, 646, 624, 465]} df = pd.DataFrame(dic) variables = df.iloc[:,:-1] results = df.iloc[:,-1] multi_output_clf = MultiOutputClassifier(LogisticRegression(solver='lbfgs')) multi_output_clf.fit(results.values.reshape(-1, 1),variables) x = multi_output_clf.predict([[100]]) print(x) yes之类的类(类别),但是如果我将它们更改为'yes'和'no',我会得到no的错误。为什么这不是连续的“结果”:[101、905、182、268、646、624、465]但是0和1的序列是连续的?

cannot convert string to float

下面是我使用过的完整数据集的一部分(它给了我同样的错误):

from sklearn.multioutput import MultiOutputClassifier
from sklearn.linear_model import LogisticRegression

variables = my_data[['Clicked']] #values are integers, only 0 and 1 (0 = not clicked , 1 = clicked)
results = my_data[['Daily Time on Site', 'Age', 'Gender']] #values are integers and floats

multi_output_clf = MultiOutputClassifier(LogisticRegression(solver='lbfgs'))
multi_output_clf.fit(variables.values.reshape(-1, 1),results)

x = multi_output_clf.predict([1])
print(x)

2 个答案:

答案 0 :(得分:1)

我认为您需要使用MultiOutputRegressor(),因为您的输出变量似乎是连续的。

尝试以下更改:


variables  = my_data[['Clicked']] #values are only 0 and 1 (0 = not clicked , 1 = clicked)
results = my_data[['Daily Time on Site', 'Age', 'Gender']] #values are integers and floats

multi_output_clf = MultiOutputRegressor(LinearRegression())
multi_output_clf.fit(variables.values.reshape(-1, 1),results)

更新

>>> pd.cut(my_data['Daily Time on Site'],
...        3, labels=["low", "medium", "high"])

0       low
1      high
2    medium
3    medium
4    medium
5       low
6      high
7    medium

注意:不建议将整数用作类别,因为当变量的值范围很大时,类别数可能会激增。请将它们分成较小的组,例如10或20,然后将其视为分类值。

答案 1 :(得分:0)

我找到了解决方案,为了消除此错误,所有作为输出变量的值,在这种情况下,['Daily Time on Site', 'Age', 'Gender']必须是整数,而不是浮点数

dic = {'Daily Time on Site': [59.99, 88.91, 66.00, 74.53, 69.88, 47.64, 83.07, 69.57],
       'Age': [23,33,48,30,20,49,37,48],
       'Gender': [1, 0, 1, 1, 1, 0, 1, 1],
       'Clicked': [0, 0, 1, 0, 0, 1, 0, 1]}

my_data = pd.DataFrame(dic)
my_data['Daily Time on Site']= my_data['Daily Time on Site'].round(0)

variables = my_data[['Clicked']] #values are only 0 and 1 (0 = not clicked , 1 = clicked)
results = my_data[['Daily Time on Site', 'Age', 'Gender']] #values are integers and floats

multi_output_clf = MultiOutputClassifier(LogisticRegression(solver='lbfgs', multi_class='ovr'))
multi_output_clf.fit(variables.values.reshape(-1, 1),results)

x = multi_output_clf.predict([1])
print(x)