目录

一。k-近邻算法的定义

二。k近邻算法实例-预测入住位置

三。k-临近算法优缺点

四。精确率与召回率

1.精确率

2.召回率

3.F1-score

4.classification_report (每个类别精确率与召回率)

五。朴素贝叶斯-贝叶斯公式

六。拉普拉斯平滑系数

七。朴素贝叶斯算法案例

八。朴素贝叶斯分类优缺点

九。网格搜索及交叉验证

1.交叉验证

2.超参数搜索-网格搜索


一。k-近邻算法的定义

如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

二。k近邻算法实例-预测入住位置

from sklearn.model_selection import train_test_split,GridSearchCV#train_test_split是用来划分训练和测试数据的;GridSearchCV是超参数搜索-网格搜索
from sklearn.neighbors import KNeighborsClassifier#k—近邻算法
import pandas as pd
from sklearn.preprocessing import StandardScaler#标准化
def knncls():"""k-近邻预测签到位置"""#读取数据data = pd.read_csv("./train.csv")#处理数据data = data.query("x > 1.0 &  x < 1.25 & y>2.5&y<2.75")#query用于筛选数据time_value=pd.to_datetime(data["time"],unit="s")#to_datetime用于设置为时间格式print(time_value)time_value=pd.DatetimeIndex(time_value)#转化为了字典的格式data["day"]=time_value.daydata["hour"]=time_value.hourdata["weakday"] = time_value.weekdaydata=data.drop(["time"],axis=1)#drop中axis=1表示列print(data)place_count=data.groupby("place_id").count()#把签到数量少于n个的目标位置删除tf=place_count[place_count.row_id>3].reset_index()#reset_index用索引重置生成一个新的DataFrame或Series。当索引需要被视为列,或者索引没有意义,需要在另一个操作之前重置为默认值时。data=data[data["place_id"].isin(tf.place_id)]y=data["place_id"]#目标值x=data.drop(["place_id","row_id"],axis=1)#特征值x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.25)#train_test_split是用来划分训练和测试数据的#特征工程(标准化)对训练集和测试集的特征值进行标准化std=StandardScaler()x_train=std.fit_transform(x_train)#对x_train进行标准化处理x_test=std.transform(x_test)#对x_test进行标准化处理#进行算法流程# knn=KNeighborsClassifier(n_neighbors=5)knn=KNeighborsClassifier()# knn.fit(x_train,y_train)#把训练集数据输入,k-近邻算法无需训练# y_predict=knn.predict(x_test)# print("预测的目标签到位置为:",y_predict)# print("预测的准确率:",knn.score(x_test,y_test))#得出准确率param={"n_neighbors":[3,5,10]}gc=GridSearchCV(knn,param_grid=param,cv=2)#param_grid为估计器参数,cv为指定几折交叉验证gc.fit(x_train, y_train)#向网格搜索输入训练数据print("在测试集上的准确率:",gc.score(x_test,y_test))#准确率,交叉验证时输入的是train跟test没有关系print("在训练集上的准确率:", gc.score(x_train, y_train))print("在交叉验证当中最好的结果:",gc.best_score_)print("选择最好的模型是:",gc.best_estimator_)print("每个超参数每次交叉验证的结果:",gc.cv_results_)return None
if __name__=="__main__":knncls()

三。k-临近算法优缺点

•优点:

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

•缺点:

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

•必须指定K值,K值选择不当则分类精度不能保证

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

四。精确率与召回率

1.精确率

预测结果为正例样本中真实为正例的比例(查得准)

2.召回率

真实为正例的样本中预测结果为正例的比例(查的全,对正样本的区分能力)

3.F1-score

反映了模型的稳健型

4.classification_report (每个类别精确率与召回率)

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

•y_true:真实目标值

•y_pred:估计器预测目标值

•target_names:目标类别名称

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

五。朴素贝叶斯-贝叶斯公式

P(C│W)=(P(W│C)P(C))/(P(W))

w为给定文档的特征值(频数统计,预测文档提供),c为文档类别

公式分为三个部分:

•P(C):每个文档类别的概率(某文档类别词数/总文档词数)

•P(W│C):给定类别下特征(被预测文档中出现的词)的概率

•P(F1,F2,…)     预测文档中每个词的概率

六。拉普拉斯平滑系数

P(F1│C)=(Ni+α)/(N+αm)

α为指定的系数一般为1,m为训练文档中统计出的特征词个数

七。朴素贝叶斯算法案例

•sklearn.naive_bayes.MultinomialNB(alpha = 1.0)

•朴素贝叶斯分类

