11.14 机器学习-朴素贝叶斯+决策树算法

贝叶斯底层逻辑 一个数据有可能是几种 结果 选一个概率最高的结果赋给它

朴素贝叶斯 假设各个特征之间全部独立 P(A*B*C*D*E)=P(A)*P(B)*P(C)*P(D)*P(E)

A是特征向量 B是结果

P(B|A)=P(A|B)*P(B)/P(A)

P(A|X1,X2,X3,X4,X5)=P(X1,X2,X3,X4,X5|A)*P(A)/P(X1,X2,X3,X4,X5)

由于特征之间独立

P(X1,X2,X3,X4,X5|A)=P(X1|A)*P(X2|A)*P(X3|A)*P(X4|A)*P(X5|A)*P(A)/(P(X1)*P(X2)*P(X3)*P(X4)*P(X5)) #这个式字就可以 用数据集计算出来了

拉普拉斯平滑系数 为了防止0概率的出现 这样即使 x2/A一个都没有也不会出现0概率的情况 这个概率要拿去乘的

P(X2|A)= A发生的概率下x2发生的数量+1 / A发生的数量 + 有多少种X

API

from sklearn.datasets import load_iris

from sklearn.model_selection import train_test_split

from sklearn.naive_bayes import MultinomialNB

import joblib

import pandas as pd

from scipy.stats import mode

def naive_bayes1():

sklearn.naive_bayes.MultinomialNB()

estimator.fit(x_train, y_train)

y_predict = estimator.predict(x_test)

X,y=load_iris(return_X_y=True)

X_train,X_test,y_train,y_test=train_test_split(X,y,stratify=y,random_state=666,train_size=0.7)

创建 朴素贝叶斯 预估器

NB1=MultinomialNB()

NB1.fit(X_train,y_train)

score=NB1.score(X_test,y_test)

print(score)

保存模型

joblib.dump(NB1,"assets/model/NB_iris.pkl")

flow1=[[5,3,2,4],[3,6,2,1],[6,2,4,2]]

res=NB1.predict(flow1)

print(load_iris().target_names[res])

pass

def naive_bayes2():

df1 = pd.read_csv("assets/csv/titanic.csv")

x = df1[["age", "sex", "pclass"]]

y = df1["survived"]

计算 age 列的众数

age_mode = mode(x["age"].dropna())[0] # 使用 dropna() 去掉 NaN 值后计算众数

print(age_mode)

用众数填充 age 列中的 NaN 值

x["age"].fillna(age_mode, inplace=True)

处理 性别字符串变为 数字

x["sex"] = x["sex"].map({"female": 1, "male": 0}) #方式1

# 方式2

x2=x["sex"]=="female"

x["sex"]=x2

处理 pclass字符串变为 数字

x["pclass"] = x["pclass"].map({"1st": 1, "2nd": 2,"3rd":3})

X_train,X_test,y_train,y_test=train_test_split(x,y,stratify=y,random_state=666,train_size=0.7)

创建 朴素贝叶斯 预估器

NB1=MultinomialNB()

NB1.fit(X_train,y_train)

score=NB1.score(X_test,y_test)

print(score)

print(y)

if name=="main":

naive_bayes1()

naive_bayes2()

pass

1、决策节点

通过条件判断而进行分支选择的节点。如:将某个样本中的属性值(特征值)与决策节点上的值进行比较,从而判断它的流向。

2、叶子节点

没有子节点的节点,表示最终的决策结果。

3、决策树的深度

所有节点的最大层次数。

决策树具有一定的层次结构,根节点的层次数定为0,从下面开始每一层子节点层次数增加

4、决策树优点:

​ 可视化 - 可解释能力-对算力要求低

5、 决策树缺点:

​ 容易产生过拟合,所以不要把深度调整太大了。

基于信息增益决策树的建立 根据信息增益决定先判断谁 信息增益高的先判断

信息增益决策树倾向于选择取值较多的属性,在有些情况下这类属性可能不会提供太多有价值的信息,算法只能对描述属性为离散型属性的数据集构造决策树

信息熵描述的是不确定性。信息熵越大,不确定性越大。信息熵的值越小,则D的纯度越高。

算结果的信息熵 每个特征的信息增益=结果的信息熵 - 本身的信息熵

基于基尼指数决策树的建立(了解)

API

class sklearn.tree.DecisionTreeClassifier(....)

参数:

criterion "gini" "entropy" 默认为="gini"

当criterion取值为"gini"时采用 基尼不纯度(Gini impurity)算法构造决策树,

当criterion取值为"entropy"时采用信息增益( information gain)算法构造决策树.

max_depth int, 默认为=None 树的最大深度

# 可视化决策树

function sklearn.tree.export_graphviz(estimator, out_file="iris_tree.dot", feature_names=iris.feature_names)

参数:

estimator决策树预估器

out_file生成的文档

feature_names节点特征属性名

功能:

把生成的文档打开,复制出内容粘贴到"http://webgraphviz.com/"中,点击"generate Graph"会生成一个树型的决策树图

from sklearn.tree import DecisionTreeClassifier,export_graphviz

from sklearn.datasets import load_iris

from sklearn.preprocessing import StandardScaler

from sklearn.model_selection import train_test_split

def decision_tree_classifier():

model1=DecisionTreeClassifier(criterion="entropy",max_depth=2) # criterion 构建决策树的方式 entropy 为信息增益方式 默认为gini方式 max_depth决策树的深度 默认为2

X,y=load_iris(return_X_y=True)

X_train,X_test,y_train,y_test=train_test_split(X,y,train_size=0.7,random_state=666)

sacler1=StandardScaler()

x_stand_train=sacler1.fit_transform(X_train)

x_stand_test=sacler1.transform(X_test)

model1.fit(x_stand_train,y_train)

score= model1.score(x_stand_test,y_test)

print(score)

决策树可视化

export_graphviz(model1,feature_names=load_iris().feature_names,out_file="assets/dot/iris_tree.dot")

if name=="main":

decision_tree_classifier()

pass

相关推荐
sin_hielo1 分钟前
leetcode 110
数据结构·算法·leetcode
整得咔咔响2 分钟前
贝尔曼最优公式(BOE)
人工智能·算法·机器学习
日拱一卒——功不唐捐2 分钟前
字符串匹配:暴力法和KMP算法(C语言)
c语言·算法
玄同7656 分钟前
Python 自动发送邮件实战:用 QQ/163 邮箱发送大模型生成的内容
开发语言·人工智能·python·深度学习·机器学习·邮件·邮箱
renke336412 分钟前
Flutter for OpenHarmony:数字涟漪 - 基于扩散算法的逻辑解谜游戏设计与实现
算法·flutter·游戏
玄同76512 分钟前
机器学习中的三大距离度量:欧式距离、曼哈顿距离、切比雪夫距离详解
人工智能·深度学习·神经网络·目标检测·机器学习·自然语言处理·数据挖掘
rainbow72424415 分钟前
AI证书选型深度分析:如何根据职业目标评估其真正价值
人工智能·机器学习
AI科技星16 分钟前
从ZUFT光速螺旋运动求导推出自然常数e
服务器·人工智能·线性代数·算法·矩阵
倔强的石头10619 分钟前
归纳偏好 —— 机器学习的 “择偶标准”
人工智能·机器学习
老鼠只爱大米20 分钟前
LeetCode经典算法面试题 #78:子集(回溯法、迭代法、动态规划等多种实现方案详细解析)
算法·leetcode·动态规划·回溯·位运算·子集