zoukankan      html  css  js  c++  java
  • 朴素贝叶斯算法python实现

    朴素贝叶斯是一种十分简单的分类算法,称其朴素是因为其思想基础的简单性,就文本分类而言,他认为词袋中的两两词之间的关系是相互独立的,即一个对象的特征向量中的每个维度都是互相独立的。这是朴素贝叶斯理论的思想基础。

    朴素贝叶斯分类的正式定义:

    1. 设x={}为一个待分类项,而每个a为x的一个特征属性
    2. 有类别集合C={}
    3. 计算P(|x),P(|x),…,P(|x)
    4. 如果P(|x)=max{ P(|x),P(|x),…,P(|x)},则x

    那么关键就是如何计算第三步中的各个条件概率,我们可以这样计算:

    1. 找到一个已知分类的待分类项集合,即训练集
    2. 统计得到在各类别下各个特征属性的条件概率估计,即:

    P(),P(),…,P()

    P(),P(),…,P()

    P(),P(),…,P()

    1. 如果各个特征属性是条件独立的(或者假设他们之间是相互独立的),根据贝叶斯定理,有如下推导:

    因为分母对于所有类别为常数,只要将分子最大化即可,又因为各特征属性是条件独立的,所以有:

    根据上述分析,朴素贝叶斯分类的流程可以表示如下:

    1. 训练数据生成样本集:TF-IDF
    2. 对每个类别计算P()
    3. 对每个特征属性计算所有划分的条件概率
    4. 对每个类别计算P(x|)P()
    5. 以P(x|)P()的最大项作为x的所属类别

    朴素贝叶斯的算法实现

    首先创建一个Nbayes_pre.py文件来编写导入的数据和朴素贝叶斯类的代码

    #高斯朴素贝耶斯
    import numpy as np
    from sklearn.model_selection import train_test_split
    import pandas as pd
    from sklearn.naive_bayes import GaussianNB
    from sklearn.naive_bayes import BernoulliNB #伯努利分布
    from sklearn.naive_bayes import MultinomialNB
    from sklearn.neighbors import KNeighborsClassifier
    '''''

    clf = GaussianNB().fit(X, Y)
    clf_pf = GaussianNB().partial_fit(X, Y, np.unique(Y))
    ##伯努利分布
    clf = BernoulliNB()
    clf.fit(train_data, train_target)
    BernoulliNB(alpha=1.0, binarize=0.0, class_prior=None, fit_prior=True)

    #多项式分布
    from sklearn.naive_bayes import MultinomialNB
    clf = MultinomialNB().fit(x_train, y_train)
    '''
    def getdatafromcsv():
    data=pd.read_csv('iris .csv')
    cols=['Sepal.Length','Sepal.Width','Petal.Length','Petal.Width']
    train_target=data['Species']
    train_data=data[cols]
    return train_data,train_target
    """
    #第一个为身高,第二个值为体重(kg),第三个为性别,1为男,2为女
    x_train = [[160, 60, 1], [155, 80, 1], [178, 53, 2], [158, 53, 2], [166, 45, 2], [170, 50, 2], [156, 56, 2],
    [166, 50, 1], [175, 55, 1], [188, 68, 1], [159, 41, 2], [166, 70, 1], [175, 85, 1], [188, 98, 1],
    [159, 61, 2]]
    #1为胖,0为瘦

    y_train = [1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1]
    x_test = [[166, 45, 2], [172, 52, 1], [156, 60, 1], [150, 70, 2],[166,60,1]]
    """
    train_data,train_target=getdatafromcsv()
    x_train,x_test,y_train,y_test=train_test_split(train_data,train_target,test_size=0.1)


    def predcitbyts(train_data,train_target,test_data):
    clf = GaussianNB().fit(train_data,train_target)
    predict=clf.predict(test_data)
    print("高斯贝耶斯结果:",predict)
    clf_pf = GaussianNB().partial_fit(train_data, train_target, np.unique(train_target))
    predict1=clf_pf.predict(test_data)
    print("高斯贝耶斯结果partial_fit:",predict1)

    def predictknn(train_data,train_target,test_data):
    knn = KNeighborsClassifier()
    knn.fit(train_data, train_target)
    iris_y_predict = knn.predict(test_data)
    print("KNN结果:",iris_y_predict)

    def Bernoulli(train_data,train_target,test_data):
    clf = BernoulliNB()
    clf.fit(train_data, train_target)
    BernoulliNB(alpha=1.0, binarize=0.0, class_prior=None, fit_prior=True)
    predict=clf.predict(test_data)
    print(predict)

    #多项式
    def Multinomial(train_data,train_target,test_data):
    clf = MultinomialNB().fit(x_train, y_train)
    predict=clf.predict(test_data)
    print(predict)

    Multinomial(x_train,y_train,x_test)
    print(y_test)

  • 相关阅读:
    调试技术能够让新技术的学习事半功倍
    世界500强绩效考核(KPI) [11]
    .NET 4.0新功能介绍:In Process Side By Side
    What's New in the .NET Framework Version 4
    Production Debugging for .NET Framework Applications
    Project 2007下的自动计算问题
    SQL操作全集
    WPF1.1 理解Windows图形
    .NET Framework Version 4 Application Compatibility Walkthrough
    Fixing BizTalk ENTSSO Failure on Windows 7, Vista or Server 2008 after .NET 4.0 Installation
  • 原文地址:https://www.cnblogs.com/ws0751/p/8305021.html
Copyright © 2011-2022 走看看