2018-12-19 17:33:12 RabitMountain 阅读数 128
  • 机器学习入门30天实战

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 系列课程包含Python机器学习库,机器学习经典算法原理推导,基于真实数据集案例实战3大模块。从入门开始进行机器学习原理推导,以通俗易懂为基础形象解读晦涩难懂的机器学习算法工作原理,案例实战中使用Python工具库从数据预处理开始一步步完成整个建模工作!具体内容涉及Python必备机器学习库、线性回归算法原理推导、Python实现逻辑回归与梯度下降、案例实战,信用卡欺诈检测、决策树与集成算法、支持向量机原理推导、SVM实例与贝叶斯算法、机器学习常规套路与Xgboost算法、神经网络。

    7605 人正在学习 去看看 唐宇迪

机器学习实战(1)—— 机器学习基础

在这里插入图片描述

老板:小韩啊,来来来!工程是不是写够了啊?

我:(what!!!)emmmm,还行还行。

老板:一看你就是写够了。最近公司要搞机器学习,你带头来学习一下吧!

我:行啊,工程代码我早就不想写了。那就学习一下吧!

老板:好,那就先去看《机器学习》吧!

自己现在是一名大四的学生,准备读研,当然没有工作,老板也是我捏造的。

荒废了大四好久的时间,最近,自己总算是慢慢提起学习的兴趣,开始学习机器学习了。以前从来没有接触过机器学习,所以在学习的初期,自己也向学长学姐请教了一下,于是决定从《机器学习实战》这本书开始入门机器学习。

为什么选择这本书,其实,总体来看,这本书比较基础,适合入门。对于一些数学定理,也就是拿过来用,并不注重这些定理的高深的推导过程。这对我一个数学渣渣来说,正好可以接受。

作为一名标准的理工男,我也算是第一次写文章,可能会有语病问题。有些东西可能写的不好,说的不明白,还望大家见谅。

好了,开篇的废话我也不多说了,直接进入“机器学习”的世界!

1.1 何谓机器学习

除却一些无关紧要的情况,我们很难直接从原始数据本身获得所需信息。

例如,对于垃圾邮件的检测,侦测一个单词是否存在并没有太大的作用,然而当某几个特定单词同时出现时,再辅 以考察邮件长度及其他因素,我们就可以更准确地判定该邮件是否为垃圾邮件。

简单地说,机器学习就是把无序的数据转换成有用的信息,让机器向我们的大脑一样去学习去判断。

其实,书中还有更多的信息去介绍机器学习的背景,因为大部分都是理论套话,这里我就不给大家列出了,有兴趣的可以直接去看《机器学习实战》这本书。

我们接下来直接看一下与机器学习有关的术语。

1.2 关键术语

在踏入任何一个领域之前,我们都有必要去了解该领域所读应的术语,机器学习也不例外。

好了,老板来了。

老板:小韩啊,看的怎么样了?机器学习里面的一些术语明白了吗??

我:明白了!明白了!So Easy!

老板:hhhh,好。那你给我系统的介绍一下吧。

我:好嘞!(求升职加薪脸)

下面,我们就从一个鸟类分类系统来介绍机器学习中的相关术语。

这类系统非常有趣,通常与机器学习中的专家系统有关。开发出能够识别鸟类的计算机软件,鸟类学者就可以退休了。因为鸟类学者是研究鸟类的专家,因此我们所以说创建的是一个专家系统。

下表是我们用于区分不同鸟类需要使用的四个不同的属性值,我们选用体重、翼展、有无脚蹼以及后背颜色作为评测基准。现实中,你可能会想测量更多的值。通常的做法是测量所有可测属性,而后再挑选出重要部分。下面测量的这四种值称之为特征,也可以称作属性,我们接下来一律将其称为特征。表中的每一行都是一个具有相关特征的实例

体重(克) 翼展(厘米) 脚蹼 后背颜色 种属
1 1000.1 125.0 棕色 红尾鵟
2 3000.7 200.0 灰色 鹭鹰
3 3300.0 220.3 灰色 鹭鹰
4 4100.0 136.0 黑色 普通潜鸟
5 3.0 11.0 绿色 瑰丽蜂鸟
6 570.0 75.0 黑色 象牙喙啄木鸟

老板:等一下,你这光有文字,太抽象了。

我:那你等一下,我给你画张图,你就明白了。

在这里插入图片描述

老板:不错不错,这样好理解多了!

如果你看到了一只象牙喙啄木鸟,请马上通知我!而且千万不要告诉任何人。在我到达之前, 一定要看住它,别让它飞跑了。(任何发现活的象牙喙啄木鸟的人都可以得到5万美元的奖励)

