一、朴素贝叶斯分类算法

朴素贝叶斯(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 总结


在当前所有算法中,具有极好的准确率

能够有效地运行在大数据集上,处理具有高维特征的输入样本,而且不需要降维

能够评估各个特征在分类问题上的重要性
 

更多推荐