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)