机器学习的主要任务就是分类。接下来我们就利用上表进行分类,标识出象牙喙啄木鸟从而获取5万美元的奖励。

大家都想从众多其他鸟类中分辨出象牙喙啄木鸟,并从中获利。

简单的做法是安装一个喂食器,然后雇用一位鸟类学者,观察在附近进食的鸟类。如果发现象牙喙啄木鸟,则通知我们。这种方法太昂贵了,而且专家在同一时间只能出现在一个地方。

我们可以自动化处理上述过程,安装多个带有照相机的喂食器,同时接入计算机用于标识前来进食的鸟。 同样我们可以在喂食器中放置称重仪器以获取鸟的体重,利用计算机视觉技术来提取鸟的翅长、 脚的类型和后背色彩。假定我们可以得到所需的全部特征信息,那该如何判断飞入进食器的鸟是 不是象牙喙啄木鸟呢?

这个任务就是分类,有很多机器学习算法非常善于分类。本例中的类别就是鸟的物种,更具体地说,就是区分是否为象牙喙啄木鸟。 最终我们决定使用某个机器学习算法进行分类,首先需要做的是算法训练,即学习如何分类。 通常我们为算法输入大量已分类数据作为算法的训练集训练集是用于训练机器学习算法的数据样本集合,那么上表是包含六个训练样本的训练集,每个训练样本有4种特征、一个目标变量。目标变量是机器学习算法的预测结果,在分类算法中目标变量的类型通常是标称型的, 而在回归算法中通常是连续型的。训练样本集必须确定知道目标变量的值,以便机器学习算法可以发现特征和目标变量之间的关系。正如前文所述,这里的目标变量是物种,也可以简化为标称型的数值。我们通常将分类问题中的目标变量称为类别,并假定分类问题只存在有限个数的类别。

老板:那你继续画图!

我:遵命!

在这里插入图片描述

注意:特征或者属性通常是训练样本集的列,它们是独立测量得到的结果,多个特征联系在一 起共同组成一个训练样本。

好了,我们现在已经有了数据,也做好了分类训练的工作,接下来就是测试工作了。

为了测试机器学习算法的效果,通常使用两套独立的样本集:训练数据测试数据

  1. 当机器学习程序开始运行时,使用训练样本集作为算法的输入,训练完成之后输入测试样本。
  2. 输入测试样本时并不提供测试样本的目标变量,由程序决定样本属于哪个类别。比较测试样本预测的目标变量值与实际样本类别之间的差别,就可以得出算法的实际精确度。

后面我们将会引入更好地使用测试样本和训练样本信息的方法,这里就不再详述。

假定这个鸟类分类程序,经过测试满足精确度要求,是否我们就可以看到机器已经学会了如何区分不同的鸟类了呢?这部分工作称之为***知识表示***,某些算法可以产生很容易理解的知识表示,而某些算法的知识表示也许只能为计算机所理解。知识表示可以采用规则集的形式,也可以采用概率分布的形式,设置可以是训练样本集中的一个实例。在某些场合中,人们可能并不想建立一个专家系统,而仅仅对机器学习算法获取的信息感兴趣。此时,采用何种方式表示知识就显得非常重要了。


好了,说了这么多,可能会有点多,这里因为是术语,定义我也不能自己胡诌,我就结合西瓜书,给大家稍微总结一下基本的术语,可能说的不是很清楚,如果有什么不对的地方,欢迎大家指正。当然,在后面的学习中,我们会接触到更多的术语,这里我就不多赘述了。

  1. 实例(样本):表中每一行是关于一个事件或者对象的描述。
  2. 特征(feature):反映事件或对象在某方面的表现或性质的事项,也叫做属性(attribute),例如体重、是否有脚蹼等。
  3. 属性值(attribute value):属性上的取值。
  4. 数据集(data set):样本的集合。
  5. 训练集(training set):用作训练的数据集。
  6. 测试集(test set):用作测试的数据集。

老板:小伙子干得不错啊!

我:还行,还行!

老板:今晚给你加鸡腿,你就在公司好好干!

我:(脸上笑嘻嘻,内心mmp)

1.3 机器学习的主要任务

上面的例子中,我们已经介绍了机器学习是如何解决分类问题的,它的主要任务就是将实例数据划分到合适的分类中去。

机器学习的另一项任务是回归(regression),它用于预测数值型数据。大多数人都见多回归的例子——数据拟合曲线:通过给定数据点的最优拟合曲线。

分类和回归术语监督学习,之所以称之为监督学习,是因为这类算法必须知道预测什么,即目标变量的分类信息。

与监督学习相对应的就是无监督学习,此时数据没有类别信息,也不会给定目标值。

  1. 将数据集合分成由类似的对象组成的多个类的过程被称为聚类
  2. 将寻找描述数据统计值 的过程称之为密度估计

