Python 如何使用字符串标签和特征训练树分类器?

Python 如何使用字符串标签和特征训练树分类器?,python,machine-learning,artificial-intelligence,classification,decision-tree,Python,Machine Learning,Artificial Intelligence,Classification,Decision Tree,下面是我的代码: import sklearn #features = [[140,"smooth"],[130,"smooth"],[150,"bumpy"],[170,"bumpy"]] #labels = ["apple","apple","orange","orange"] # Now replace 1 for smooth & 0 for bumpy and 0 for apple & 1 for orange features = [[140,1],[130,1]

下面是我的代码:

import sklearn
#features = [[140,"smooth"],[130,"smooth"],[150,"bumpy"],[170,"bumpy"]]
#labels = ["apple","apple","orange","orange"]

# Now replace 1 for smooth & 0 for bumpy and 0 for apple & 1 for orange
features = [[140,1],[130,1],[150,0],[170,0]]
labels = [0,0,1,1]

# Now I train a classifier
from sklearn import tree

my_classifier = tree.DecisionTreeClassifier()
my_classifier.fit(features,labels)
predict = my_classifier.predict([[150,0]])
print(predict)
如何训练分类器而不将其转换为数字

e、 我想在下面几行代码中对我的分类器进行分类。请建议,提前感谢:)


由于算法在引擎盖下工作的方式,您的标签和特征总是会在某个点转换为一个热向量


您只需维护一个字典,其中向量的哪个索引表示哪个标签,并在推断后将其返回。

教程中提到了这一点。但是您可以使用任何类型作为标签或功能。对于不需要转换的目标(标签),它将由scikit处理。但对于需要转换的功能,我删除了“…在监督学习中”,因为这是多余的。我重新命名为“字符串标签和特征”,因为它们是不同的东西,它们得到不同的处理,无论是在算法上还是在sklearn中编码(取决于分类器的类型:基于树的、NN等)。(另外,字符串特性通常需要规范化,而字符串标签则不需要)。哪一个应该是规范的?字符串特征应该被视为范畴,而不是整数。此外,我们通常首先进行一些规范化(去掉无意义的大小写、空格、标点符号和数字,可能是柠檬化)和拼写错误容忍查找(例如Levenshtein距离)@smci,通常情况下,当类别定义良好时,如(硬、易)或(平滑、凹凸)或(高、中、低)等,我们不需要您描述的其他标准化过程),但是对于Levenshtein距离+1:)@smci True,在内部它可能会转换为一个热向量,而不是整数。然而,AFAIK scikit learn不接受标签的一个热向量输入或输出,而是接受整数。如果我错了,请随时纠正我,我会更改答案。伙计们,已经尝试过下面的方法,它可以工作,但我相信如果我的功能增加,会有另一个很好的方法来做:从sklearn导入预处理编码器=预处理。LabelEncoder()encodeValues=编码器。fit_transform([“平滑”、“平滑”、“凹凸”,“凹凸”])打印(编码值)功能=[[140,1]、[130,1]、[150,0]、[170,0]]解码值=编码器。逆变换([1,1,0,0])打印(解码值)@Ashish.k您正在朝着正确的方向前进。没有更好的方法可以做到这一点。只有正确的方法,这是一种热编码。当您说smooth=1和bumpy=0时,模型可能会假设平滑的顺序高于bumpy,这与您的类别中不包含任何顺序无关。
features = [[140,"smooth"],[130,"smooth"],[150,"bumpy"],[170,"bumpy"]]
labels = ["apple","apple","orange","orange"]