•alpha:拉普拉斯平滑系数

from sklearn.datasets import fetch_20newsgroups
from sklearn.metrics import classification_report#计算每个类别的精确率与召回率
from sklearn.model_selection import train_test_split#分割数据集
from sklearn.feature_extraction.text import TfidfVectorizer#特征抽取,中重要性
from sklearn.naive_bayes import MultinomialNB#朴素贝叶斯算法def naviebayes():news = fetch_20newsgroups(subset='all')x_train,x_test,y_train,y_test=train_test_split(news.data,news.target,test_size=0.25)#划分训练集,测试集tf=TfidfVectorizer()x_train=tf.fit_transform(x_train)#对x_train进行特征抽取,根据词的重要性;# print(tf.get_feature_names())x_test=tf.transform(x_test)#对x_test进行特征抽取,根据词的重要性;mlt=MultinomialNB(alpha=1.0)# print(x_train.toarray())# print(x_test.toarray())# print(y_train)mlt.fit(x_train,y_train)y_predict=mlt.predict(x_test)# print("预测的文章类别为:",y_predict)print("准确率为:",mlt.score(x_test,y_test))print("每个类别的精确率与召回率:","\n",classification_report(y_test,y_predict,target_names=news.target_names))print("*"*100)print(news.target_names)print(news.target)return None
if __name__=="__main__":naviebayes()
/Users/lichengxiang/opt/anaconda3/bin/python /Users/lichengxiang/Desktop/python/机器学习/朴素贝叶斯算法.py
准确率为: 0.8514431239388794
每个类别的精确率与召回率: precision    recall  f1-score   supportalt.atheism       0.90      0.77      0.83       203comp.graphics       0.88      0.73      0.80       241comp.os.ms-windows.misc       0.82      0.84      0.83       244
comp.sys.ibm.pc.hardware       0.80      0.79      0.79       271comp.sys.mac.hardware       0.83      0.91      0.87       229comp.windows.x       0.93      0.81      0.87       261misc.forsale       0.93      0.68      0.79       247rec.autos       0.93      0.94      0.94       247rec.motorcycles       0.92      0.97      0.94       228rec.sport.baseball       0.96      0.96      0.96       254rec.sport.hockey       0.97      0.98      0.97       264sci.crypt       0.68      0.98      0.80       228sci.electronics       0.92      0.78      0.85       259sci.med       0.99      0.89      0.94       263sci.space       0.85      0.97      0.91       225soc.religion.christian       0.58      0.98      0.73       248talk.politics.guns       0.73      0.97      0.84       218talk.politics.mideast       0.93      0.97      0.95       244talk.politics.misc       0.99      0.58      0.73       195talk.religion.misc       0.97      0.23      0.37       143accuracy                           0.85      4712macro avg       0.88      0.84      0.84      4712weighted avg       0.88      0.85      0.85      4712****************************************************************************************************
['alt.atheism', 'comp.graphics', 'comp.os.ms-windows.misc', 'comp.sys.ibm.pc.hardware', 'comp.sys.mac.hardware', 'comp.windows.x', 'misc.forsale', 'rec.autos', 'rec.motorcycles', 'rec.sport.baseball', 'rec.sport.hockey', 'sci.crypt', 'sci.electronics', 'sci.med', 'sci.space', 'soc.religion.christian', 'talk.politics.guns', 'talk.politics.mideast', 'talk.politics.misc', 'talk.religion.misc']
[10  3 17 ...  3  1  7]进程已结束,退出代码0

八。朴素贝叶斯分类优缺点

•优点:

•朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。

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

•分类准确度高,速度快

•缺点:

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

九。网格搜索及交叉验证

1.交叉验证

为了让被评估的模型更加准确可信

交叉验证:将拿到的数据,分为训练和验证集。例如将数据分成5份,其中一份作为验证集。然后经过5次(组)的测试,每次都更换不同的验证集。即得到5组模型的结果,取平均值作为最终结果。又称5折交叉验证。

2.超参数搜索-网格搜索

通常情况下,有很多参数是需要手动指定的(如k-近邻算法中的K值),这种叫超参数。但是手动过程繁杂,所以需要对模型预设几种超参数组合。每组超参数都采用交叉验证来进行评估。最后选出最优参数组合建立模型。