此外,无监督学习还可以减少数据特征的维度,以便我们可以使用二维或三维图形更加直观地展示数据信息。

下面这个表格是《机器学习实战》这本书上的,因为我也是入门级,所以就直接拿过来用了。

监督学习的用途
分类 回归
k-近邻算法 线性回归
朴素贝叶斯算法 局部加权线性回归
支持向量机(SVM) Ridge线性回归
决策树 Lasso最小回归系数估计
无监督学习的用途
聚类 密度估计
K-均值 最大期望算法
DBSCAN Parzen窗设计

好吧,这么多东西都是啥玩意?我也不知道。后面,我们慢慢学习,揭开这神秘的面纱!

1.4 如何选择合适的算法

老板:小韩啊,最近机器学期看得怎么样了啊?

我:还行还行啦,基本的术语都搞明白了啊,也了解了一些算法和机器学习的分类了。

老板:不错,不错。那你知道如何选择合适的机器学习算法吗?

我:那当然了。书上写的还是很明白的!

老板:那你给我讲讲!

老板啊,这么多机器学习算法,我们该如何进行选择呢?其实,有两个问题需要我们考虑。

  1. 我们使用机器学习算法的目的,想要算法完成何种任务。比如,是预测明天下雨的概率还是对投票者按照兴趣分组呢?
  2. 需要分析和收集的数据是什么

简单点,就是目的和数据,也就是我们用什么数据做什么用。

**首先考虑使用机器学习算法的目的。**如果想要预测目标变量的值,则可以选择监督学习算法, 否则可以选择无监督学习算法。确定选择监督学习算法之后,需要进一步确定目标变量类型,如果目标变量是离散型,如是/否、1/2/3、A/B/C或者红/黄/黑等,则可以选择分类器算法;如果目标变量是连续型的数值,如0.0~100.00、-999~999或者+∞~-∞等,则需要选择回归算法。 如果不想预测目标变量的值,则可以选择无监督学习算法。进一步分析是否需要将数据划分为离散的组。如果这是唯一的需求,则使用聚类算法;如果还需要估计数据与每个分组的相似程度,则需要使用密度估计算法。

好吧,这么多字,有点烦哦,不如来一张图片。

在这里插入图片描述

在大多数情况下,上面给出的选择方法都能帮助读者选择恰当的机器学习算法,但这也并非一成不变。

其次需要考虑的是数据问题。我们应该充分了解数据,对实际数据了解得越充分,越容易创建符合实际需求的应用程序。主要应该了解数据的以下特性:

  1. 特征值是离散型变量还是连续型变量
  2. 特征值中是否存在缺失的值
  3. 何种原因造成缺失值
  4. 数据中是否存在异常值
  5. 某个特征发生的频率如何(是否罕见得如同海底捞针)等等。

充分了解上面提到的这些数据特性可以缩短选择机器学习算法的时间。

我们只能在一定程度上缩小算法的选择范围,一般并不存在好的算法或者可以给出好结果的算法,同时还要尝试不同算法的执行效果。对于所选的每种算法,都可以使用其他的机器学习技术来改进其性能。在处理输入数据之后,两个算法的相对性能也可能会发生变化。后续章节我们将进一步讨论此类问题,一般说来发现好算法的关键环节是反复试错的迭代过程。

1.5 开发机器学习应用程序的步骤

