机器学习--朴素贝叶斯算法,决策树,集成学习之随机森林
一、朴素贝叶斯分类算法
朴素贝叶斯(Naive Bayes)是一种基于贝叶斯定理的简单概率分类器,它假设特征之间相互独立。这种分类器在文本分类、垃圾邮件识别等领域非常流行,因为它易于实现,并且即使在特征数量很大的情况下也能表现良好。
1.概率基础
概率定义:概率定义为一件事情发生的可能性 P(X):取值在[0,1]


朴素贝叶斯算法:朴素+贝叶斯
应用场景:
文本分类
单词作为特征
文本分类案例:

分子:P(Chinese,Chinese,Chinese,Tokyo,Japan|C)*P(C)=
分母:P(Chinese,Chinese,Chinese,Tokyo,Japan)
2.API
sklearn.naive_bayes.MultionmialNB(alpha=1.0)
朴素贝叶斯分类
alpha:拉普拉斯平滑系数
案例:20类新闻分类
1)获取数据
2)划分数据集
3)特征工程
文本特征抽取
4)朴素贝叶斯预估器流程
5)模型评估
from sklearn.datasets import fech_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
def nb_news():
"""
用朴素贝叶斯算法对新闻进行分类
:return:
"""
# 1)获取数据
news=fetch_20newsgroups(subset="all")
# 2)划分数据集
x_train,x_test,y_train,y_test = train_test_split(news.data,news.target)
# 3)特征工程:文本特征抽取-tfidf
transfer = TfidfVectorizer()
x_train = tranfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
# 4)朴素贝叶斯算法预估器流程
estimator = MultinomialNB()
estimator.fit(x_train,y_train)
# 5)模型评估
#方法一:直接比对真实值和预测值
y_predict = estimator.predict(x_test)
print("y_predict:\n",y_predict)
print("直接比对真实值和预测值:\n",y_test == y_predict)
#方法二:计算准确率
score = estimator.score(x_test,y_test)
print("准确率为:\n",score)
return None
if __name__ == "__main__":
nb_news()
3.总结
优点:
对缺失数据不太敏感,算法也比较简单,常用于文本分类
分类准确度高,速度快
缺点:
由于使用了样本属性独立性的假设,所以如果特征属性有关联时其效果不好
二、决策树
2.1 决策树原理
信息熵,信息增益等
信息论基础
1)信息
香农:消除随机不定性的东西
小明 年龄 “我今年18岁” 是信息
小华 “小明明年19岁” (不是信息,因为我已经知道小明18岁)
2)信息的衡量 - 信息量 - 信息熵
2.2 信息熵的定义
H的专业术语称之为信息熵,单位比特。


2.3决策树API
class sklearn.free.DecisionTreeClassifier(criterion='gini',
max_depth=None,random_stste=None)
决策树分类器
criterion:默认是'gini'系数,也可以选择信息增益的熵'entropy'
max_depth:树的深度大小
random_state:随机数种子
from sklearn.tree import DecisionTreeClassifier
def decision_iris():
"""
用决策树对鸢尾花进行分类
:return;
"""
# 1)获取数据集
iris = load_iris()
# 2)划分数据集
x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target,random_state=22)
# 3)决策树的预估器
estimator = DecisionTreeClasifier(criterion="entropy")
estimator.fit(x_train,y_train)
# 4)模型评估
#方法1:直接比对真实值和预测值
y_predict = estimator.predict(x_test)
print("y_predict:\n",y_predict)
print("直接比对真实值和预测值:\n",y_test == y_predict)
#方法2:计算准确率
score = estimator.score(x_test,y_test)
print("准确率为:\n",score)
return None
if __name__ =="__main__":
knn_iris()
decision_iris()
2.4决策树可视化
1.保存树的结构到dot文件
sklearn.tree.export_graphviz()
tree.export_graphviz(estimator,out_file='tree.dot',feature_names[","])
2.5 决策树总结
优点:
简单的理解和解释,树木可视化,可解释能力强
缺点:
决策树学习者可以创建不能很好推广数据的过于复杂的树,这被称为过拟合。
改进:
减枝cart算法(决策树API当中已经实现,随意森林参数调优有相关介绍)
随机森林
注意:企业重要决策,由于决策树很好的分析能力,在决策过程中应用较多,可以选择特征
信息熵,信息增益的计算
DecisonTreeClassifier进行决策树的划分
export_graphviz导出到dot文件
三、集成学习之随机森林
3.1 集成学习方法
通过建立几个模型组合的来解决单一预测问题,它的工作原理是生成多个分类器/模型,各自独立的学习和做出预测,这些预测最后结合成组合预测,因此优于任何一个单独的分类预测。
3.2 随机森林
在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的列别是由个别树输出端类别的众数而定。
例如:如果训练了五个树,其中四个树的结果是True,一个结果是False,那么最终投票结果是True。
3.3 随机森林原理过程
训练集:
N个样本
特征值 目标值
M个特征
随机:
两个随机:
训练集随机 -N个样本有随机放回的抽样N个
bootstrap : 随机有放回抽样
[1,2,3,4,5]
新的树的训练集[2,2,3,1,5]
特征随机 -从M个特征中随机抽取m个特征
M>>m :达到降维的作用
为什么采用BootStrap抽样?
为什么要随机抽样训练集? 如果不进行随机抽样,每个树的训练集都一样,那么最终训练出的树分类结果也是完全一样的。
如果不是有放回的抽样,那么每棵树的训练样本都是不同的,都是没有交集的,这样每棵树都是“有偏的”,都是绝对“片面的”(当然这样说可能不对),也就是说每棵树训练出来都是有很大的差异的;而随机森面临最后分类取决于多棵树(弱分类器)的投票表决。
3.4 API

3.5 总结
在当前所有算法中,具有极好的准确率
能够有效地运行在大数据集上,处理具有高维特征的输入样本,而且不需要降维
能够评估各个特征在分类问题上的重要性
更多推荐
所有评论(0)