机器学习算法_Echo_ldy的博客-程序员资料

k-近邻

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

需要进行标准化处理

欧氏距离公式:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20 200305235109780.png) 在这里插入图片描述在这里插入图片描述
k值取很小:容易受异常点影响
k值取很大:容易受最近数据太多导致比例变化

优点
       简单,易于理解,易于实现,无需估计参数(不是训练模型中的超参数,是算法里的自带参数,不会随加入数据量的大小产生变化,即输入样本量的大小不会对改模型产生影响),无需训练

缺点
       懒惰算法,对测试样本分类时的计算量大,内存开销大
       必须指定K值,K值选择不当则分类精度不能保证

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

要记得进行特征工程的标准化,可以大幅提高模型的准确率。

贝叶斯方法

       贝叶斯方法的特点是结合先验概率和后验概率,即避免了只使用先验概率的主观偏见,也避免了单独使用样本信息的过拟合现象。

朴素贝叶斯

       朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。
       最为广泛的两种分类模型是决策树模型(Decision Tree Model)和朴素贝叶斯模型(Naive Bayesian Model,NBM)。

朴素贝叶斯算法:
在这里插入图片描述
文本分类的应用:
       朴素贝叶斯分类算法是学习效率和分类效果较好的分类器之一。直观的文本分类算法,也是最简单的贝叶斯分类器,具有很好的可解释性,朴素贝叶斯算法特点是假设所有特征的出现相互独立互不影响,每一特征同等重要
       但事实上这个假设在现实世界中并不成立:首先,相邻的两个词之间的必然联系,不能独立;其次,对一篇文章来说,其中的某一些代表词就确定它的主题,不需要通读整篇文章、查看所有词。所以需要采用合适的方法进行特征选择,这样朴素贝叶斯分类器才能达到更高的分类效率。

在这里插入图片描述在这里插入图片描述现有一篇被预测文档:出现了影院,支付宝,云计算,计算属于科技、娱乐的
类别概率?
在这里插入图片描述现有一篇被预测文档:出现了影院,支付宝,云计算,计算属于科技、娱乐的
类别概率?即,P(C|W)

先计算P(W|C) * P(C )=
在这里插入图片描述

拉普拉斯平滑

在这里插入图片描述

  sklearn.naive_bayes.MultinomialNB(alpha=1.0)
     alpha: 拉普拉斯平滑系数

由于没有超参数进行调节,没办法对准确率进行调节,朴素贝叶斯受训练集数据质量的影响非常大。

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

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

       分类准确度高,速度快

缺点
       假设了文章当中一些词语

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

       分类准确度高,速度快

精确率和召回率

true positive ; false negative
false positive ; true negative

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

在这里插入图片描述

召回率:真实为正例的样本中预测结果为正例的比例(查的全,对正样本的区分能力)
在这里插入图片描述

分类模型评估API

sklearn.metrics.classification_report

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

其他分类标准,F1-score,反映了模型的稳健型

在这里插入图片描述
交叉验证
网格搜索

sklearn.model_selection.GridSearchCV

决策树

回归树预测:叶子上的平均值
分类树预测:叶子上少数服从多数

       信息的度量和作用

H = -(p1logp1 + p2logp2 + ... + p32log32)

       H的专业术语称之为信息熵,单位为比特。
公式:
在这里插入图片描述
信息熵越大,不确定性越大

决策树的划分依据之一——信息增益

特征A对训练数据集D的信息增益g(D,A),定义为集合D的信息熵H(D)与特征A给定条件下D的信息条件熵H(D|A)之差,即公式为:
在这里插入图片描述
决策树的划分依据之二——信息增益比
信息增益训练数据集D关于特征A的值的熵之比
在这里插入图片描述在这里插入图片描述n是特征A取值的个数。
信息增益会偏向取值更多的属性,而信息增益比不会。

分类树: 基尼系数 最小的准则 在sklearn中可以选择划分的默认原则

