前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习篇(三)

机器学习篇(三)

作者头像
不断折腾
发布2019-09-23 11:17:45
4260
发布2019-09-23 11:17:45
举报
k-近邻算法(KNN)

注:本篇文章没有具体的实例,后面会有的。

简单描述:在预测目标值的时候选择和自己相似的目标值。比如,有五个人分在在武汉的五个区域,小明不知道自己在什么区域,他计算自己和其他4个人的距离,谁离自己最近,他在什么区,小明就在什么区。

k-近邻算法计算公式:欧式距离公式

计算步骤:

1、算距离:给定测试对象,计算它与训练集中的每个对象的距离

2、找邻居:圈定距离最近的k个训练对象,作为测试对象的近邻

3、做分类:根据这k个近邻归属的主要类别,来对测试对象分类

为防止某个值对结果的影响较大需要将数据进行标准化处理。

KNN模块介绍:

sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm='auto')

n_neighbors:选择相似的5组数据,按照比例分类。

algorithm:指定找出相似的数据的算法,比如有ball_tree和kd_tree,而auto则是根据传递的数据选择合适的算法。

当数据集较大的时候需要处理:

1、缩小数据集范围

2、如果有日期类型需要处理日期

3、删除不需要的特征

4、数据处理完需要标准化处理

5、使用算法进行预测

常见问题:

k值取多少?也就是参数n_neighbors的大小

k值取的小:容易受到异常值的影响。

k值取的大:容易送到k值数据类别多而波动。

性能:

懒惰算法,对测试样本分类时的计算量大,内存开销大,评分慢

可解释性较差。

优点:

简单,易于理解,易于实现,无需估计参数,无需训练

一般使用场景:小数据样本,几千-几万的数据。

朴素贝叶斯算法

k-近邻算法是和那个相似就是那个类别,而朴素贝叶斯算法会计算出属于某个类别的概率。

使用朴素贝叶斯算法的前提条件:特征独立。在计算概率的时候要求两个事件是独立的,这里也一样。

计算公式:

模块介绍:

sklearn.naive_bayes.MultinomialNB(alpha=1.0)

alpha:拉普拉斯平滑系数

拉普拉斯平滑系数是为了防止计算出概率为0的情况。

步骤:

1、对数据进行前期处理(切割等)

2、生成特征词:TfidfVectorizer(比如科技类文章,云计算出现的次数)

3、利用朴素贝叶斯算法进行计算

优点:

1、稳定的分类效率

2、对缺失护具不敏感,常用文本分类

3、分类准确率高,速度快

缺点:

特征之间需要独立,不能相互影响。

精确率和召回率

在上述文章中我们判断预测是否准确用准确率。也就是预测的正确结果占全部的百分比。

召回率:简单来说就是预算正确的占用实际正确的百分比,在有些领域是需要看召回率的。比如:

50个人中有有20个人是癌症,用算法识别出来有18个人是癌症,但是有3个人识别错了,这个召回率就是

15/20。在有些领域需要提高召回率,宁可识别出30个人是癌症,实际得癌症的人全在里面。

精确率:计算计算对的值占得百分比。一般不使用。

评估模型模块:

sklearn.metrics.classification_report(y_true,y_pred,target_names=None)

y_true:真实目标值

y_pred:预测目标值

target_names:目标类别名称

返回类别的精确率(precision)和召回率(recall)。

KNN算法调优

交叉验证

以前是将数据分为训练集和测试集,交叉验证:

1、把训练集分为n等分。n是自己设定。把其中第一份拿出来当做验证集。来计算得出一个准确率。

2、把第2份当做验证集,其他当做训练集得出一个准确率。

3、同上。第三份,第四份等等。

4、求出平均准确率

k-近邻算法中的n_neighbors参数该给多少?

超参数搜索(网格搜索):

n_neighbors这种需要手动指定的叫做超参数,所以需要设定比如1,3,5等

都采用交叉验证来进行评估,最后选出最优参数来建立模型。

超参数搜索(网格搜索)使用:

sklearn.model_selection.GridSearchCV(estimator,param_grid=None,cv=None)

estimator:估计器对象,也就是算法。

param_grid:参数(字段形式),{'n_neighbors':[1,3,5]}

cv:指定多少次交叉验证,一般使用10.

分析结果:

best_score_:最好的结果

best_estimator_:最好的参数模型

cv_results_:每次交叉验证后的准确率

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python入门到放弃 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档