gpt4 book ai didi

python - 当属性为字符串(不是 int 或 float)时,如何在 Scikit learn 中应用二元分类器

转载 作者:行者123 更新时间:2023-12-01 05:04:09 25 4
gpt4 key购买 nike

我有一个二元语言类人员的名字和姓氏列表(说英语或不说英语)。

这是一个示例文件(我用虚拟值更改了名称以保护人们的隐私):

name1,name2,0
name3,name4,0
name5,name6,1
name7,name2,0
name8,name3,0
name9,name10,1
name11,name5,1

我想使用 Scikit learn 应用 SVM 和朴素贝叶斯等机器学习算法来评估二元分类任务。由于 scikit 不允许属性为字符串,因此我将它们转换为整数。转换后的示例文件如下:

1,2,0
3,4,0
5,6,1
7,2,0
8,3,0
9,10,1
11,5,1

我想问SVM和朴素贝叶斯是否将名字和姓氏的输入值视为独立值或者数字之间存在某种关系?换句话说,5 大于 2 是否重要,否则这些数字将被视为唯一值,而不管其算术值如何。

提出这个问题的原因是,如果我按语言(即首先讲英语的人)对列表进行排序,然后用整数替换名称,该算法会给出非常好的结果(准确度和 f 分数高于 97%)。但如果我打乱列表,然后用整数替换名称,结果会很差。

一般来说,当属性值为字符串时,使用 Scikit 进行分类的解决方案是什么。

P.S.1:我使用 Weka 测试了相同的数据集,但没有遇到这样的问题,因为 Weka 使用 arff 文件并且它本身会进行必要的转换。

P.S.2:这是我用来读取文件并应用算法的代码(工作正常,没有错误)

#read file into numpy array format
path = "/path/to/csv/file/BinaryClassification.csv"
import numpy as np
lstAttributes = np.loadtxt(path, delimiter=',')[:,0:2]
lstLabels = np.loadtxt(path, delimiter=',')[:,2:3]
tempArr = []
for v in lstLabels:
tempArr.append(float(v))
from numpy import array
lstLabels = array(tempArr)

#trains and test algorithms (uses whole data as training and test set)
from sklearn import naive_bayes
classifier = naive_bayes.GaussianNB()
model = classifier.fit(lstAttributes, lstLabels)
prediction = model.predict(lstAttributes)
from sklearn.metrics import confusion_matrix
print confusion_matrix(lstLabels, prediction)

#Use 5 fold cross validation to evaluate the algorithms
from sklearn import cross_validation
scores = cross_validation.cross_val_score(classifier, lstAttributes, lstLabels, cv=5, scoring='f1')
print("cross validation: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2))

最佳答案

一般来说,您必须知道字符串的含义才能将其转换为数字特征值,并且您还必须考虑结果进入哪种学习算法。在这种情况下,one-hot 编码可能是首先尝试的最佳选择。 DictVectorizer实现这一点。结果将是指示变量的稀疏矩阵,因此您最好从 GaussianNB 切换到 BernoulliNB (并不是说 GaussianNB 对您来说有意义当前编码)。

关于python - 当属性为字符串(不是 int 或 float)时,如何在 Scikit learn 中应用二元分类器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25411924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com