# 获取数据
data=pd.read_csv("http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt")

# 处理数据,找出特征值和目标值
y=data['survived']
x=data[['pclass','age','sex']]

# 缺失值处理
x["age"]=x["age"].fillna(x['age'].mean())

# 分割数据集到训练集合测试集
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2)

# 进行处理(特征工程)特征-》类别-》one_hot编码
std=DictVectorizer()
x_train=std.fit_transform(x_train.to_dict(orient='record'))
x_test=std.fit_transform(x_test.to_dict(orient='record'))

 # 用决策树进行预测
estimator=DecisionTreeClassifier(max_depth=8)
estimator.fit(x_test,y_test)
score=estimator.score(x_test,y_test)

# # 导出决策树的结构
export_graphviz(estimator,out_file=r'E:\lud\tree.dot'
                ,feature_names=['年龄', 'pclass=1st', 'pclass=2nd', 'pclass=3rd', '女性', '男性'])

需要安装graphviz将dot文件转换为pdf、png格式

优点
       简单的理解和解释,树木可视化。
       需要很少的数据准备,其他技术通常需要数据归一化,

缺点
       决策树学习者可以创建不能很好地推广数据的过于复杂的树,这被称为过拟合。
       决策树可能不稳定,因为数据的小变化可能会导致完全不同的树被生成

改进
       减枝cart算法
       随机森林

随机森林

       集成学习通过建立几个模型组合的来解决单一预测问题。它的工作原理是生成多个分类器/模型,各自独立地学习和作出预测。这些预测最后结合成单预测,因此优于任何一个单分类的做出预测。

       在机器学习中,随机森林是一个包含多个决策树分类器,并且其输出的类别是由个别树输出的类别的众数而定。
       例如, 如果你训练了5个树, 其中有4个树的结果是True, 1个数的结果是False, 那么最终结果会是True.

随机森林建立多个决策树的过程:
              N:训练用样本的个数,M:特征数目
       单个数的建立过程:
            1.随机在N个样本中选择一个样本,重复N次。(样本可重复)
            2.随机在M个特征中选出m个特征,m<<M。

(建立十棵决策树,其样本,特征大多不一样。随机有放回的抽样叫Bootstrap)

class sklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion=’gini’,max_depth=None, bootstrap=True, random_state=None)

随机森林分类器
n_estimators:int,optional(default = 10) 森林里的树木数量
criteria:string,可选(default =“gini”)分割特征的测量方法
max_depth:int或None,可选(默认=无)树的最大深度
bootstrap:bool,optional(default = True)是否在构建树时使用放回抽样

优点
      在当前所有算法中,具有极好的准确率
      能够有效地运行在大数据集上
      能够处理具有高维特征的输入样本,而且不需要降维
      能够评估各个特征在分类问题上的重要性
      对于缺省值问题也能够获得很好得结果

线性回归

算法:线性回归
策略:损失函数
        最小二乘法即误差平方和

在这里插入图片描述
        线性回归的目的的找到最小损失对应的W值

        最小二乘法之梯度下降

优化
        正规方程

sklearn.linear_model.LinearRegression

        梯度下降

sklearn.linear_model.SGDRegressor

在这里插入图片描述小规模数据:LinearRegression(不能解决拟合问题)以及其它
大规模数据:SGDRegressor

过拟合
    原因
        原始特征过多,存在一些嘈杂特征, 模型过于复杂是因为模型尝试去兼顾各个测试数据点

    解决办法
        进行特征选择,消除关联性大的特征(很难做)
        交叉验证(让所有数据都有过训练)
        正则化

    L2正则化:Ridge regression 岭回归
        作用:可以使得W的每个元素都很小,都接近于0
        优点:越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象
在这里插入图片描述从右往左,alpha越大,正则化力度越大,weight越趋近于零,模型越简单

模型的保存加载API

