1、导入朴素贝叶斯模型,划分数据集
from sklearn import datasets
from sklearn.naive_bayes import GaussianNB
iris=datasets.load_iris()
iris_x=iris.data
iris_y=iris.target
indices = np.random.permutation(len(iris_x))
iris_x_train = iris_x[indices[:-10]]
iris_y_train = iris_y[indices[:-10]]
iris_x_test = iris_x[indices[-10:]]
iris_y_test = iris_y[indices[-10:]]
2、训练模型
clf = GaussianNB()#简单高斯朴素贝叶斯分类器,无需传参
clf.fit(iris_x_train,iris_y_train)
3、为测试数据集分类
iris_y_predict = clf.predict(iris_x_test)
score=clf.score(iris_x_test,iris_y_test,sample_weight=None)
print('iris_y_predict = ')
print(iris_y_predict)
print('iris_y_test = ')
print(iris_y_test)
print('Accuracy:',score)
iris_y_predict =
[1 2 1 0 0 0 2 1 2 0]
iris_y_test =
[1 1 1 0 0 0 2 1 2 0]
Accuracy: 0.9
素贝叶斯假设前提,那就是所有的条件对结果都是独立发生作用的。
算法的优点
逻辑清晰简单、易于实现,适合大规模数据。
根据算法的原理,只要我们把样本中所有属性相关 的概率值都计算出来,然后分门别类地存储好,就获得了我们的朴素贝叶斯模型。
运算开销小。
根据上一条我们可以得知,所有预测需要用到的概率都已经准备好,当新数据来了 之后,只需要获取对应的概率值,并进行简单的运算就能获得结果。
对于噪声点和无关属性比较健壮。
噪声点和无关属性对算法影响较小,在很多邮件服务中仍然一 直沿用这个方法进行垃圾邮件过滤。
预测过程快。
由于所有需要用到的属性相关概率都已经计算出来了,在新数据到来需要预测的时候,只需要把对应的一些概率值取出来进行计算就可以获得结果,所用到的时间和空间都很小。
算法的缺点
由于做了 “各个属性之间是独立的”这个假设,同样该算法也暴露了缺点。因为在实际应用中,属性之间完全独立的情况是很少出现的,如果属性相关度较大,那么分类的效果就会变差。所以在具体应用的时候要好好考虑特征之间的相互独立性,再决定是否要使用该算法,比如,维度太多的数据可能就不太适合,因为在维度很多的情况下,不同的维度之间越有可能存在联合的情况,而不是相互独立的,那么模型的效果就会变差。