在《机器学习实战》这本书中,开发和使用机器学习算法开发应用程序,通常遵循以下的步骤。

  1. 收集数据。我们可以使用很多方法收集样本数据,如:制作网络爬虫从网站上抽取数据、 从RSS反馈或者API中得到信息、设备发送过来的实测数据(风速、血糖等)。提取数据的方法非 常多,为了节省时间与精力,可以使用公开可用的数据源。
  2. 准备输入数据。得到数据之后,还必须确保数据格式符合要求。在这本书中采用的格式是Python语言的List。使用这种标准数据格式可以融合算法和数据源,方便匹配操作。此外还需要为机器学习算法准备特定的数据格式,如某些算法要求特征值使用特定的格式, 一些算法要求目标变量和特征值是字符串类型,而另一些算法则可能要求是整数类型。
  3. 分析输入数据。此步骤主要是人工分析以前得到的数据。为了确保前两步有效,简单的方法是用文本编辑器打开数据文件,查看得到的数据是否为空值。此外,还可以进一步浏览数据,分析是否可以识别出模式;数据中是否存在明显的异常值,如某些数据点与数据集中的其他 值存在明显的差异。通过一维、二维或三维图形展示数据也是不错的方法,然而大多数时候我们 得到数据的特征值都不会低于三个,无法一次图形化展示所有特征。本书的后续章节将会介绍提 炼数据的方法,使得多维数据可以压缩到二维或三维,方便我们图形化展示数据。 这一步的主要作用是确保数据集中没有垃圾数据。如果是在产品化系统中使用机器学习算法 并且算法可以处理系统产生的数据格式,或者我们信任数据来源,可以直接跳过第3步。此步骤需要人工干预,如果在自动化系统中还需要人工干预,显然就降低了系统的价值。
  4. 训练算法。机器学习算法从这一步才真正开始学习。根据算法的不同,第4步和第5步是机器学习算法的核心。我们将前两步得到的格式化数据输入到算法,从中抽取知识或信息。这里 得到的知识需要存储为计算机可以处理的格式,方便后续步骤使用。 如果使用无监督学习算法,由于不存在目标变量值,故而也不需要训练算法,所有与算法相关的内容都集中在第5步。
  5. 测试算法。这一步将实际使用第4步机器学习得到的知识信息。为了评估算法,必须测试算法工作的效果。对于监督学习,必须已知用于评估算法的目标变量值;对于无监督学习,也必须用 其他的评测手段来检验算法的成功率。无论哪种情形,如果不满意算法的输出结果,则可以回到第 4步,改正并加以测试。问题常常会跟数据的收集和准备有关,这时你就必须跳回第1步重新开始。
  6. 使用算法。将机器学习算法转换为应用程序,执行实际任务,以检验上述步骤是否可以 在实际环境中正常工作。此时如果碰到新的数据问题,同样需要重复执行上述的步骤。

好吧,上面都不是我写的,这些都是书上的原内容,我觉得总结得很好,所以就直接拿过来给大家看了。

老板:小韩啊,机器学习你也算是基本入门了。不仅掌握了机器学习的相关术语,还掌握了如何选择机器学习算法和开发机器学习应用程序的步骤,总的来说还是很不错的!

我:谢谢老板夸奖,那加工资不?

老板:你说啥?工作太轻松了?好,那明天就给你安排新的任务,干得好可以考虑加鸡腿!!!

我:溜了溜了,今天就到这里了!


最后,欢迎大家关注我的公众号,有什么事情欢迎大家给我留言!!!

小白的七日之旅

2019-03-27 14:25:01 gzyiCG 阅读数 160
  • 机器学习入门30天实战

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 系列课程包含Python机器学习库,机器学习经典算法原理推导,基于真实数据集案例实战3大模块。从入门开始进行机器学习原理推导,以通俗易懂为基础形象解读晦涩难懂的机器学习算法工作原理,案例实战中使用Python工具库从数据预处理开始一步步完成整个建模工作!具体内容涉及Python必备机器学习库、线性回归算法原理推导、Python实现逻辑回归与梯度下降、案例实战,信用卡欺诈检测、决策树与集成算法、支持向量机原理推导、SVM实例与贝叶斯算法、机器学习常规套路与Xgboost算法、神经网络。

    7605 人正在学习 去看看 唐宇迪

互联网的一个问题就是:信息太多。

对想要学习机器学习的人来说,信息太多也是一种困扰,开放的课程、书籍、框架、开源代码那么多,每套资料都有自己的好处,有人说这个课程好,有人说那个框架最好用。

那么,对新手来说,究竟该从哪个开始学?学哪个合适呢?

一位名叫Giacomo Ciarlini的意大利小哥就发现了个这问题,为了帮老板带新人,他把机器学习领域所需要的知识都整理成了一条机器学习路线图:

从编程和数学开始,逐渐学会各种概念、方法、神经网络,之后研究开源项目,终将成为一代机器学习专家。

就像从新手村一路升级打怪到满级一样,你可以跟着这条路线图,成长为装备齐全、技能全面、经验丰富的大神玩家。

四个学习部分
首先,你需要做点准备才能开始自学机器学习。

提前准备
Python
Jupyter笔记本
数学
机器学习概况

先要会一门编程语言,机器学习界最常用的Python了解一下~

Jupyter笔记本也是常用的工具,不用下载,在Web上就能直接用,可以在线coding,许多重要的应用和教程也是在Jupyter上的,一定要学会。

最后,搞机器学习一定要了解一些数学原理,还要了解一些机器学习的基本知识。

用Scikit-Learn做机器学习
为什么用Scikit-Learn?
端到端的机器学习项目
线性回归
分类
训练模型
支持向量机
决策树
集成学习和随机森林
无监督学习
回顾

之后,安装Scikit-Learn,这是机器学习任务中最完整,最成熟,记录最完整的库之一,然后就能照着路线图把后面线性回归、分类……的都学习实践一遍。

当然,每个知识点小哥都准备了一些参考资料,可以照着资料一步步来。

