分类算法之K近邻和朴素贝叶斯

  • K近邻
    • 一个例子弄懂k-近邻
    • sklearn k-近邻算法API
  • 朴素贝叶斯
    • 概率论基础
    • 贝叶斯公式
    • 拉普拉斯平滑
    • sklearn朴素贝叶斯实现API

K近邻

一个例子弄懂k-近邻

电影可以按照题材分类,每个题材又是如何定义的呢?那么假如两种类型的电影,动作片和爱情片。动作片有哪些公共的特征?那么爱情片又存在哪些明显的差别呢?我们发现动作片中打斗镜头的次数较多,而爱情片中接吻镜头相对更多。当然动作片中也有一些接吻镜头,爱情片中也会有一些打斗镜头。所以不能单纯通过是否存在打斗镜头或者接吻镜头来判断影片的类别。那么现在我们有6部影片已经明确了类别,也有打斗镜头和接吻镜头的次数,还有一部电影类型未知。

那么我们使用K-近邻算法来分类爱情片和动作片:存在一个样本数据集合,也叫训练样本集,样本个数M个,知道每一个数据特征与类别对应关系,然后存在未知类型数据集合1个,那么我们要选择一个测试样本数据中与训练样本中M个的距离,排序过后选出最近的K个,这个取值一般不大于20个。选择K个最相近数据中次数最多的分类。那么我们根据这个原则去判断未知电影的分类

我们假设K为3,那么排名前三个电影的类型都是爱情片,所以我们判定这个未知电影也是一个爱情片。那么计算距离是怎样计算的呢?
欧氏距离 如果说输入变量有四个特征,例如(1,3,5,2)和(7,6,9,4)之间的距离计算为:

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方法的值来决定最合适的算法。 (不同实现方式影响效率)
    实例代码如下:
def knncls():"""K-近邻预测用户签到位置:return:"""data = pd.read_csv("D:/钉钉下载/facebook-v-predicting-check-ins/train.csv/train.csv")# print(data.head(10))data = data.query("x > 1.0 & x < 1.25 & y > 2.5 & y < 2.75")time_value = pd.to_datetime(data['time'], unit='s')# print(time_value)time_value = pd.DatetimeIndex(time_value)# print(time_value)data['day'] = time_value.daydata['hour'] = time_value.hourdata['weekday'] = time_value.weekdaydata = data.drop(['time'], axis=1)# print(data)place_count = data.groupby('place_id').count()# print(place_count)tf = place_count[place_count.row_id > 3].reset_index()data = data[data['place_id'].isin(tf.place_id)]y = data['place_id']x = data.drop(['place_id'], axis=1)x_train, x_test, y_train, y_test =train_test_split(x, y, test_size=0.25)std = StandardScaler()x_train = std.fit_transform(x_train)x_test = std.transform(x_test)knn = KNeighborsClassifier()knn.fit(x_train, y_train)y_predict = knn.predict(x_test)print("预测的目标签到位置为:", y_predict)print("预测的准确率:", knn.score(x_test, y_test))

k-近邻算法优缺点
优点:
简单,易于理解,易于实现,无需估计参数,无需训练
缺点:
懒惰算法,对测试样本分类时的计算量大,内存开销大必须指定K值,K值选择不当则分类精度不能保证
使用场景:小数据场景,几千~几万样本,具体场景具体业务去测试

朴素贝叶斯

朴素贝叶斯(Naive Bayes)是一个非常简单,但是实用性很强的分类模型。朴素贝叶斯分类器的构造基础是贝叶斯理论。

概率论基础

概率定义为一件事情发生的可能性。事情发生的概率可以 通过观测数据中的事件发生次数来计算,事件发生的概率等于改事件发生次数除以所有事件发生的总次数。举一些例子:

  • 扔出一个硬币,结果头像朝上
  • 某天是晴天
  • 某个单词在未知文档中出现

联合概率:包含多个条件,且所有条件同时成立的概率
记作:

分类算法之K近邻和朴素贝叶斯相关推荐

  1. sklearn分类算法(逻辑回归、朴素贝叶斯、K近邻、支持向量机 、决策树、随机森林 )的使用

    scikit-learn机器学习的分类算法包括逻辑回归.朴素贝叶斯.KNN.支持向量机.决策树和随机森林等.这些模块的调用形式基本一致,训练用fit方法,预测用predict方法.用joblib.du ...

  2. 机器学习(五)常用分类模型(K最近邻、朴素贝叶斯、决策树)和分类评价指标

    机器学习(五)常用分类模型(K最近邻.朴素贝叶斯.决策树)和分类评价指标 文章目录 机器学习(五)常用分类模型(K最近邻.朴素贝叶斯.决策树)和分类评价指标 综述 常用分类模型 K最近邻模型 朴素贝叶 ...

  3. 机器学习——分类算法之K近邻+朴素贝叶斯,模型选择与调优

    目录 K-近邻算法 定义 如何求距离? 数据预处理--标准化 sklearn k-近邻算法API 案例--预测入住位置 分类问题 数据处理 k近邻算法相关问题 k值取多大?有什么影响? 优缺点 应用场 ...

  4. [CS229学习笔记] 5.判别学习算法与生成学习算法,高斯判别分析,朴素贝叶斯,垃圾邮件分类,拉普拉斯平滑

    本文对应的是吴恩达老师的CS229机器学习的第五课.这节课介绍了判别学习算法和生成学习算法,并给出了生成学习算法的一个实例:利用朴素贝叶斯进行垃圾邮件分类. 判别学习(Discriminative L ...

  5. 机器学习:sklearn实现k邻近、朴素贝叶斯

    1.认识机器学习 2.scikit-learn库介绍 3.算法介绍 4.sklearn数据集介绍 5.K近邻算法原理 6.使用sklearn实现K近邻 7.K近邻预测约会是否受欢迎 8.标准化原理和代 ...

  6. c语言程序朴素贝叶斯分类器,生成式学习算法(四)之----朴素贝叶斯分类器

    朴素贝叶斯分类器(算法)与朴素贝叶斯假设 在高斯判别分析模型(GDA)中,特征向量$ x$ 是连续实值向量.现在我们来讨论分量$ x_j$ 取离散值的贝叶斯朴素贝叶斯模型. 在文本分类问题中,有一个问 ...

  7. 机器学习算法系列(六)-- 朴素贝叶斯

    机器学习算法系列之 – 朴素贝叶斯 朴素贝叶斯法是基于概率统计,特征条件独立假设的分类方法,是一种非常常用的机器学习算法:通常用于处理文本分类和情感分析等自然语言处理任务中.相对于其他复杂的模型,朴素 ...

  8. 垃圾邮件分类快速理解机器学习中的朴素贝叶斯(Naive Bayes)

    贝叶斯方法是一个历史悠久,有着坚实的理论基础的方法,同时处理很多问题时直接而又高效,很多高级自然语言处理模型也可以从它演化而来.因此,学习贝叶斯方法,是研究自然语言处理问题的一个非常好的切入口. 其实 ...

  9. 新闻分类任务(LDA模型,多项分布朴素贝叶斯)

    新闻分类任务 1.利用gensim建立LDA模型将文本进行主题分类 2.利用多项分布朴素贝叶斯将文本进行分类 数据来源:http://www.sogou.com/labs/resource/list_ ...

最新文章

  1. 虚拟化部署之灵活应用Hyper-V快照
  2. 计算机网络技术专业毕业大作业答案,计算机网络技术大作业考核要求A卷
  3. #研发解决方案#基于Apriori算法的Nginx+Lua+ELK异常流量拦截方案
  4. 大学阶段总结——大二
  5. python中关于turtle库的学习笔记
  6. android导航屏幕,发现具有软件导航栏的Android设备的真实屏幕尺寸(以像素为单位)...
  7. centos 最简单的服务程序
  8. 网络管理员在预先分配和识别作为_网络管理员必备流量分析工具,果断转发收藏!...
  9. SSAS - 1.学习记录
  10. spark线性svm支持向量机 小结
  11. QuickWebApi2:使用Lambda方式,完成对WebApi的开发和调用-文档的生成
  12. MapReduce官方案例wordcount
  13. 安装了jdk和jre无法打开jar文件(测试过多个jdk版本和win系统,绝对百试百灵)
  14. 流媒体服务器- Wowza安装
  15. 给自己的逆向工程阶段性学习感想总结
  16. 运维是做什么的?史上最全互联网Linux工作规划!十分钟找到linux运维工程师职业方向!...
  17. 数据库:数据查询(指定的列、全部列、经过计算的值、消除重复的行、查询满足条件的元组、比较查询、范围查询、集合查询、字符匹配查询)
  18. php buildtrees,thinkphp5带分组功能的树形结构的无限级分类节点展示
  19. 采油工技能鉴定高级工计算机6,采油工技师、高级技师技能鉴定题库(宝典).doc...
  20. 对话框js插件源码汇总

热门文章

  1. Unity3d使用腾讯的游戏语音GVoice笔记
  2. python手写数字识别教学_6手写数字识别_python机器学习与数据挖掘_Python视频-51CTO学院...
  3. apache2.4配置虚拟域名
  4. 公司进行双软企业评估认定是为了什么,怎么申请?
  5. 美团打车卷土重来,但这次难给滴滴带来压力
  6. MYSQL:指定时间删除过期数据
  7. 【2012年腾讯俱乐部ACM赛新手组1000】我水平弱爆了—Love Message
  8. Docker1 架构原理及简单使用
  9. MongoDB系列--深入理解MongoDB聚合(Aggregation )
  10. oracle 创建加注释的表,oracle创建表+注释