朴素贝叶斯分类器
2018-12-02 本文已影响0人
章佳翳_PMO
朴素贝叶斯分类器
分类 vs 回归
-
- 分类模型 VS 回归模型,最根本的不同:前者是预测一个标签(类型、类别);后者则是预测一个量。
-
- 分类模型输出的预测值是离散值;而回归模型输出的预测值则是连续值。
-
- 输入一个样本给模型,回归模型给出的预测结果是在某个值域(一般是实数域或其子集)上的任意值;而分类模型则是给出特定的某几个离散值之一。
-
- 线性回归模型,是用来做回归的模型。朴素贝叶斯分类器,是用来做分类的模型。
贝叶斯定理
用语言解释就是:
在 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])
))