Scikit learn 逆变换函数未返回正确的值

Scikit learn 逆变换函数未返回正确的值,scikit-learn,sklearn-pandas,multilabel-classification,Scikit Learn,Sklearn Pandas,Multilabel Classification,我下面是一篇关于多标签电影类型的教程 我正在使用该教程为投诉登记创建预测标记。在我的案例中,我为投诉登记册贴上了“类型”标签,例如1个投诉可以有多个标签/类型标签)。例如:投诉#1有多种类型=保修、空调 我已经到了调用multilablebinarizer()函数来标记电影“流派”的阶段 我的问题如下: 总独特类型=55(请参见下面的屏幕截图) image.png 我运行了Multilabel_二进制函数,并将“Genre”目标变量转换为y 问题: 我遇到y只有(166,49)。如果我的理解是正

我下面是一篇关于多标签电影类型的教程

我正在使用该教程为投诉登记创建预测标记。在我的案例中,我为投诉登记册贴上了“类型”标签,例如1个投诉可以有多个标签/类型标签)。例如:投诉#1有多种类型=保修、空调

我已经到了调用multilablebinarizer()函数来标记电影“流派”的阶段

我的问题如下:

总独特类型=55(请参见下面的屏幕截图) image.png

我运行了Multilabel_二进制函数,并将“Genre”目标变量转换为y

问题:

  • 我遇到y只有(166,49)。如果我的理解是正确的,只有49种体裁,而不是55种独特的体裁

  • 我遇到错误消息: C:\Users\LAUJ3\Documents\Python Project\env\lib\site packages\sklearn\multiclass.py:74:UserWarning:Label not 47出现在所有培训示例中。 warnings.warn(“标签%s出现在所有培训示例中”。%

  • 多标签二值化器结果的逆转换函数没有意义。希望看到类型标签而不是胡言乱语 多标签二值化器.逆变换(y_pred)[3]

    y_pred[3] 出[57]: 数组([1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0,0,0,0,0])

    多标签二值化器.逆变换(y_pred)[3] Out[58]:(“,”,“a”,“c”,“e”,“g”,“i”,“n”,“o”,“r”,“t”)

  • 我不知道出了什么问题。提前谢谢你的帮助

    因为df['genre']的内容是字符串,所以您将字符作为类来获取

    #printing type of df['genre']
    print(type(df['genre'][0]))
    #op
    <class 'str'>
    
    更新代码

    #replace  df['genre'] = df['genre'].apply(lambda x :[value for value in eval(x).values()])
    df['Genre'] = df['Genre'].apply(lambda x: x.split(',')) 
    mlb.fit_transform(df1['Genre'])
    
    print(mlb.classes_)
    #op
    array([' Curtain/Blinds', ' Delays', ' Electricial Compliance',
       ' Granny Flat', ' Heating/Cooling', ' Payment', ' Refund',
       ' Unlicensed', ' Warranty', 'Airconditioning', 'Heating/Cooling',
       'Warranty'], dtype=object
    

    在早期的数据中,它使用字典格式的字符串,但在您的数据字符串中,它是逗号分隔的,您不需要使用求值函数simple split将为您工作

    谢谢您的回复。您的回答是对的,该列在STR类中。我尝试按照您的代码将其转换为list,但收到一个指示值的错误列中的值未定义。不确定是否由此.Tag['Genre']=Tag['Genre']。应用(lambda x:[value for value in eval(x).values()])文件“”,第1行,名称错误:名称“空调”未定义请告诉我您是否可以打开“我使用了movie.metadata.tsv”analyticsvidhya中提供的链接,以获取数据,学习数据9-12-2019.xls您使用过的数据和movie.metadata.tsv相同,或者您进行了一些修改???我使用了自己的文件,但将文件格式化为xls文件格式,这样我就可以跳过清理过程。该文件也在谷歌硬盘中(只有4列包括“流派”)。非常感谢!也在这里分享。我找到了将多值列转换为列表的方法。创建一个名为Test#Tag->Dataframe name#Genre->column name Test=[]Test=Tag['Genre]的空数组.str.split(“,”).tolist()标记['genre_new']=Test
    mlb.fit_transform(df['genre'])
    print(mlb.classes_[0:10]) # taking only 10 element from array since there is 363 different classes
    
    #op
    array(['Absurdism', 'Acid western', 'Action', 'Action Comedy',
       'Action Thrillers', 'Action/Adventure', 'Addiction Drama', 'Adult',
       'Adventure', 'Adventure Comedy'], dtype=object)
    
    mlb.fit_transform(df['genre'])
    print(mlb.classes_[0:10]) # taking only 10 element from array since there is 363 different classes
    
    #op
    array(['Absurdism', 'Acid western', 'Action', 'Action Comedy',
       'Action Thrillers', 'Action/Adventure', 'Addiction Drama', 'Adult',
       'Adventure', 'Adventure Comedy'], dtype=object)
    
    #replace  df['genre'] = df['genre'].apply(lambda x :[value for value in eval(x).values()])
    df['Genre'] = df['Genre'].apply(lambda x: x.split(',')) 
    mlb.fit_transform(df1['Genre'])
    
    print(mlb.classes_)
    #op
    array([' Curtain/Blinds', ' Delays', ' Electricial Compliance',
       ' Granny Flat', ' Heating/Cooling', ' Payment', ' Refund',
       ' Unlicensed', ' Warranty', 'Airconditioning', 'Heating/Cooling',
       'Warranty'], dtype=object