利用贝叶斯定理中概率统计知识,对离散型的数据进行分类的算法
# 优点 算法易于实现和部署,执行效率和准确度高
# 缺点 适合处理离散型的数据,不适合处理连续型的数据
# 贝叶斯定理 P(A|B)= P(A∩B)/P(B) = (P(B|A)*P(A))/P(B)
# 例子:
# 症状 职业 疾病
# 打喷嚏 护士 感冒
# 打喷嚏 农夫 过敏
# 头痛 建筑工人 脑震荡
# 头痛 建筑工人 感冒
# 打喷嚏 教师 感冒
# 头痛 教师 脑震荡
# 现在来了第七个病人,是一个打喷嚏的建筑工人,他患那种疾病的概率最高?
# P(感冒|打喷嚏 * 建筑工人) = P(打喷嚏 * 建筑工人)*P(感冒)/P(打喷嚏 * 建筑工人)
# 假设打喷嚏 和 建筑工人是独立的
# P(感冒|打喷嚏 * 建筑工人) = P (打喷嚏|感冒)* P(建筑工人|感冒) *P(感冒)/ P(打喷嚏)*P(建筑工人)
# = 0.66 * 0.33 * 0.5/0.33*0.5
# P(过敏|打喷嚏 * 建筑工人) = 0
# P(脑震荡|打喷嚏 * 建筑工人) = 0
import numpy;
import pandas;
data = pandas.read_csv("F:\\python 数据挖掘分析实战\\Data\\data (3).csv");
fData = data[
["ParentIncome", 'IQ', "Gender", "ParentEncouragement"]
].to_dict('records')
tData = data["CollegePlans"]
from sklearn.feature_extraction import DictVectorizer
dictVectorizer = DictVectorizer()
pData = dictVectorizer.fit_transform(
fData
).toarray()
pData = pData[:, [1, 2, 3, 5]]
#随机重排序
permutation = numpy.random.permutation(data.shape[0])
pData = pData[permutation]
tData = tData[permutation]
#高斯贝叶斯
from sklearn.naive_bayes import GaussianNB
GNBModel = GaussianNB()
GNBModel.fit(pData[:6000], tData[:6000])
GNBModel.score(pData[6000:], tData[6000:])
#多项朴素贝叶斯
from sklearn.naive_bayes import MultinomialNB
MNBModel = MultinomialNB()
MNBModel.fit(pData[:6000], tData[:6000])
MNBModel.score(pData[6000:], tData[6000:])
#伯努利贝叶斯
from sklearn.naive_bayes import BernoulliNB
BNBModel = BernoulliNB()
BNBModel.fit(pData[:6000], tData[:6000])
BNBModel.score(pData[6000:], tData[6000:])
参考文献
作者A:ken