Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何使用str特性在Python中训练朴素贝叶斯_String_Pandas_Naivebayes - Fatal编程技术网

String 如何使用str特性在Python中训练朴素贝叶斯

String 如何使用str特性在Python中训练朴素贝叶斯,string,pandas,naivebayes,String,Pandas,Naivebayes,我有一个包含8124行和23列的蘑菇数据集。第一列称为“class”,有两种类型的值:“p”(毒药)和“e”(可食)。我想用前6000行训练朴素贝叶斯。但我不知道如何使用分类功能。我的数据集中的所有元素都具有str类型 import pandas as pd from sklearn.naive_bayes import GaussianNB df = pd.read_csv('/home/mot/PythonFiles/Mushrooms/mushrooms.csv', delimiter=

我有一个包含8124行和23列的蘑菇数据集。第一列称为“class”,有两种类型的值:“p”(毒药)和“e”(可食)。我想用前6000行训练朴素贝叶斯。但我不知道如何使用分类功能。我的数据集中的所有元素都具有str类型

import pandas as pd
from sklearn.naive_bayes import GaussianNB

df = pd.read_csv('/home/mot/PythonFiles/Mushrooms/mushrooms.csv', delimiter=',')
df_train = df.loc[:6000]
df_test = df.loc[6000:]

df_train_values = df_train.loc[:, 'cap-shape'::]
df_train_answers = df_train['class']

df_test_values = df_test.loc[:, 'cap-shape'::]
df_test_answers = df_test['class']

clf = GaussianNB()
clf.fit(df_test_values, df_test_answers)

这就是我得到的结果:ValueError:无法将字符串转换为float:'p'

实际上,朴素的贝叶斯(naivebayes)围绕着p(类|特性)的概念展开。因此,如果你有你提到的2个类(毒药|可食用),那么你想要的朴素贝叶斯概率是:

p(可食用|特征)=p(可食用)*p(帽状|可食用)/(标准化|常数)

p(毒药|特征)=p(毒药)*p(帽状|毒药)/(标准化|常数)

通常,如果您有更多功能,您会这样做:

p(1级要素)=p(1级要素)*p(1级要素)*p(2级要素)*1级要素)*……*P(特征n类1) . . . P(类要素)=P(类要素)*P(类要素1类要素)*P(类要素2类要素)*……*P(特征n类m)

这是朴素贝叶斯的一般方法。概率可以根据比例从您的训练数据中估计,即给定类别,类别1的比例为类别


如果你想知道为什么我没有添加除数(规范化常数),那是因为它只是一个规范化常数。然而,由于这一点,需要注意的是,由于我们处理的是比例(数字<1),特别是当数据集稀疏时,大多数编程语言中可能会出现数学下溢错误。这是一个非常低的数字(接近于0),受可用于表示浮点小数的字节数的限制。纠正这种情况的一种方法是在除数的每个计算步骤中进行规范化,以防止出现下溢。

创建
假人
或使用
一个热编码
谢谢,我已经做过了,它似乎在工作,但我在课堂上得到了两个练习。1) 使用库中的函数训练朴素贝叶斯,2)自己编写朴素贝叶斯分类器。第二个已经完成了,但是我仍然有一个关于ex1的问题。如果我的所有特征都是str类型,我如何使用sklearn中的GaussianNB?您可以使用
CountVectorizer
使用
词汇表
参数来获得每行的聚合计数,或者一个热编码或伪变量,如上面提到的@AkshayNevrekar。我不知道你已经完成了我建议的上述部分——这方面的问题并不完全清楚。除了我提到的或@AkshayNevrekar提到的方法之外,你还探索过其他方法吗?