使用朴素贝叶斯分类对二手房数据集进行分类

sklearn 的 naive_bayes 模块提供了 3 种朴素贝叶斯算法,分别是高斯朴素贝叶斯、多项式朴素贝叶斯和伯努利朴素贝叶斯。这 3 种算法适用于不同的场景,应该根据特征变量的不同选择不同的算法。

  1. 高斯朴素贝叶斯:特征变量是连续变量,符合高斯分布,如人的身高、物体的长度。
  2. 多项式朴素贝叶斯:特征变量是离散变量,符合多项式分布。例如,在文档分类中,特征变量体现在一个单词出现的次数或者单词的 TF-IDF 值等。
  3. 伯努利朴素贝叶斯:特征变量是布尔变量,符合 0/1 分布,如在文档分类中特征是单词是否出现。
# 导入必要的库
import numpy as np
from sklearn import metrics
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
import matplotlib.pyplot as plt
# 转换数据并划分
X ,Y= [],[] 
fr = open("./knn.txt")
for line in fr.readlines():
    line = line.strip().split()
    X.append([int(line[0]),int(line[1])])
    Y.append(int(line[-1]))
X=np.array(X) #转换成 NumPy 数组,X 是特征属性集
Y=np.array(Y) 
train_X,test_X,train_y,test_y=train_test_split(X, Y, test_size=0.16)
# 是用模型进行预测
model = GaussianNB()
model.fit(train_X, train_y)
print(model) #输出模型的参数
expected = test_y #实际类别值
predicted = model.predict(test_X) #预测的类别值
print(metrics.classification_report(expected, predicted)) #输出分类信息
label = list(set(Y)) #去重复,得到标签类别
print(metrics.confusion_matrix(expected, predicted, labels=label))
GaussianNB()
              precision    recall  f1-score   support

           2       1.00      1.00      1.00         1
           3       1.00      1.00      1.00         1

    accuracy                           1.00         2
   macro avg       1.00      1.00      1.00         2
weighted avg       1.00      1.00      1.00         2

[[0 0 0]
 [0 1 0]
 [0 0 1]]
# 分类结果可视化
import matplotlib as mpl
N, M = 90, 90 #网格采样点的个数
t1 = np.linspace(0, 25, N) #生成采样点的横坐标值
t2 = np.linspace(0,12, M) #生成采样点的纵坐标值
x1, x2 = np.meshgrid(t1, t2) #生成网格采样点
x_show = np.stack((x1.flat, x2.flat), axis=1) #将采样点作为测试点
y_show_hat = model.predict(x_show) # 预测值
y_show_hat = y_show_hat.reshape(x1.shape) # 使之与输入的形状相同
cm_light = mpl.colors.ListedColormap(['#A0FFA0', '#FFA0A0', '#A0A0FF'])
plt.pcolormesh(x1, x2, y_show_hat, cmap=cm_light,alpha=0.8)
plt.scatter(train_X[train_y==1,0],train_X[train_y==1,1],color='red',marker='o')
plt.scatter(train_X[train_y==2,0],train_X[train_y==2,1],color='green',marker='x')
plt.scatter(train_X[train_y==3,0],train_X[train_y==3,1],color='blue',marker='d')
plt.show()

在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值