机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)

1043-李同学

发表文章数:31

热门标签

首页 » 算法 » 正文

一.K近邻算法

1.1 举例:机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)
输出结果:
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)
最终结果表明,未知电影属于爱情片,因为他与爱情片的距离最近。

1.2 分类算法-k近邻算法(KNN)介绍
定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

计算距离公式:两个样本的距离可以通过如下公式计算,又叫欧式距离
比如说,a(a1,a2,a3),b(b1,b2,b3)
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)

1.3 sklearn k-近邻算法API
sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm=‘auto’)
· n_neighbors:int,可选(默认= 5),k_neighbors查询默认使用的邻居数
·algorithm:{‘auto’,‘ball_tree’,‘kd_tree’,‘brute’},可选用于计算最近邻居的算法:‘ball_tree’将会使用 BallTree,‘kd_tree’将使用 KDTree。‘auto’将尝试根据传递给fit方法的值来决定最合适的算法。 (不同实现方式影响效率)

1.4 实例分析:
k近邻算法实例-预测入住位置
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)
数据的处理
1、缩小数据集范围
DataFrame.query()
2、处理日期数据
pd.to_datetime
pd.DatetimeIndex
3、增加分割的日期数据
data[ ]
4、删除没用的日期数据
pd.drop
5、将签到位置少于n个用户的删除
place_count =data.groupby(‘place_id’).aggregate(np.count_nonzero)tf = place_count[place_count.row_id > 3].reset_index()
data = data[data[‘place_id’].isin(tf.place_id)]

程序:

机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)
此程序为没有进行特征化(标准化)处理时,进行KNN算法。输出结果为:
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)
可以看出,在没有标准化的情况下,预测的准确率较低。

接下来是将数据进行特征处理后,观察特征值:
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)
最后的输出结果:
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)
可以看到,准确率大幅度提升。

1.5 k-近邻算法总结
k值取多大?
k值取很小:容易受异常点影响
k值取很大:容易受最近数据太多导致比例变化

优点: 简单,易于理解,易于实现,无需估计参数,无需训练。
缺点: 1.懒惰算法,对测试样本分类时的计算量大,内存开销大
2.必须指定K值,K值选择不当则分类精度不能保证

使用场景: 小数据场景,几千~几万样本,具体场景具体业务去测试

二.分类算法-朴素贝叶斯算法

一.应用:
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)
二.联合概率和条件概率
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)
P(文档类别1|文档特征值)

P(文档类别2|文档特征值)



三.朴素贝叶斯-贝叶斯公式
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)
公式分为三个部分:
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)

例如:

训练集统计结果(指定统计词频):
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)
现有一篇被预测文档:出现了影院,支付宝,云计算,计算属于科技、娱乐的
类别概率?
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)
属于某个类别为0,合适吗?
拉普拉斯平滑:
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)
三.代码实现
3.1sklearn朴素贝叶斯实现API
sklearn.naive_bayes.MultinomialNB
sklearn.naive_bayes.MultinomialNB(alpha = 1.0)
朴素贝叶斯分类
alpha:拉普拉斯平滑系数

3.2 算法案例:
sklearn20类新闻分类
20个新闻组数据集包含20个主题的18000个新闻组帖子
流程:
1、加载20类新闻数据,并进行分割

2、生成文章特征词

3、朴素贝叶斯estimator流程进行预估
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)
3.3 算法评价
优点:
朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。

对缺失数据不太敏感,算法也比较简单,常用于文本分类。

分类准确度高,速度快

缺点:
需要知道先验概率P(F1,F2,…|C),因此在某些时候会由于假设的先验
模型的原因导致预测效果不佳。

三.交叉验证与网格搜索

3.1定义:
交叉验证: 将拿到的数据,分为训练和验证集。以下图为例:将数据分成5份,其中一份作为验证集。然后经过5次(组)的测试,每次都更换不同的验证集。即得到5组模型的结果,取平均值作为最终结果。又称5折交叉验证。
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)
超参数搜索-网格搜索: 通常情况下,有很多参数是需要手动指定的(如k-近邻算法中的K值),这种叫超参数。但是手动过程繁杂,所以需要对模型预设几种超参数组合。每组超参数都采用交叉验证来进行评估。最后选出最优参数组合建立模型。
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)
3.2 网格搜索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_:每次交叉验证后的测试集准确率结果和训练集准确率结果

3.3 程序
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)
输出结果:
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)

四.分类模型的评估

一般最常见使用的是准确率,即预测结果正确的百分比:estimator.score()

4.1 混淆矩阵
在分类任务下,预测结果(Predicted Condition)与正确标记(True Condition)之间存在四种不同的组合,构成混淆矩阵(适用于多分类)
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)

为什么需要这些指标?

精确率(Precision)与召回率(Recall)
精确率: 预测结果为正例样本中真实为正例的比例(查得准)
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)
召回率: 真实为正例的样本中预测结果为正例的比例(查的全,对正样本的区分能力)
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)
其他分类标准,F1-score,反映了模型的稳健型
机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)
3.2 分类模型评估API
sklearn.metrics.classification_report
klearn.metrics.classification_report(y_true, y_pred, target_names=None)

y_true:真实目标值

y_pred:估计器预测目标值

target_names:目标类别名称

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

未经允许不得转载:作者:1043-李同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《机器学习算法基础第三天(K近邻算法、朴素贝叶斯算法)》 发布于2020-10-12

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

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

支付宝扫一扫打赏

微信扫一扫打赏

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

登录

忘记密码 ?

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

Q Q 登 录
微 博 登 录