TensorFlow与神经网络
为什么要用TensorFlow?
TensorFlow启动并运行
ANN - 人工神经网络
CNN - 卷积神经网络
RNN - 循环神经网络
训练网络:最佳实践
自动编码
强化学习
下一步

现在,进入TensorFlow的世界。当然,现在越来越多的开发者认为Facebook出品的PyTorch是一个更好用的框架,不过TensorFlow依然是用户最多的框架。

一些实用资料
机器学习项目
数据科学工具
安利一些博主

现在,最基本的东西你已经掌握了,可以开始看各种丰富的资料,学习各种热门的项目了,记得随时关注最新出现的突破性项目,不然就要跟不上机器学习界飞快的进步和突破了。

最后,里面所有提到的资料课程,GitHub原文都有链接哦。

还有续集

除了机器学习,小哥还在准备商业智能分析和云计算架构师两个领域的学习路线图。

后面还准备出数据可视化、数据收集、数据预处理三个数据相关领域,如果未来需要“转职”可以考虑学习一下。

除了技术相关,小哥甚至还准备推出有效沟通、有影响力的演讲、务实决策三块内容的路线图,真是个技术转管理的全才,35岁以后也不会被淘汰。

在这里插入图片描述
传送门 (怼传送门即可跳转)

欢迎大家加入小编创建的Python行业交流群,有大牛答疑,有资源共享,
有企业招人!是一个非常不错的交流基地!群号:78486745
2018-04-16 16:30:56 yatou2016 阅读数 2650
  • 机器学习入门30天实战

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 系列课程包含Python机器学习库,机器学习经典算法原理推导,基于真实数据集案例实战3大模块。从入门开始进行机器学习原理推导,以通俗易懂为基础形象解读晦涩难懂的机器学习算法工作原理,案例实战中使用Python工具库从数据预处理开始一步步完成整个建模工作!具体内容涉及Python必备机器学习库、线性回归算法原理推导、Python实现逻辑回归与梯度下降、案例实战,信用卡欺诈检测、决策树与集成算法、支持向量机原理推导、SVM实例与贝叶斯算法、机器学习常规套路与Xgboost算法、神经网络。

    7605 人正在学习 去看看 唐宇迪

作为一个在科技界混的小编,为了能够在这道路上不被自己的老板嫌弃,我们必须尽力去自学一系列以后可能用到的技能来武装自己。而在人工智能领域现阶段神经网络,机器学习,深度学习充斥在我们的生活之中,不了解一二真的都不太好意思说自己是这行业内的人了……

但是在自学的过程中,总是会碰到各种各样的难题,比如从零开始学习,不知道从何入手,找了本教材发现第二章开始就看不懂了;缺少基础知识,被一些教程略过的“常识性”问题卡住;遇到问题不知道怎么寻找解决方案....

小白究竟要怎么自学?别着急,看完今天小编送的资料,这些疑问就统统解决!

小编今天要送的资料包括三部分,第一部分是精心给数学基础不太好的朋友准备的,毕竟要学好机器学习的理论,数学的基础得过关,高数线代概率论至少要知道点吧,不然学起理论真的会一脸懵逼~ 

第二部分则是给python基础不太好的,或者是python小白的朋友准备的,如果觉得自己对python已经很熟悉的朋友可以跳过这个部分。

第三部分就是深度神经网络的内容了你想知道的关于深度神经网络的一切,都可以从里面学到。值得一提的是,里面还有matlab的机器学习教程,这绝对是干货啊!

无论你是小白,还是有一定的基础,这套资料都是很不错的!资料中有很多视频教学,比起看书,视频教学最大的好处是,很多讲师都是在机器学习或者数据挖掘领域做过很多项目的,经验丰富的人,他们会传授很多自己看书学不到的,有用的经验。所以拿了资料的朋友可以认真学习了

下面我们就来看看资料内容

第一部分,数学基础(共10课时)

第二部分,python基础与数据分析

1.python基础篇教程(22课)

2.python入门与进阶

第三部分,深度学习算法与编程实践

1.编程入门

(1)matlab与机器学习入门 进阶和提高 (共13课时,内附练习、matlab代码和算法包,还有ppt课件)

(2)深度学习 tensorflow教程(是莫烦的教学视频,最大特点是简单易懂)

2.基础精讲

(1)原理精讲班 (共12课时)

(2)基础一(个人觉得挺不错的 ,讲的很详细)

(3)基础二(紧接着基础一)

3.深度学习

(1)深度神经网络深入研究 (共20课时,内附ppt课件)

(2)深度神经网络深入与强化 (共10课时,内附ppt课件)

看完资料介绍,有没有一种超级想要学习的冲动???在大数据和人工智能发展那么迅猛的今天,怎么能不武装一下自己呢?

