机器学习基础DAY6

1387-常同学

发表文章数:44

首页 » 算法 » 正文

第六章 朴素贝叶斯算法

######朴素贝叶斯API:sklearn.naive_bayes.MultinomialNB
####sklearn.naive_bayes.MultinomialNB(alpha = 1.0)
朴素贝叶斯分类
alpha:拉普拉斯平滑系数
优点:
不需要调参
朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。
对缺失数据不太敏感,算法也比较简单,常用于文本分类。
分类准确度高,速度快
缺点:
需要知道先验概率P(F1,F2,…|C),因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。

分类模型的评估:

一般最常见使用的是准确率,即预测结果正确的百分比
####estimator.score()
在分类任务下,预测结果(Predicted Condition)与正确标记(True Condition)之间存在四种不同的组合,构成混淆矩阵(适用于多分类)
机器学习基础DAY6
其他分类标准,F1-score,反映了模型的稳健性
机器学习基础DAY6
######分类模型评估API:sklearn.metrics.classification_report
####sklearn.metrics.classification_report(y_true, y_pred, target_names=None)
y_true:真实目标值

y_pred:估计器预测目标值

target_names:目标类别名称

return:每个类别精确率与召回率

模型选择与调优

1、交叉验证:为了让被评估的模型更加准确可信
比如4折交叉验证:
机器学习基础DAY6
2.网格搜索:调参数
通常情况下,有很多参数是需要手动指定的(如k-近邻算法中的K值),这种叫超参数。但是手动过程繁杂,所以需要对模型预设几种超参数组合。每组超参数都采用交叉验证来进行评估。最后选出最优参数组合建立模型。
######API:sklearn.model_selection.GridSearchCV
####sklearn.model_selection.GridSearchCV(estimator, param_grid=None,cv=None)
对估计器的指定参数值进行详尽搜索
estimator:估计器对象
param_grid:估计器参数(dict){“n_neighbors”:[1,3,5]}
cv:指定几折交叉验证
fit:输入训练数据
score:准确率
结果分析:
best_score_:在交叉验证中测试的最好结果
best_estimator_:最好的参数模型
cv_results_:每次交叉验证后的测试集准确率结果和训练集准确率结果
作业:将前面的k-近邻算法案例改成网格搜索

def knncls():
    """
    作业:K-近邻预测鸢尾花类别,使用网格搜索
    :return:None
    """
    # 读取数据
    li = load_iris()

    x_train, x_test, y_train, y_test = train_test_split(li.data, li.target, test_size=0.25)

    # 特征工程(标准化)
    std = StandardScaler()

    # 对测试集和训练集的特征值进行标准化
    x_train = std.fit_transform(x_train)

    x_test = std.transform(x_test)

    # 进行算法流程 # 超参数
    knn = KNeighborsClassifier()

     # 构造一些参数的值进行搜索
    param = {"n_neighbors": [3, 5, 10]}

    # 进行网格搜索
    gc = GridSearchCV(knn, param_grid=param, cv=2)

    gc.fit(x_train, y_train)

    # 预测准确率
    print("在测试集上准确率:", gc.score(x_test, y_test))

    print("在交叉验证当中最好的结果:", gc.best_score_)

    print("选择最好的模型是:", gc.best_estimator_)

    print("每个超参数每次交叉验证的结果:", gc.cv_results_)

    return None
if __name__ == "__main__":
    knncls()

结果:

在测试集上准确率: 0.8947368421052632
在交叉验证当中最好的结果: 0.9821428571428571
选择最好的模型是: KNeighborsClassifier(n_neighbors=3)
每个超参数每次交叉验证的结果: {'mean_fit_time': array([0.0009104 , 0.        , 0.00049841]), 'std_fit_time': array([8.71419907e-05, 0.00000000e+00, 4.98414040e-04]), 'mean_score_time': array([0.00160289, 0.00199497, 0.00199473]), 'std_score_time': array([6.05344772e-04, 1.19209290e-07, 1.19209290e-07]), 'param_n_neighbors': masked_array(data=[3, 5, 10],
             mask=[False, False, False],
       fill_value='?',
            dtype=object), 'params': [{'n_neighbors': 3}, {'n_neighbors': 5}, {'n_neighbors': 10}], 'split0_test_score': array([0.98214286, 0.98214286, 0.96428571]), 'split1_test_score': array([0.98214286, 0.98214286, 0.94642857]), 'mean_test_score': array([0.98214286, 0.98214286, 0.95535714]), 'std_test_score': array([0.        , 0.        , 0.00892857]), 'rank_test_score': array([1, 1, 3])}

进程已结束,退出代码0

未经允许不得转载:作者:1387-常同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《机器学习基础DAY6》 发布于2020-12-10

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录