机器学习基础04
目录
1.朴素贝叶斯-分类
1.1贝叶斯分类理论
选择较高概率对应的类别,为其样本的类别。
1.2条件概率
条件概率(Conditional probability),就是指在事件B发生的情况下,事件A发生的概率,用P(A|B)来表示。
由 𝑃(𝐴|𝐵)=𝑃(𝐴∩𝐵)/𝑃(𝐵),
得 𝑃(𝐴∩𝐵)=𝑃(𝐴|𝐵)𝑃(𝐵)
同理可得,
𝑃(𝐴∩𝐵)=𝑃(𝐵|𝐴)𝑃(𝐴)
即,条件概率的计算公式:
𝑃(𝐴|𝐵)=𝑃(B|A)𝑃(𝐴)/𝑃(𝐵)
1.3全概率公式
由 𝑃(𝐵)=𝑃(𝐵∩𝐴)+𝑃(𝐵∩𝐴′)
和 𝑃(𝐵∩𝐴)=𝑃(𝐵|𝐴)𝑃(𝐴)
所以,全概率公式:
𝑃(𝐵)=𝑃(𝐵|𝐴)𝑃(𝐴)+𝑃(𝐵|𝐴′)𝑃(𝐴′)
1.4贝叶斯推断
对条件概率公式进行变形:
P(A)称为"先验概率"(Prior probability),即在B事件发生之前,我们对A事件概率的一个判断。
P(A|B)称为"后验概率"(Posterior probability),即在B事件发生之后,我们对A事件概率的重新评估。
P(B|A)/P(B)称为"可能性函数"(Likelyhood),这是一个调整因子,使得预估概率更接近真实概率。
理解: 后验概率 = 先验概率x调整因子
1.5朴素贝叶斯推断
朴素贝叶斯对条件概率分布做了条件独立性的假设。
p(a|X) = p(X|a)* p(a)/p(X)
p(X|a) = p(x1,x2,x3...xn|a) = p(x1|a)*p(x2|a)*p(x3|a)...p(xn|a)
p(X) = p(x1,x2,x3...xn) = p(x1)*p(x2)*p(x3)...p(xn)
p(a|X) = p(x1|a)*p(x2|a)*p(x3|a)...p(xn|a) * p(a) / p(x1)*p(x2)*p(x3)...p(xn)
1.6拉普拉斯平滑系数
某些事件或特征可能从未出现过,这会导致其的概率被估计为零。然而,在实际应用中,即使某个事件或特征没有出现在训练集中,也不能完全排除它在未来样本中出现的可能性。拉普拉斯平滑技术可以避免这种“零概率陷阱”。
一般α取值1,m的值为总特征数量
通过这种方法,即使某个特征在训练集中从未出现过,其概率也不会被估计为零,而是会被赋予一个很小但非零的值,从而避免了模型在面对新数据时可能出现的过拟合或预测错误。
1.7API
sklearn.naive_bayes.MultinomialNB()
estimator.fit(x_train, y_train)
y_predict = estimator.predict(x_test)score= estimator.score(x_test)
from sklearn.datasets import load_digits
from sklearn.model_selection import StratifiedKFold
from sklearn.naive_bayes import MultinomialNB
data =load_digits()
x,y =data.data,data.target
# 贝叶斯算法预估器
estimator = MultinomialNB()
fold = StratifiedKFold(n_splits=5,shuffle=True,random_state =10)
indexs = fold.split(x,y)
for train_index, test_index in indexs:
x_train,x_test = x[train_index],x[test_index]
y_train,y_test = y[train_index],y[test_index]
# 模型训练
estimator.fit(x_train,y_train)
# 模型测试
y_predict=estimator.predict(x_test)
# print(y_predict)
# 模型评估
score = estimator.score(x_test,y_test)
print(score)
2.决策树-分类
2.1决策树
- 决策节点
通过条件判断而进行分支选择的节点。
- 叶子节点
没有子节点的节点,表示最终的决策结果。
- 决策树的深度
所有节点的最大层次数。
- 决策树优点
可视化 - 可解释能力-对算力要求低
- 决策树缺点
容易产生过拟合,不能把深度调整得太大了。
2.2基于信息增益的决策树建立
信息增益决策树倾向于选择取值较多的属性,在有些情况下这类属性可能不会提供太多有价值的信息,算法只能对描述属性为离散型属性的数据集构造决策树。
2.2.1信息熵
信息熵描述的是不确定性。信息熵越大,不确定性越大。信息熵的值越小,则纯度越高。
假设样本集合D共有N类,第k类样本所占比例为,则D的信息熵为
2.2.2信息增益
信息增益是一个统计量,用来描述一个属性区分数据样本的能力。信息增益越大,那么决策树就会越简洁。这里信息增益的程度用信息熵的变化程度来衡量, 信息增益公式:
2.2.3信息增益决策树建立步骤
第一步:计算各属性的信息熵。
第二步:计算属性的信息增益。
第三步:划分属性,信息增益较高者,作为划分节点。
第四步:在分支情况下,计算剩余属性的信息熵。重复第二,三步。
2.3基于基尼指数决策树的建立
2.3.1基尼指数
基尼指数(Gini Index)是决策树算法中用于评估数据集纯度的一种度量,基尼指数衡量的是数据集的不纯度,或者说分类的不确定性。在构建决策树时,基尼指数被用来决定如何对数据集进行最优划分,以减少不纯度。
2.3.2基尼指数的计算
对于一个二分类问题,如果一个节点包含的样本属于正类的概率是 (p),则属于负类的概率是 (1-p)。那么,这个节点的基尼指数 (Gini(p)) 定义为:
2.3.3基尼指数的意义
-
当一个节点的所有样本都属于同一类别时,基尼指数为 0,表示纯度最高。
-
当一个节点的样本均匀分布在所有类别时,基尼指数最大,表示纯度最低。
2.3.4决策树中的应用
在构建决策树时,我们希望每个内部节点的子节点能更纯,即基尼指数更小。因此,选择分割特征和分割点的目标是使子节点的平均基尼指数最小化。具体来说,对于一个特征,我们计算其所有可能的分割点对应的子节点的加权平均基尼指数,然后选择最小化这个值的分割点。这个过程会在所有特征中重复,直到找到最佳的分割特征和分割点。
2.4API
class sklearn.tree.DecisionTreeClassifier(criterion)
参数:
- criterion :
默认为="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.datasets import load_iris
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import GridSearchCV,train_test_split,StratifiedKFold
from sklearn.tree import DecisionTreeClassifier,export_graphviz
# 加载数据
dataset = load_iris()
x,y = dataset.data,dataset.target
# 数据划分
x_train,x_test,y_train,y_test = train_test_split(x,y,train_size=0.7,shuffle=True,random_state=4)
fold=StratifiedKFold
# 数据标准化
transfer = StandardScaler()
s_x_train = transfer.fit_transform(x_train)
s_x_test = transfer.transform(x_test)
# 决策树预估器
estimator = DecisionTreeClassifier(criterion='entropy',max_depth=3)
estimator.fit(s_x_train,y_train)
# 模型训练,超参数搜索
param_grid = {
'max_depth': [1,2,3],
'min_samples_split': [2, 5, 10],
'min_samples_leaf': [1, 2, 4]
}
grid_search = GridSearchCV(estimator,param_grid =param_grid)
grid_search.fit(s_x_train,y_train)
# 模型评估
score = grid_search.best_score_
print(score)
n = grid_search.best_params_
print(n)
# 可视化决策树
export_graphviz(estimator,out_file='iris_tree.dot',feature_names=['萼片长度','萼片宽度','花瓣长度','花瓣宽度'])
原文地址:https://blog.csdn.net/adc_abc123/article/details/143763956
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!