Sklearn Naive Bayes GaussianNB from .csv



我对sklearn有一个问题。当我用&;。fit()&;它显示了ValueError "ValueError:无法将字符串转换为float: 'Casado'"这是我的代码:"">

from sklearn.naive_bayes import GaussianNB
import pandas as pd

# 1. Create Naive Bayes classifier:
gaunb = GaussianNB()
# 2. Create dataset:
dataset = pd.read_csv("archivos_de_datos/Datos_Historicos_Clientes.csv")
X_train = dataset.drop(["Compra"], axis=1) #Here I removed the last column "Compra"
Y_train = dataset["Compra"] #This one only consists of that column "Compra"
print("X_train: ","n", X_train)
print("Y_train: ","n", Y_train)
dataset2 = pd.read_csv("archivos_de_datos/Nuevos_Clientes.csv")
X_test = dataset2.drop("Compra", axis=1)
print("X_test: ","n", X_test)
# 3. Train classifier with dataset:
gaunb = gaunb.fit(X_train, Y_train) #Here shows "ValueError: could not convert string to float: 'Casado'"

# 4. Predict using classifier:
prediction = gaunb.predict(X_test)
print("PREDICTION: ",prediction)
"""

我使用的数据集是一个。csv文件,看起来像这样(但有更多的行):

IdCliente,EstadoCivil,Profesion,Universitario,TieneVehiculo,Compra
1,Casado,Empresario,Si,No,No
2,Casado,Empresario,Si,Si,No
3,Soltero,Empresario,Si,No,Si

我正试图训练它来确定(使用测试数据集)最后一列是否会是Yes或No (Si或No)

谢谢你的帮助,我显然是新手,我不明白我在这里做错了什么

我将使用一个hotencoder,就像Lavin提到的那样,使yes或no成为一个数值。像这样的模型不能处理分类数据。

Onehotencoder用于处理二进制数据,如yes/no, male/female,而label encoder用于处理超过2个值的分类数据,如ei,国家名称。

它看起来像这样,但是,您必须对所有分类数据(而不仅仅是y列)这样做,并对非二进制的列(超过2个变量-例如,可能是Estadio Civil)使用标签编码器

我还建议删除任何对你的模型没有贡献的因变量,因为即时客户端ID听起来可能不会在确定你的因变量时增加任何价值。这是特定于上下文的,但需要记住。

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [Insert column number for your df])], remainder='passthrough')
X = np.array(ct.fit_transform(X))

对于文档:

https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html

更多信息:https://contactsunny.medium.com/label-encoder-vs-one-hot-encoder-in-machine-learning-3fc273365621: ~:文本= % 20人% 20热% 20编码% 20,这% 20列% 20 % 20 % 20价值。amp;文本= % 2 c % 20 % 20的% 20之间的差异% 20 % 20标签% 20编码% 20和% 20一个% 20热% 20编码。

最新更新