资料太多,所以小编已经打包上传至网盘了,下载链接:https://pan.baidu.com/s/1wS3XPP33wSATlf940g3C9g 密码:1dcw(如链接失效,请前往公众号下载:OFweek人工智能)

2018-09-14 11:26:41 wuzhiwuweisun 阅读数 473
  • 机器学习入门30天实战

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 系列课程包含Python机器学习库,机器学习经典算法原理推导,基于真实数据集案例实战3大模块。从入门开始进行机器学习原理推导,以通俗易懂为基础形象解读晦涩难懂的机器学习算法工作原理,案例实战中使用Python工具库从数据预处理开始一步步完成整个建模工作!具体内容涉及Python必备机器学习库、线性回归算法原理推导、Python实现逻辑回归与梯度下降、案例实战,信用卡欺诈检测、决策树与集成算法、支持向量机原理推导、SVM实例与贝叶斯算法、机器学习常规套路与Xgboost算法、神经网络。

    7605 人正在学习 去看看 唐宇迪

说实话,老板让学机器学习,机器学习最火的库之一就是scikit learn了,可是它究竟是个什么东西,我也不知道,慢慢学吧。

QT1:

这里说一些废话了。最近一直在ubuntu和windows 上安装CUDA和CUDNN,这俩其实就是用来让开发者调用GPU进行算法加速的。尤其对大型的神经学习网络,有GPU加速比CPU快上好多倍。说做就做,我一定要安装上这两个东西,因为后续也可以在深度学习框架Pytorch上愉快的进行大型神经网络的学习了。

But.......................经过两天的折腾,博主的心态崩了,时间很宝贵,不能在这上边浪费时间了,老板还有任务呢。于是上网去查怎么 安装没有GPU加速的CPU版本Pytorch,成功安装。下一步就是安装scikit learn库了,scikit learn库需要下面几个依赖库的支持:

  • Python (>= 2.6 or >= 3.3)
  • NumPy (>= 1.6.1)
  • SciPy (>= 0.9)

这么多的库,安装起来又是一大堆的麻烦。但是,最直接的 是安装anaconda, 里边已经包含了一大堆的库,当然 这包含我们需要的sklearn库,真的是我这种不愿意配置环境的福音了!!!

打开Anaconda Navigator (导航),在Environments(管理版本和包的)可以看到numpy, scipy, scikit-learn, matplotlib等库都已经安装好了:

 

QT2:

前面一直纠结于安装cuda和cudnn,就是为了用gpu给深度神经学习加速, 就在想sklearn这个学习框架需不需要gpu加速啊,它到底有没有深度神经网络学习模块啊,然后我貌似发现了一个大秘密.........

首先,关于sklearn这个学习框架需不需要gpu加速这个问题,这篇博客给出的答案是否定的。

博客地址:https://www.wukong.com/answer/6502778705033560334/

scikit-learn目前只支持cpu,不支持gpu。

两点原因:

1.scikit-learn不包括深度神经网络模型,这让scikit-learn有条件不基于GPU加速。

2.scikit-learn的设计目标是跨平台、易于安装,这让scikit-learn有意识地不基于GPU加速。

看到这里怎么莫名有点高兴呢, 可能是因为前边没有安装gpu加速吧,省事了,但是为了pytorch的深度学习,gpu是跑不掉了。

 

sklearn到底有没有深度神经网络模型,前边已经说没有了,然后这篇知乎给出了更具体的答案。

知乎地址:https://www.zhihu.com/question/24738573

参考官方给出的sklearn学习文档API Reference - scikit-learn 0.18.1 documentation可以看到,sklearn的0.18.1有神经网络模型,0.18.0也支持。但是只有BernoulliRBM和MLP,具体是neural_network.BernoulliRBM ,neural_network.MLPClassifier,neural_network.MLPRgression并没有深度神经网络模型。sklearn的具体Neural Network模型参考下面的博客,写的很好:

https://blog.csdn.net/gamer_gyt/article/details/51255448

 

以上是我在安装sklearn心里一直迷惑的问题,一是学习这个框架你不需要纠结于必须安装GPU加速,即在你不做深度神经学习的前提下,CUDA和CUDNN不是必须的;二是这个框架包含的神经网络模型有限,可以作为初学者学习神经网络的工具,想学习深度的神经网络,换个别的框架吧。

疑惑暂时就这些,下面就是进入正式学习sklearn了。

 

附:安装sklearn链接

1.官网的链接:http://scikit-learn.org/stable/install.html

2.简书上比较详细的教程:https://www.jianshu.com/p/4e772ae08a4c

3.简书上比较详细的教程:https://www.jianshu.com/p/21b758541825

4.https://www.cnblogs.com/magle/p/5638409.html

