使用sklearn进行高斯朴素贝叶斯分类的数据类型,如何清理数据[重复]

Posted

技术标签:

【中文标题】使用sklearn进行高斯朴素贝叶斯分类的数据类型,如何清理数据[重复]【英文标题】:Data type for gaussian Naive bayes classifivation using sklearn, how to clean data [duplicate] 【发布时间】:2018-11-06 01:29:41 【问题描述】:

我正在尝试根据手机的功能对其进行分类,但是当我通过 sklearn 应用高斯 NB 代码时,由于以下错误,我无法这样做: 代码:

clf = GaussianNB()
clf.fit(X_train,y_train)
GaussianNB()
accuracy = clf.score(X_test,y_test)
print(accuracy)

错误:

ValueError                                Traceback (most recent call last)
<ipython-input-18-e9515ccc2439> in <module>()
      2 clf.fit(X_train,y_train)
      3 GaussianNB()
----> 4 accuracy = clf.score(X_test,y_test)
      5 print(accuracy)

/Users/kiran/anaconda/lib/python3.6/site-packages/sklearn/base.py in score(self, X, y, sample_weight)
    347         """
    348         from .metrics import accuracy_score
--> 349         return accuracy_score(y, self.predict(X), sample_weight=sample_weight)
    350 
    351 

/Users/kiran/anaconda/lib/python3.6/site-packages/sklearn/naive_bayes.py in predict(self, X)
     63             Predicted target values for X
     64         """
---> 65         jll = self._joint_log_likelihood(X)
     66         return self.classes_[np.argmax(jll, axis=1)]
     67 

/Users/kiran/anaconda/lib/python3.6/site-packages/sklearn/naive_bayes.py in _joint_log_likelihood(self, X)
    422         check_is_fitted(self, "classes_")
    423 
--> 424         X = check_array(X)
    425         joint_log_likelihood = []
    426         for i in range(np.size(self.classes_)):

/Users/kiran/anaconda/lib/python3.6/site-packages/sklearn/utils/validation.py in check_array(array, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)
    380                                       force_all_finite)
    381     else:
--> 382         array = np.array(array, dtype=dtype, order=order, copy=copy)
    383 
    384         if ensure_2d:

ValueError: could not convert string to float: 

我的数据集已被抓取,因此它包含字符串和浮点值。如果有人能建议我如何清理数据并避免错误,那将会很有帮助。

【问题讨论】:

【参考方案1】:
ValueError: could not convert string to float 

我认为这说明了一切。您需要将 float 作为数据集中的一致数据类型。

将python中的string转换为float

>>> a = "123.345"
>>> float(a)
>>> 123.345
>>> int(float(a))
>>> 123

【讨论】:

此外,如果问题中提供了所有相关信息,则更容易回答问题。您也应该发布带​​有问题的数据集的 sn-p(一小部分)。 有没有办法对字符串数据集做到这一点? 我会这样做的!我将编辑并添加数据集。 我已经编辑了我的答案,包括如何将字符串转换为浮点数。做检查。 那么您的问题现在解决了吗?【参考方案2】:

尝试以下方法:

accuracy = clf.score(X_test.astype('float'),y_test.astype('float'))

【讨论】:

它仍然显示同样的错误。 你能做 print(X_test) 和 print(Y_test) 来告诉我们里面是什么吗? 'print(X_test)' [[32 '4' 12 1] [8 '1' 8 0] [32 '3' 13 0] [64 '6' 16 1] [16 ' 2' 12 0] [16'3' 13 0] [16'2' 8 0] [64'4' 16 1] [128'6' 16 1] [8'1' 8 0] [128'6' 12 1] [64 '4' 12 1] [64 '4' 16 0] [128 '4' 12 1] [32 '4' 16 0] [32 nan 16 1] [16 nan 8 0] [16 nan 8 0] [16 '3' 13 0] [64 '6' 16 1]] 'print(y_test)'[1 3 2 2 3 3 3 2 2 3 3 1 2 1 2 2 3 3 3 2] 我做了将 nan 值更改为 -99999 但仍显示 nan

以上是关于使用sklearn进行高斯朴素贝叶斯分类的数据类型,如何清理数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章

sklearn中的朴素贝叶斯模型及其应用

sklearn中的朴素贝叶斯模型及其应用

sklearn中的朴素贝叶斯模型及其应用

sklearn中的朴素贝叶斯模型及其应用

sklearn中的朴素贝叶斯模型及其应用

sklearn中的朴素贝叶斯模型及其应用