【问题标题】:How can I implement the naïve Bayes algorithm?如何实现朴素贝叶斯算法?
【发布时间】:2021-04-09 08:39:21
【问题描述】:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

cigdata = pd.read_csv ('cigs.csv')
print(cigdata.head())
cigdata.shape
#Changing pandas dataframe to numpy array
X = cigdata.iloc[:,:8].values
y = cigdata.iloc[:,8:9].values
#Normalizing the data
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X = sc.fit_transform(X)

我正在尝试规范化我的数据以实现朴素贝叶斯算法,但它不起作用,因为我的数据集中有字符串值并且它显示如下:

valuetype错误字符串值无法转换为float。

【问题讨论】:

  • 好的,所以问题似乎是,您正在从 CSV 读取一些数据,但这些数据被 python 解释为字符串(可能是因为它在 csv 中被 "" 包装了。但是你能提供更具体的错误消息?“它显示类似这种值类型的错误字符串值不能转换为浮点数”对于缩小可能的错误原因不是很有用。
  • X = sc.fit_transform(X) 在这一行它给了我错误先生,因为我的数据集中有一些列包含一些字符串值,所以它给我错误字符串值不能转换为浮点数并将其命名为 valuetype error
  • 您能否也提供cigs.csv 如果它很大,至少提供一个样本。
  • Alpine Lt 15 1.1 16 100 F SP 是
  • 以上这些值是第一行,总共包含 9 列

标签: python naivebayes


【解决方案1】:

您可以从sklearn 使用LabelEncoder

在您的情况下,分类列是索引[0, 1, 6, 7, 8] 您可以使用以下代码对它们进行编码:

from sklearn.preprocessing import LabelEncoder 

# ....

cat_index = [0, 1, 6, 7, 8]
cigdata.iloc[:, cat_index] = cigdata.iloc[:, cat_index].apply(LabelEncoder().fit_transform)

将其放在read_csv 之后,您应该会看到一个仅包含数值的数据框。

【讨论】:

    猜你喜欢
    • 2019-02-15
    • 2012-04-09
    • 2015-09-16
    • 2018-02-14
    • 2018-12-07
    • 1970-01-01
    • 2021-07-24
    • 2012-02-21
    • 2011-12-28
    相关资源
    最近更新 更多