•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-近邻算法及朴素贝叶斯算法相关推荐

  1. k近邻算法,朴素贝叶斯算法,分类模型评估,模型调优

    k近邻算法,朴素贝叶斯算法,分类模型评估,模型调优 k近邻算法 k近邻算法概述 k近邻算法代码实现 k近邻算法的评价 朴素贝叶斯算法 朴素贝叶斯算法概述 朴素贝叶斯代码实现 朴素贝叶斯的评价 分类模型 ...

  2. k近邻算法与朴素贝叶斯算法

    机器学习--k近邻算法与朴素贝叶斯算法 k近邻算法 朴素贝叶斯 理论基础: 精确率和召回率 交叉验证与网格搜索 k近邻算法 定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大 ...

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

    文章目录 一.机器学习基础 1.明确几点问题 2.机器学习算法的判别依据 3.机器学习算法分类 4.机器学习开发流程 二.机器学习算法 1.sklearn数据集 (1)数据集划分 (2)sklearn ...

  4. 机器学习算法基础——朴素贝叶斯算法

    26.朴素贝叶斯算法原理 联合概率和条件概率 联合概率:包含多个条件,且所有条件同时成立的概率 记作:P(A,B) P(A,B)=P(A)P(B) 条件概率:就是事件A在另外一个事件B已经发生条件下的 ...

  5. 用python实现朴素贝叶斯算法_朴素贝叶斯算法 python 实现

    应用贝叶斯准则: 使用上面这些定义,可以定义贝叶斯分类准则为: 如果 P(c1|x, y) > P(c2|x, y), 那么属于类别 c1; 如果 P(c2|x, y) > P(c1|x, ...

  6. java mllib 算法_朴素贝叶斯算法原理及Spark MLlib实例(Scala/Java/Python)

    朴素贝叶斯 算法介绍: 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法. 朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,在没有其它可用信息下,我 ...

  7. 分类算法之朴素贝叶斯算法

    1. 什么是朴素贝叶斯分类方法 2. 概率基础 2.1 概率(Probability)定义 概率定义为一件事情发生的可能性 扔出一个硬币,结果头像朝上 某天是晴天 P(X) : 取值在[0, 1] 2 ...

  8. 朴素贝叶斯算法_朴素贝叶斯算法原理

    摘要:本文介绍了贝叶斯公式,并根据公式而产生的朴素贝叶斯分类算法在机器学习中的应用,并列举了朴素贝叶斯分类算法的优缺点. 1贝叶斯公式的理解 贝叶斯定理(Bayes' theorem)是概率论中的一个 ...

  9. python实现排列组合公式算法_朴素贝叶斯算法的Python实现

    朴素贝叶斯分类算法被广泛应用于文本分类场景中.包含垃圾邮件.互联网新闻等分类任务,属于有监督学习算法.它独立考量每一维度特征被分类的条件概率,然后综合这些概率对其所在的特征向量做出分类预测,即&quo ...

最新文章

  1. typeof和instanceof 运算符
  2. 003 Android之线性布局与基础控件
  3. Bootstrap3 滚动监听插件的调用方式
  4. Qt4_写TCP客户/服务器应用程序
  5. python3 messagebox_如何在Python3.4中正确实现tkMessageBox?
  6. java环境配置:安装jdk和集成开发环境
  7. java 动态创建数据库和动态连接数据库
  8. Marvell车载以太网交换机芯片88Q5050
  9. 可视化网络监控软件OpManager获选″IT运维产品之星”
  10. [Laravel] 如何使用PHP实现前端分页
  11. 功能测试怎么做?常用功能测试方法总结
  12. 发那科程序全部输出_发那科CF卡程序输入输出方法
  13. “免费代理IP” 又双叒叕来了,这次无限量、更稳定。(附带使用教程)
  14. 解决“双系统删除其中一个,BIOS仍然有其启动项”问题
  15. 在html中加入网址,网页超链接怎么做,添加超链接网址的的详细步骤
  16. 基于web的员工信息管理系统
  17. 00后测试员摸爬滚打近一年,为是否要转行或去学软件测试的学弟们总结出了以下走心建议
  18. kankan including About CE
  19. Ubuntn14.04安装显卡驱动后进不了桌面
  20. [技术干货] 惠普3par命令行配置snmptrap

热门文章

  1. html5 新标签用法,Html5新标签解释及用法
  2. [转]video视频解码硬解和软解的区别及如何选择
  3. 首选项配置+Eslint+prettier+Vetur
  4. 算法提高 棋盘多项式
  5. android 猜歌游戏报告,Android第二十五期 - 猜歌小游戏
  6. MongoDB Aggregation 聚合框架
  7. Arduino基础入门篇15—随机骰子
  8. selenium爬取上市公司全部行业及分行业股票行情数据
  9. 从数据集CLEVR来看视觉推理的发展
  10. matlab 多线程编程,Matlab——Timer对象(多线程编程)