joblib.dump(rf,'test.pkl')
estimator=joblib.load('test.pkl')

逻辑回归

二分类问题

逻辑回归的输入和线性回归的输入是一样的。
在这里插入图片描述
逻辑回归的公式:
在这里插入图片描述

    Z=回归的结果  
   
    输出:[0,1]区间的概率值,默认0.5作为阈值

g(z)是sigmoid函数

在这里插入图片描述逻辑回归的损失函数:对数似然损失
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
损失函数
    均方误差:不存在多个局部最低点,只有一个最小值
    对数似然损失:多个局部最小值,目前无法确定全局最小值

        也是用梯度下降求解

  1. 多次随机初始化,多次比较最小值结果
  2. 求解过程当中,调整学习率

其实就是对似然函数取对数 然后对对数似然函数求偏导 利用梯度下降求最优解

似然函数
在这里插入图片描述

对数释然
在这里插入图片描述

转化为求J
在这里插入图片描述

最后求偏导
在这里插入图片描述
对数损失函数都是依据最大似然估计来计算的
一组参数在一堆数据下的似然值,等于每一条数据在这组参数下的条件概率之积。
而损失函数一般是每条数据的损失之和,为了把积变为和,就取了对数。
再加个负号是为了让最大似然值和最小损失对应起来。

在这里插入图片描述

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Echo_ldy/article/details/104687421

智能推荐

Intel Movidius Neural Compute SDK - ncsdk-2.05.00.02_Yongqiang Cheng的博客-程序员资料

Intel Movidius Neural Compute SDK - ncsdk-2.05.00.02movidius/ncsdkSoftware Development Kit for the Neural Compute Stickhttps://github.com/movidius/ncsdkReleaseshttps://github.com/movidius/ncsdk...

使用事件驱动模型实现高效稳定的网络服务器程序_FishBear_move_on的博客-程序员资料

http://www.cnblogs.com/hnrainll/p/3625597.html前言事件驱动为广大的程序员所熟悉,其最为人津津乐道的是在图形化界面编程中的应用;事实上,在网络编程中事件驱动也被广泛使用,并大规模部署在高连接数高吞 吐量的服务器程序中,如 http 服务器程序、ftp 服务器程序等。相比于传统的网络编程方式,事件驱动能够极大的降低资源占用,增大服务接待能力

拓端tecdat|R语言和Stan,JAGS:用rstan,rjags建立贝叶斯多元线性回归预测选举数据_拓端研究室的博客-程序员资料

原文链接:http://tecdat.cn/?p=21978本文将介绍如何在R中用rstan和rjags做贝叶斯回归分析,R中有不少包可以用来做贝叶斯回归分析,比如最早的(同时也是参考文献和例子最多的)R2WinBUGS包。这个包会调用WinBUGS软件来拟合模型,后来的JAGS软件也使用与之类似的算法来做贝叶斯分析。然而JAGS的自由度更大,扩展性也更好。近来,STAN和它对应的R包rstan一起进入了人们的视线。STAN使用的算法与WinBUGS和JAGS不同,它改用了一种更强大的算法使它能..

Linux通过lftp访问sftp服务器_lftp 登录sftp_RayBreslin的博客-程序员资料

1.安装yum -y install lftp2.等陆实例lftp sftp://username:[email protected]:22关键:username:用户名password:密码ip:sftp服务器ip22:默认的端口号3.lftp常用的命令:ls显示远端文件列表(!ls 显示本地文件列表)。cd切换远端目录(lcd 切换本地目录)。get下载远端文件。mget下载远端文件(可以用通配符也就是 *)。pget使用多个线程来下...

FocusScope学习二: 很好的理解FocusScope的工作原理_firstfocusscope_PunCha的博客-程序员资料

http://www.codeproject.com/Articles/38507/Using-the-WPF-FocusScopeIntroductionOften, it is useful to maintain a separate focus for different parts of the user interface. For example, when yo

