[Python]请帮我优化一下这个贝叶斯分类器
  • 板块灌水区
  • 楼主Light_LE
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/7/20 21:09
  • 上次更新2023/11/3 08:33:51
查看原帖
[Python]请帮我优化一下这个贝叶斯分类器
816204
Light_LE楼主2023/7/20 21:09
import pandas as pd
import numpy as np
from sklearn.naive_bayes import *
from sklearn.model_selection import *
from sklearn.preprocessing import *

df = pd.read_csv("adult.csv", header=None)

LE = [] 
data = np.empty(df.shape)

for i in df.columns:
    #清空上一个编码器
    encoder = None
    if df[i].dtype==object:
        #创建一个编码器
        encoder = LabelEncoder()
        #进行编码
        data[:,i]=encoder.fit_transform(df[i])
    else:  # 数值型数据
        data[:, i] = df[i]
    #在LE列表中存储编码器
    LE.append(encoder)

split_data = train_test_split(data[:, :-1], data[:,-1])
x_train = split_data[0]
x_test = split_data[1]
y_train = split_data[2]
y_test = split_data[3]

c=GaussianNB()
c.fit(x_train, y_train)
print(c.score(x_test, y_test))

t_word = pd.read_csv("pred.csv", header=None)
info1 = int(input("请输入预测者的年龄:"))
info2 = input("请输入预测者的工作性质:")
info3 = input("请输入预测者的学历:")
info4 = input("请输入预测者的性别:")
t_word[0] = info1
t_word[1] = ' ' + info2
t_word[3] = ' ' + info3
t_word[9] = ' ' + info4

# t_word = [[51, " Self-emp-not-inc", 45781, " Masters", 14, " Never-married", " Prof-specialty", " Husband", " White", " Male", 0, 0, 45, " United-States"]]
# t_word = [[15, " Private", 45781, " HS-grad", 9, " Never-married", " Handlers-cleaners", " Not-in-family", " White", " Female", 0, 0, 50, " United-States"]]
t_word = pd.DataFrame(t_word)
print(t_word.shape)
t_word2 = np.empty(t_word.shape)
for i in t_word.columns:
    encoder = None
    if t_word[i].dtype==object: # 字符型数据
        encoder = LE[i]
        t_word2[:, i] = encoder.transform(t_word[i])

    else:  # 数值型数据
        t_word2[:, i] = t_word[i]
res = c.predict(t_word2)
print(res)
if res == 1:
    print("年收入>50k")
else:
    print("年收入<=50k")

然后还有个给贝叶斯分类器的训练文件,但数据太大了,传不上来,是adult.csv
源代码下载(密码:light)

2023/7/20 21:09
加载中...