机器学习总结

机器学习概念:

(1)有监督:数据有标签,比如年龄

(2)无监督:数据向量没有标签。

(3)半监督:标签缺损。

(4)分类:有监督的学习可以用来判断种类,比如把名字和脸对应起来,或赋予一个数字标签(如年龄)。当数据以名字(种类)作为标签,则表明我们在做分类。

(5)回归:通过类别的或数值的输入数据来拟合一个数值输出。

(6)欠拟合:模型假设太严格,所以模型不能拟合到实际数据上。

(7)过拟合:算法不仅学习了数据,而且把噪声也当做信号学习了,这样算法的推广能力很差。

(8)正则化:防止过拟合,提高泛化能力。

正则化可以让权值向量w“变小”的效果,这是因为:更小的权值w,从某种意义上说,表示的网络的复杂度更低,对数据的拟合刚刚好(奥卡姆剃刀)。结构风险最小化等价于正则化,即在经验风险的后面加上与模型复杂度相符的正则化项或惩罚项。

(9)召回率:提取出正确的数量/样本数量的总数

(10)准确率:提取出正确的数量/提取出的样本

(11)距离度量:欧氏距离、曼哈顿距离(实际距离)、切比雪夫距离、马氏距离、夹角余弦(衡量样本向量之间的差异)

评估机器学习结果的工具:

交叉验证:首先把数据分为k个不同的子集。然后用k-1个子集进行训练,用没有用来训练的子集进行测试。这样做k次(每个子集都有一次机会作为测试集),然后把结果平均。

自抽样法:验证集是从训练集中随机选取的。选择的点仅用于测试,不在训练中使用,这样做N次,每次随机选择一些验证集,最后把得到的结果平均。这意味着一些数据样本会出现在不同的验证集中,自抽样法的效果一般胜于交叉验证。

机器学习中一些重要的规律:

(1)大量数据比少量数据好,好的特征比好的算法更重要。如果选取的特征好,最大化它们的独立性,最小化它们在不同环境之下的变化,那么大部分算法都可以获得比较好的效果。

(2)一般分类器的选择需要考虑计算速度、数据形式和内存大小。一些应用中在线用户优先选择建模,所以分类器需要能够快速完成训练。在这种情况下,最近邻算法,正态贝叶斯和决策树是不错的选择。如果需要考虑内存因素,决策树和神经网络是理想的选择。如果不需要很快训练,而需要很快判断,那么神经网络可以满足要求,正态贝叶斯和SVM也不错。如果不需要训练很快,但是需要精确度很高,可选择boosting和随机森林。如果选取得特征比较好,仅仅需要一个简单易懂的分类器,就选择决策树和最近邻算法。要获得最好的性能,还是离不开boosting和随机森林。

(注意:不存在“最好”的分类器,综合考虑所有的数据分布类型,所有的分类器都是一样的。因此我们无法说明那个算法“最好”。但是如果给定某个特定的数据分布,或者特定的一些数据分布,通常存在一个最好的分类器。所以在实际应用中,最好多尝试一下各种不同的分类器)。

(3)考虑自己的目的:只是为了得到正确的匹配分数,还是去理解数据?你追求的是快速计算,少的内存需求,还是结果的可信度?在这方面,不同的分类器有不同的能力)

机器学习常用算法:

(1)K-mean

步骤:

step1:输入数据集合和类别数K(由用户指定)。

step 2:随机分配类别中心点的位置。

step 3:将每个点放入离它最近的类别中心点所在的集合

step 4:移动类别中心点到它所在集合的中心。

step 5:转到step3,直到收敛。

这是一种非监督的聚类方法,使用K个均值来表示数据的分布,其中K的大小由用户定义。该方法跟期望最大化方法的区别是K均值的中心不是高斯分布,而且因为各个中心竞争去“俘获”最近的点,所以聚类结果更像肥皂泡。聚类区域进程被用作稀疏直方图的bin,用来描述数据。


(2)朴素贝叶斯

这是一个通用的分类器,它假设特征是高斯分布而且统计上互相独立。这个假定过于苛刻,在很多条件下不能满足,正因为此,它也被称为“朴素贝叶斯”分类器,然而,在很多情况下,这个分类器的效果却出奇额好。


(3)决策树

这是一个判别分类器。该树在当前节点通过寻找数据特征和一个阈值,来最优划分数据到不同的类别。处理流程是不停地划分数据并向下到树的左右侧子节点。虽然它一般不具有最优性能,但是往往是测试算法的第一选择,因为它速度比较快,而且具有不错的功能。


