六、朴素贝叶斯分类
背景知识:第三大点的第4点:概率 基础定义_数学概率中事件的定义-CSDN博客
1、条件概率
𝑃(𝐴|𝐵)=𝑃(𝐴∩𝐵)/𝑃(𝐵) :A事件在B事件发生的情况下发生的概率为 交集发生的概率除以B事件发生的概率。
2、全概率公式
𝑃(𝐵)=𝑃(𝐵|𝐴)𝑃(𝐴)+𝑃(𝐵|𝐴′)𝑃(𝐴′):事件B的概率为B在A发生的情况下概率以及B在非A发生情况下的概率之和。𝑃(𝐴′)表示非A事件。
3、贝叶斯推论
𝑃(𝐴|𝐵)=𝑃(𝐴) * 𝑃(B|A)/𝑃(𝐵):A事件在B事件发生情况下的概率为A事件概率乘以B事件在A事件发生情况下概率除以B事件发生的概率,也就是前提的互换。
P(A)称为"先验概率"(Prior probability),即在B事件发生之前,我们对A事件概率的一个判断。
P(A|B)称为"后验概率"(Posterior probability),即在B事件发生之后,我们对A事件概率的重新评估。
P(B|A)/P(B)称为"可能性函数"(Likelyhood),这是一个调整因子,使得预估概率更接近真实概率。
后验概率 = 先验概率x调整因子
4、朴素贝叶斯推论
对条件概率分布做了条件独立的假设,再去使用 𝑃(𝐴|𝐵)=𝑃(𝐴) * 𝑃(B|A)/𝑃(𝐵) 。
5、拉普拉斯平滑系数
某些事件或特征可能从未出现过,这会导致它们的概率被估计为零。所以进行了分子加上1,分母加上特征总数量
6、API
from navie_beyes import MultinomialNB
同样的使用 fit 训练,predict预测, score 获取准确率
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNBx,y = load_iris(return_X_y=True)
# 划分数据集
x_train,x_test, y_train,y_test = train_test_split(x,y,shuffle=True,train_size=0.85,stratify=y)
# 实例化预估器
model = MultinomialNB()
# fit 训练数据
model.fit(x_train,y_train)
# score 获得准确率
print(model.score(x_test,y_test))
七、决策树
1、信息熵
通过本样本的类别在样本空间占比的方法进行计算
例如:样本空间为8,该特征存在两个类别,第一个类别占据5,第二种占据3,那么该点的信息熵为 -(5/8log5/8 + 3/8log3/8)
信息熵越小,决策价值越大。(信息熵大代表对数据划分性能差,故而无法决策)
2、信息增益 entropy
在根节点判断情况下得到新的样本空间,这时候得到特征的信息熵减去根节点信息熵的绝对值,就是该特征的信息增益。
信息增益越大,越有决策价值。
3、基尼指数 gini
也就是二分类,一个节点包含的样本属于正类的概率是 (p),则属于负类的概率是 (1-p):
Gini(p) =
基尼指数约大,数据越混乱,决策效果越差。
4、可视化决策树
export_graphviz(算法名称, out_file = "路径/名称.dot",fearure_names=特征描述)
将文件内容复制到网站(Webgraphviz )后生成。
5、API
from sklearn.tree import DecisionTreeClassifier
参数:criterion:gini-基尼指数;entropy-信息增益;log_loss-对数损失
max-depth:整数,默认None
from sklearn.tree import DecisionTreeClassifier, export_graphviz
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_splitwine = load_wine()
x = wine.data
y = wine.target
x_train, x_test, y_train, y_test = train_test_split(x,y, test_size=0.2)
# 生成决策树对象
tree = DecisionTreeClassifier()
# 使用fit训练数据
tree.fit(x_train, y_train)
print(tree.score(x_test, y_test))# 生成可视化文件
export_graphviz(tree, out_file="../model/wine_tree.dot", feature_names=wine.feature_names)
八、随机森林
1、API
from sklearn.ensemlbe import RandomForestClassifier
参数与决策树一致
import pandas as pd
from sklearn.feature_extraction import DictVectorizer
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier# 1、获取数据
titanic = pd.read_csv("../../src/titanic/titanic.csv")
titanic.head()
# 筛选特征值和目标值
x = titanic[["pclass", "age", "sex"]]
y = titanic["survived"]# 2、数据处理
# 1)缺失值处理
x["age"].fillna(x["age"].mean(), inplace=True)
# 2) 转换成字典
x = x.to_dict(orient="records")
# 3)、数据集划分
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=22)
# 4)、字典特征抽取
transfer = DictVectorizer()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)# 3、创建训练模型,,传入数据
estimator = RandomForestClassifier()
estimator.fit(x_train, y_train)# 4、模型评估
score = estimator.score(x_test, y_test)
print("准确率为:\n", score)