sklearn朴素贝叶斯(naive_bayes)多分类问题

模型

sklearn.naive_bayes类库的主要分类器:
GaussianNB, MultinomialNB, BernoulliNB
区别参数详解

预处理

import pandas as pd
path = "../Data/classify.csv"
rawdata = pd.read_csv(path) 
X = rawdata.iloc[:,:13]
Y = rawdata.iloc[:,14]  # {”A":0,"B":1,"C":2}
Y = pd.Categorical(Y).codes  # ABC变成123

自变量均为连续型,用GaussianNB好一些。这里还是都尝试了一遍。

建模

gaussian = naive_bayes.GaussianNB()
multi = naive_bayes.MultinomialNB()
bernoul = naive_bayes.BernoulliNB()
models = [gaussian,multi, bernoul]

训练+评价

def svc_model(model):
    model.fit(x_train, y_train)
    acu_train = model.score(x_train, y_train)
    acu_test = model.score(x_test, y_test)
    y_pred = model.predict(x_test)
    recall = recall_score(y_test, y_pred, average="macro")
    return acu_train, acu_test, recall

result = {
          "acu_train": [],
          "acu_test": [],
          "recall": []
          }
for each in models:
    acu_train, acu_test, recall = svc_model(each)
    result["acu_train"].append(acu_train)
    result["acu_test"].append(acu_test)
    result["recall"].append(recall)

结果

在这里插入图片描述
测试集上准确率有76%

进行特征选择后重新训练

自变量之间的相关性

在这里插入图片描述
选择与其他自变量相关性最强和最弱的特征

features_w = ['CHAS', 'RM', 'PTRATIO', 'B', 'LSTAT']
features_s = ['CRIM', 'RAD', 'TAX', 'AGE', 'DIS']

重新训练

def selected_bys(features):
    x2_train = x_train[features]
    x2_test = x_test[features]

    model = naive_bayes.GaussianNB()
    model.fit(x2_train, y_train)
    acu_train = model.score(x2_train, y_train)
    acu_test = model.score(x2_test, y_test)
    y_pred = model.predict(x2_test)
    recall = recall_score(y_test, y_pred, average="macro")
    return acu_train, acu_test, recall

selected_bys(features_w)
selected_bys(features_s)

结果对比

在这里插入图片描述
印证了朴素贝叶斯“朴素”的含义,即特征之间的相关性越低,越接近独立,模型效果越好。若特征之间的相关性较强,则会导致模型的分类效果下降。

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要下载sklearn.naive_bayes模块,你需要先安装scikit-learn库。你可以通过以下命令使用pip来安装scikit-learn: ``` pip install scikit-learn ``` 安装完成后,你就可以在Python中导入sklearn.naive_bayes模块了。例如,你可以使用以下代码导入MultinomialNB类: ``` from sklearn.naive_bayes import MultinomialNB ``` 这样你就可以使用MultinomialNB类来构建朴素贝叶斯分类器了。MultinomialNB类适用于处理特征是离散数据的情况,比如文本分类中的以词频为特征的情况。如果你想了解更多关于MultinomialNB类的详细信息,可以参考《小瓜讲机器学习——分类算法(三)朴素贝叶斯法(naive Bayes)算法原理及Python代码实现》中的介绍。 #### 引用[.reference_title] - *1* *3* [[数据挖掘之scikit-learn] sklean.naive_bayes实例详解](https://blog.csdn.net/u012915522/article/details/98960595)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [python_sklearn机器学习算法系列之sklearn.naive_bayes朴树贝叶斯算法](https://blog.csdn.net/weixin_42001089/article/details/79952245)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值