多层次决策分类

2024-03-28 12:45:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试对具有多个级别的对象进行分类。我可以用一个例子来解释:

我可以做到:

from sklearn import tree
features = ['Hip Hop','Boston'],['Metal', 'Cleveland'],['Gospel','Ohio'],['Grindcore','Agusta']]
labels = [1,0,0,0]
clf = tree.DecisionTreeClassifier()
clf = clf.fit(features, labels)

但我想这么做:

from sklearn import tree
features = ['Hip Hop','Boston',['Run DMC','Kanye West']],['Metal', 'Cleveland',['Guns n roses','Poison']],['Gospel','Ohio',['Christmania','I Dream of Jesus']],['Grindcore','Agusta', ['Pig Destroyer', 'Carcas', 'Cannibal Corpse']]
labels = [1,0,0,0]
clf = tree.DecisionTreeClassifier()
clf = clf.fit(features, labels)
clf.predict_proba(<blah blah>)

我试图分配一个可能性,一个人会喜欢一个乐队的基础上,他们的位置,最喜欢的流派,和其他乐队,他们喜欢。你知道吗


Tags: fromimporttreelabelssklearnbostonfeaturesclf
1条回答
网友
1楼 · 发布于 2024-03-28 12:45:30

您有一个简单的解决方案:只需将每个波段转换为二进制特征(您可以使用MultiLabelBinarizer或类似的工具)。在将X矩阵输入树之前,它将如下所示:

binary matrix

您可以使用以下代码创建这样一个矩阵:

import pandas as pd
features = [['Hip Hop','Boston',['Run DMC','Kanye West']],
            ['Metal', 'Cleveland',['Guns n roses','Poison']],
            ['Gospel','Ohio',['Christmania','I Dream of Jesus']],
            ['Grindcore','Agusta', ['Pig Destroyer', 'Carcas', 'Cannibal Corpse']]]
df = pd.DataFrame([{**{f[0]:1, f[1]:1}, **{k:1 for k in f[2]}} for f in features]).fillna(0)

如果频带数少,二进制编码就足够了。但是如果有太多的波段,你可能需要降低维数。可以通过以下步骤完成:

  1. 创建用户带数矩阵,如上图所示
  2. (可选)将其正常化,例如使用tf idf
  3. 应用matrix decomposition算法从矩阵中提取“潜在特征”。你知道吗
  4. 将潜在特征输入到决策树(或任何其他估计器)。你知道吗

如果波段的数目很大,但观测值太少,即使矩阵分解也可能没有多大帮助。如果是这样的话,唯一的建议就是使用更简单的特性,例如用相应的类型替换组。你知道吗

相关问题 更多 >