5.前面提到的依赖库,包括windows下最常用的其他依赖库的安装包都有!!!网址:https://www.lfd.uci.edu/~gohlke/pythonlibs/

6.最直接最方便的是Anaconda,都给你装好了。

最后,安装成功查看sklearn的命令是:

1  >>> import sklearn
2  >>> sklearn.__version__
3  '0.17.1'

 

2019-09-09 20:06:19 qq_38418700 阅读数 42
  • 机器学习入门30天实战

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 系列课程包含Python机器学习库,机器学习经典算法原理推导,基于真实数据集案例实战3大模块。从入门开始进行机器学习原理推导,以通俗易懂为基础形象解读晦涩难懂的机器学习算法工作原理,案例实战中使用Python工具库从数据预处理开始一步步完成整个建模工作!具体内容涉及Python必备机器学习库、线性回归算法原理推导、Python实现逻辑回归与梯度下降、案例实战,信用卡欺诈检测、决策树与集成算法、支持向量机原理推导、SVM实例与贝叶斯算法、机器学习常规套路与Xgboost算法、神经网络。

    7605 人正在学习 去看看 唐宇迪

前端机器学习——线性回归传送门

前端实现机器学习

机器学习越来越火,而作为一个不务正业的前端程序员!我当然要看一下这个机器学习,是个什么东西。

先说做什么

我们用机器学习可以做什么呢,他和我们前端有什么关系呢?
比方说我们做一个数据管理平台,老板要看数据情况,得到一些规律或者信息(几月赚钱多啊,卖啥赚钱多啊,下个月销售量估计怎样啊),这个时候后段给了你以前每一天的各种数据,某某日,啥啥啥,咋咋地买的好不好。我们不可能就给老板看这些点,像个芝麻烧饼一样。所以我们就需要用到机器学习,将这些点拟合成一条合适的线(最简单的线性回归),就显得很好。(别问为啥不是后端返回来线的截距和斜率,问就是自食其力),下面的我就举一个小栗子,写一个小demo,通过你不断选择色块,分析你喜欢的颜色特征,来预测在下一个色块的选择中你的选择是?在这里插入图片描述

再说怎么做

我是照着python代码手撸的js版本,其实没有什么难度,js与python相比,由于没有矩阵,我使用的是二维数组遍历进行运算的,其他也没什么,下面话不多说,直接贴代码。

python代码

// python代码
import numpy as np

def sigmoid(z):
   sigmoid = 1.0 / (1.0 + np.exp(-z))
   return sigmoid

# 梯度方向
def gradient(X, h, y):
   gradient = np.dot(X.T, (h - y)) / y.shape[0]
   return gradient

# 逻辑回归过程
def Logistic_Regression(x, y, lr=0.05, count=200):
   intercept = np.ones((x.shape[0], 1)) # 初始化截距为 1
   x = np.concatenate((intercept, x), axis=1)
   w = np.zeros(x.shape[1]) # 初始化参数为 0
   for i in range(count): # 梯度下降迭代
       z = np.dot(x, w) # 线性函数
       h = sigmoid(z)
       g = gradient(x, h, y) # 计算梯度
       w -= lr * g # 通过学习率 lr 计算步长并执行梯度下降

   return w # 返回迭代后的梯度和参数
//这是我手动选择色块得到的假数据,为什么是三维呢?因为我只存了两个色块三原色的差值
x = np.array([
   [-255, -255, -255],
   [-12, 43, -89],
   [-42, -25, 102],
   [7, 202, 81],
   [142, -67, -120],
   [100, 52, -6],
   [-19, -41, -24],
   [-108, 179, 78],
   [-192, 166, 27],
   [80, -30, -47],
   [53, 38, 140]
])
y = np.array([1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0])
w = Logistic_Regression(x, y)

javascript代码

