美文网首页
朴素贝叶斯分类器

朴素贝叶斯分类器

作者: 章佳翳_PMO | 来源:发表于2018-12-02 11:54 被阅读0次

    朴素贝叶斯分类器


    分类 vs 回归

      1. 分类模型 VS 回归模型,最根本的不同:前者是预测一个标签(类型、类别);后者则是预测一个量。
      1. 分类模型输出的预测值是离散值;而回归模型输出的预测值则是连续值。
      1. 输入一个样本给模型,回归模型给出的预测结果是在某个值域(一般是实数域或其子集)上的任意值;而分类模型则是给出特定的某几个离散值之一。
      1. 线性回归模型,是用来做回归的模型。朴素贝叶斯分类器,是用来做分类的模型。

    贝叶斯定理

    P(A|B) = \frac{P(B|A)P(A)}{P(B)}

    用语言解释就是:
    在 B 出现的前提下 A 出现的概率,
    等于 A 和 B 都出现的概率除以 B 出现的概率。
    换句话说就是后验概率和先验概率的关系。
    

    朴素贝叶斯分类器(Naïve Bayes Classifier)

    “朴素贝叶斯”(Naïve Bayes)既可以是一种算法——朴素贝叶斯算法,
    也可以是一种模型——朴素贝叶斯分类模型(分类器)。
    

    不再简单地将频率当作概率

    通过该特征在数据样本中的分布来计算该特征的条件概率。
    

    极大似然估计 (Maximum Likelihood Estimation, MLE)

    似然(Likelihood):指某种事件发生的可能,和概率相似。
    极大似然估计,就是去寻找让似然函数 L(θc,i) 的取值
    达到最大的参数值的估计方法。


    用代码实现朴素贝叶斯模型

    import pandas as pd
        import numpy as np
        import time
        from sklearn.model_selection import train_test_split
        from sklearn.naive_bayes import GaussianNB
    
        # Importing dataset. 
        # Please refer to the 【Data】 part after the code for the data file.
        data = pd.read_csv("career_data.csv") 
    
        # Convert categorical variable to numeric
        data["985_cleaned"]=np.where(data["985"]=="Yes",1,0)
        data["education_cleaned"]=np.where(data["education"]=="bachlor",1,
                                          np.where(data["education"]=="master",2,
                                                   np.where(data["education"]=="phd",3,4)
                                                  )
                                         )
        data["skill_cleaned"]=np.where(data["skill"]=="c++",1,
                                          np.where(data["skill"]=="java",2,3
                                                  )
                                         )
        data["enrolled_cleaned"]=np.where(data["enrolled"]=="Yes",1,0)
    
        # Split dataset in training and test datasets
        X_train, X_test = train_test_split(data, test_size=0.1, random_state=int(time.time()))
    
        # Instantiate the classifier
        gnb = GaussianNB()
        used_features =[
            "985_cleaned",
            "education_cleaned",
            "skill_cleaned"
        ]
    
        # Train classifier
        gnb.fit(
            X_train[used_features].values,
            X_train["enrolled_cleaned"]
        )
        y_pred = gnb.predict(X_test[used_features])
    
        # Print results
        print("Number of mislabeled points out of a total {} points : {}, performance {:05.2f}%"
              .format(
                  X_test.shape[0],
                  (X_test["enrolled_cleaned"] != y_pred).sum(),
                  100*(1-(X_test["enrolled_cleaned"] != y_pred).sum()/X_test.shape[0])
        ))
    
    

    相关文章

      网友评论

          本文标题:朴素贝叶斯分类器

          本文链接:https://www.haomeiwen.com/subject/fwkjcqtx.html