(4)集成学习方法

找到一个比随机猜测略好的弱学习算法,通过集成学习,将其提升为强学习算法,而不必直接去找通常情况下很难获得的强学习方法。

Bagging:训练R个分类器f_i,分类器之间其他相同就是参数不同。其中f_i是通过从训练集合中(N篇文章)随机取(取后放回)N次文档构成的训练集合训练得到的。对于新文档d,用这R个分类器去分类,得到的最多的那个类别作为d的最终类别。

Boosting:常用Adaboosting。训练是串行进行的。第k个分类器训练时关注对前k-1分类器中错分的文档,即不是随机取,而是加大取这些文档的概率。boosting算法非常擅长检查特定视角的刚性物体。

(5)随机森林

这是由许多决策树组成的“森林”,每个决策树向下递归以获取最大深度。在学习过程中,每棵树的每个节点只从特征数据的一个随机子集中选择。这保证了每颗树时统计上不相关的分类器。在识别过程中,将每颗树的结果进行投票来确定最终结果,每棵树的权重相同,这个分类方法经常很有效,而且对每颗树的输出进行平均,可以处理回归问题。


(6)期望最大化(EM)

一种用于聚类的非监督生成算法,要求数据满足高斯分布。它可以拟合N个多维高斯到数据上,此处N的大小由用户决定。这样仅仅使用几个参数(均值和方差)就可以非常有效的表达一个比较负责的分布。该方法经常用于分科。


(7)k近邻

可能是最简单的分类器。训练数据跟类别标签存放在一起,离厕所数据最近的(欧氏距离最近)k个样本进行投票,确定测试数据的分类结构。该方法通常比较有效,但是速度比较慢且对内存的需求比较大。


(8)神经网络/多层感知器

该分类算法在输入节点和输出节点之间具有隐藏节点,这可以更好的表示输入信号。训练该分类器很慢,但是识别时很快,对于一些识别问题,如字符识别,它具有非常不错的性能。


(9)支持向量机(SVM)

它可以进行分类,也可以进行回归。该算法需要定一个高维空间中任两点的距离函数(将数据投影到高维空间会使数据更容易地线性可分)。该算法可以学习一个分类超平面,用来在高维空间里实现最优分类。当数据有限的时候,该算法可以获得非常好的性能,而boosting和随机森林只能在拥有大量训练数据时才有好的效果。


(10)在线学习

步骤:

step1:收集和学习现有的数据

step2:依据模型或规则,做出决策,给出结果。

step3 :根据真实的结果,来训练和学习规则或模型。


(11)关联规则分析Apriori

主要功能:快速找到经常在一起的频繁项。从中发掘那些商品经常被一起购买。

原理:如果某个子集不是频繁的,那么包含它的所有超集也不是频繁的。

步骤:

先生成所有单个商品构成子集列表

然后计算每个子集的支持度

剔除不满足最小支持度的子集

对满足要求的子集进行两两组合(但组合一定是某个交易的数据的子集)

计算组合的支持度

然后在剔除

依次循环,直到剔除完成。

返回频繁子集


参数优化问题:

即找到最适合目标函数的参数,该参数一般满足使目标函数最大或者最小。

1、梯度下降法:

(1)批量梯度下降法(BGD):每次偏移一定量的值(适合小规模样本,容易局部最优)。

(2)随机梯度下降法(RGD):通过每个样本来迭代更新一次(适合大规模样本,全局最优)

2、牛顿法

3.共轭梯度法:求解对称正定线性方程组。

4.坐标下降法


改善模型准确率的方法:

http://developer.51cto.com/art/201601/504833.htm

(1)增加更多数据

(2)处理缺失值和异常值

(3)特征工程学:转换成新的特征

(4)特征选择

(5)使用多种算法

(6)算法调整

(7)集成模型

(8)交叉验证


基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是一款广泛应用在无人机、机器人运动设备中的六轴姿态传感器,它集成了三轴陀螺仪三轴加速度计。这款传感器能够实时监测并提供设备的角速度线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp``MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式I2C地址,`getAcceleration()``getGyroscope()`则分别用于获取加速度角速度数据。 在Arduino项目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()``getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准滤波,以消除噪声漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是一种低引脚数的串行通信协议,允许多个设备共享一对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深入了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进一步计算出物体的姿态(如角度角速度变化)。 在嵌入式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是一个强大的六轴传感器,广泛应用于各种需要实时运动追踪的项目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客其他开源资源是解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息实践指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值