// js代码
// 这个是假数据,注释掉了,因为把它整体封装成了一个方法
// const x = [
//     [-255, -255, -255],
//     [-12, 43, -89],
//     [-42, -25, 102],
//     [7, 202, 81],
//     [142, -67, -120],
//     [100, 52, -6],
//     [-19, -41, -24],
//     [-108, 179, 78],
//     [-192, 166, 27],
//     [80, -30, -47],
//     [53, 38, 140]
// ]
// const y = [1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0]
// const z = [-30, 100, -66]
// 入参x是之前色块的数据矩阵(条件),y是选择矩阵(结果),z是最后选择时色块的色差(最新条件)
export const MySigmod = function(x, y, z) {
    //sigmod函数
    const sigmod = function(z) {
        let c = []
        for(let i = 0; i < z.length; i++) {
            c.push(1/(1+Math.exp(-z[i])))
        }
        return c
    }
    //梯度方向
    const gradient = function(x, h, y) {
        let g = []
        for(let j = 0; j < x[0].length; j++) {
            let c = 0
            for(let i = 0; i < y.length; i++) {
                c = c + x[i][j] * (h[i] - y[i])
            }
            c = c / y.length
            g.push(c)
        }
        return g
    }
    //逻辑回归过程
    function Logistic_Regression(x, y, lr=0.05, count=500) {
        let w = []
        x.map(item => {
            item.push(1)
        })
        for(let i = 0; i < x[0].length; i++) {
            w.push(0)
        }
        for(let m = 0; m < count; m++) {
            let z = []
            for(let i = 0; i < x.length; i++) {
                let item = 0
                for(let j = 0; j < w.length; j++) {
                    item = item + x[i][j] * w[j]
                }
                z.push(item)
            }
            let h = sigmod(z)
            let g = gradient(x, h, y)
            for(let i = 0; i < w.length; i++) {
                w[i] = w[i] - lr * g[i]
            }
            // l = loss(h, y)
        }
        return w
    }

    let w = Logistic_Regression(x,y)
    //使用求出的权重系数尽心选择
    let p = w[0]
    for(let i = 0; i < z.length; i++) {
        p = p + z[i] * w[i]
    }
    p = 1/(1+Math.exp(p))
    return p
}

就算大功告成啦,看一下能不能成功呢!我之前选的都是浅色,所以应该选左面。估计结束!
在这里插入图片描述
没得问题,很成功哦!在这里插入图片描述

再说为什么

那么它的原理是什么呢,他怎样知道我想要的是浅色色块的呢。
这个就是用到了机器学习中第二基础的算法——逻辑回归(我自己觉得是第二基础,第一基础我觉得是线性回归,就只是我觉得啊~~),逻辑回归是一个名为回归实为分类的算法,用来二分类,输出的结果是一个概率(选某一边的概率),将之前的选择变成概率,拟合到sigmod函数上,而sigmod函数如下:
g(z)=1(1+ez) g(z) = \frac{1}{(1+e^{-z})}\quad
而这个z就是我们熟悉(或者不熟悉)的线性回归函数模型了:
z=w0x0+w1x1+w2x2+....+wnxn z = w_0x_0+w_1x_1+w_2x_2+....+w_nx_n
这就是sigmod函数的图像,他的输入范围是正无穷到负无穷,输出范围是0到1,我们就用它来代表我们估计的概率,大于0.5我猜选右面,小于0.5我猜选左面(这个0.5不是定死的,在医疗中或者其他要求误差较严重的方面,这个值完全可以是0.3,0.2一类,反正输出的是概率)
在这里插入图片描述
那么我们就只需要求出这一系列的w就好啦,求得了这些系数,我们的公式就完整了,可以根据输入输出一个概率了!
那么这个系数怎么求呢?
首先我们假设w全是0,我们可以求出一个概率,这个概率和真实情况有了差距,怎么表示这种误差呢?在数学里使用似然函数,似然函数的值越大,误差越小。似然函数如下:
i=1mp(yixi,θ) \quad \prod_{i=1}^m p(y_i|x_i,\theta)
这个公式表示参数?在给定输出为x的情况下的似然函数等于,在给定参数为?和x{i},的情况下,取y{i}的概率。注意:此处的竖杠并不表示条件件概率,仅仅是一种取该值的含义。
其中P分为两种情况,P(y=0)=g(z)和P(y=1)=1-g(z),那么我们通过整合把它变成一个式子,
L(θ)=i=1mp(yixi,θ)=i=1mg(zi)yi(1g(zi))1yi L(\theta)=\quad \prod_{i=1}^m p(y_i|x_i,\theta)=\quad \prod_{i=1}^mg(z_i)^{y_i} (1-g(z_i))^{1-y_i}
其中g()就是上面的sigmod函数,z等于w{i}x{i}的累加,θ是w{i}的矩阵,然后将似然函数变成对数似然函数:
l(θ)=i=1myilogg(zi)+(1yi)log(1g(zi)) l (\theta)= \sum_{i=1}^m y_i\log g(z_i) +(1-y_i)\log (1-g(z_i))
将这个式子称以-1/m变成梯度下降函数,然后对各个权重求导,得到对应的梯度(最快下降方向):
l(θj)=1mi=1m(ziyi)xij l (\theta_j)= -\frac{1}{m}\quad \sum_{i=1}^m (z_i-y_i)*x_{ij}
具体求导过程可以去机器学习算法 — 逻辑回归及梯度下降大神的博客那里看下。
现在我们也知道了梯度的公式,然后不断执行直到找到这个函数结果几乎不变就是我们想要的点了。

机器学习资源积累

阅读数 1704

没有更多推荐了,返回首页