【MachineLearning】之 朴素贝叶斯(实战)

文章目录

      • 一、数据集介绍及预处理
      • 二、数据集划分
      • 三、建立分类预测模型
      • 四、分类准确率计算


一、数据集介绍及预处理


本次应用到的数据集为企业运营评估数据集 course-10-company.csv,总共有 250 条数据,每条数据包括 6 个特征值,分别为:

  • industrial_risk: 产业风险
  • management_risk: 管理风险
  • finacial_flexibility: 资金灵活性
  • credibility: 信用度
  • competitiveness: 竞争力
  • operating_risk: 操作风险

其中,每条特征值包括 3 个等级,分别为:

  • Positive: 好
  • Average: 中
  • Negative: 坏

3 个等级分别用 P, A, N 代替。

通过这些特征对该企业是否会破产进行分类预测,其中:

  • NB: 表示不会破产
  • B: 表示会破产


二、数据集划分


加载好数据集之后,为了实现朴素贝叶斯算法,同样我们需要将数据集分为 训练集测试集,依照经验:训练集占比为 70%,测试集占 30%。

同样在此我们使用 scikit-learn 模块的 train_test_split 函数完成数据集切分。

from sklearn.model_selection import train_test_split

x_train,x_test, y_train, y_test =train_test_split(train_data,train_target,test_size=0.4, random_state=0)

其中:

  • x_train,x_test, y_train, y_test 分别表示,切分后的特征的训练集,特征的测试集,标签的训练集,标签的测试集;其中特征和标签的值是一一对应的。
  • train_data,train_target分别表示为待划分的特征集和待划分的标签集。
  • test_size:测试样本所占比例。
  • random_state:随机数种子,在需要重复实验时,保证在随机数种子一样时能得到一组一样的随机数。
# 导入数据集
# !wget -nc http://labfile.oss.aliyuncs.com/courses/1081/course-10-company.csv

import pandas as pd

enterprise_data = pd.read_csv('course-10-company.csv')
enterprise_data.head()
enterprise_data = enterprise_data.replace(
    {"P": 1, "A": 2, "N": 3, "NB": 0, "B": 1})  # 对元素值进行替换
enterprise_data
"""数据集划分
"""
from sklearn.model_selection import train_test_split

# 得到企业运营评估数据集中 feature 的全部序列: industrial_risk, management_risk 等特征
feature_data = enterprise_data.iloc[:, :-1]
label_data = enterprise_data["label"]  # 得到企业运营评估数据集中 label 的序列
x_train, x_test, y_train, y_test = train_test_split(
    feature_data, label_data, test_size=0.3, random_state=4)

x_test  # 输出企业运营评估数据测试集查看


三、建立分类预测模型


数据集表现出离散型的特征。所以,根据上文中提到的模型选择经验,这里选用多项式模型。在前面的实验中我们采用 python 对朴素贝叶斯算法进行实现,下面我们通过 scikit-learn 来对其进行实现。

scikit-learn 朴素贝叶斯类及参数如下:

MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)

其中:

  • alpha 表示平滑参数,如拉普拉斯平滑则 alpha=1
  • fit_prior 表示是否使用先验概率,默认为 True
  • class_prior 表示类的先验概率。

常用方法:

  • fit(x,y)选择合适的贝叶斯分类器。
  • predict(X) 对数据集进行预测返回预测结果。
"""利用 scikit-learn 构建多项式朴素贝叶斯分类器
"""
from sklearn.naive_bayes import MultinomialNB


def sk_classfy(x_train, y_train, x_test):
    sk_clf = MultinomialNB(alpha=1.0, fit_prior=True)  # 定义多项式模型分类器
    sk_clf.fit(x_train, y_train)  # 进行模型训练
    return sk_clf.predict(x_test)


y_predict = sk_classfy(x_train, y_train, x_test)
y_predict


四、分类准确率计算


当我们训练好模型并进行分类预测之后,可以通过比对预测结果和真实结果得到预测的准确率。

(11) a c c u r = ∑ i = 1 N I ( y i ˉ = y i ) N accur=\frac{\sum_{i=1}^{N}I(\bar{y_{i}}=y_{i})}{N}\tag{11} accur=Ni=1NI(yiˉ=yi)(11)

公式(11)中 N N N 表示数据总条数, y i ˉ \bar{y_{i}} yiˉ 表示第 i i i 条数据的种类预测值, y i y_{i} yi 表示第 i i i 条数据的种类真实值, I I I 同样是指示函数,表示 y i ˉ \bar{y_{i}} yiˉ y i y_{i} yi 相同的个数。

"""准确率计算
"""

def get_accuracy(test_labels, pred_labels):
    correct = np.sum(test_labels == pred_labels)  # 计算预测正确的数据个数
    n = len(test_labels)  # 总测试集数据个数
    accur = correct/n
    return accur


get_accuracy(y_test, y_predict)

你可能感兴趣的:(【MachineLearning】之 朴素贝叶斯(实战))