POJ1511 Invitation Cards [最短路,dijstra+heap,spfa]_aszxqw的博客-程序员资料

题意:给定节点数n,和边数m,边是单向边.问从1节点出发到2,3,...n 这些节点路程和从从这些节点回来到节点1的路程和最小值。思路:很显然的最短路,先以1为起点进行一次最短路,然后再将边反向一下再以1为起点进行一下最短路。这题的意义在于数据,一般的dijstra的O(N^2)显然没法过。先用dijstra+heap试试。(以前被这个heap唬到了,其实heap直接用pr

随便推点

字符编码ANSI和ASCII区别、Unicode和UTF-8区别_nudt_qxx的博客-程序员资料

今天看了一个说法,说是入坑windows程序开发,必先掌握文字的编码和字符集知识。本博客就整理下信息存储和字符编码的相关知识。 一.位: 计算机存储信息的最小单位,称之为位(bit),音译比特,二进制的一个“0”或一个“1”叫一位。 二.字节 字节(Byte)是一种计量单位,表示数据量多少,它是计算机信息技术用于计量存储容量的一种计量单位,8个二进制位组成1个字节。在ASCII码中,一个标准

Vue配置TinyMCE富文本编辑器 + 图片(本地)上传到服务器_韩旭在努力的博客-程序员资料

一、TinyMCE是什么?TinyMCE是一款易用、且功能强大的所见即所得的富文本编辑器。同类程序有:UEditor、Kindeditor、Simditor、CKEditor、wangEditor、Suneditor、froala等等。我们可以先大体看一下配置完成后的样子注:博主使用的TinyMCE版本是 “tinymce”: “^4.8.2” 如果超过此版本可能会导致一些问题。首先如果想要在Vue中使用TinyMCE,我们需要准备一些什么?汉化的中文语言包:zh_CN.js下载下

我的Linux笔记_正熵的博客-程序员资料

学习目标:常用linux命令的使用 JAVAEE :后台应用都会涉及到linux系统,应用程序的部署,运维,分布式集群,大数据,云计算虚拟机:虚拟出来的计算机 虚拟机软件:用来产生虚拟机的一个软件对服务器的管理,都是通过远程登录来进行,远程登录的常用软件有以下3款: xshell putty secureCRT —-recommend 推荐 这些软件都是基于一种通信协议来进行远程登录

SSL/TLS的Handshake过程与javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure异常_易生一世的博客-程序员资料

一.SSL/TLS的Handshake过程在SSL/TLS的Handshake过程中,客户端与服务器之间需要交换参数,具体过程如下:客户端提供其所支持的各种cipher suites(包含加密算法和Hash函数) 服务器从中选择自己也支持的cipher suite,并通知客户端,表明两者将以此进行数据传输 服务器同时将自己的数字证书(包括服务器名称、CA和公钥)作为标识符发给客户端 ...

C/C++内存管理(4)_lien0906的博客-程序员资料

本文将对 Linux? 程序员可以使用的内存管理技术进行概述,虽然关注的重点是 C 语言,但同样也适用于其他语言。文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半手工地管理内存,以及如何使用垃圾收集自动管理内存。为什么必须管理内存内存管理是计算机编程最为基本的领域之一。在很多脚本语言中,您不必担心内存是如何管理的,这并不能使得内存管

CMake构建、编译OpenCV工程_cmake opencv 会构建子版本号_桔子code的博客-程序员资料

原文链接:http://www.juzicode.com/opencv-note-cmake-project-vs-windowsOpenCV除了提供二进制包,还可以下载其源码手动编译二进制文件,不过源码中并没有提供可以直接编译的工程文件,需要借助CMake工具完成工程文件的构建。获取源码从官网opencv.org找到github链接,或者直接进入https://github.com/opencv/opencv/releases找到相应的版本,这里以4.5.3为例:在该版本下有多个发

推荐文章

热门文章

相关标签