简明python教程电子书机器学习数学

404 Not Found在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
点击阅读原文
机器学习应该准备哪些数学预备知识?
日 发布,来源:
本文原作者Robin Shen ,本文整理自作者在知乎《机器学习应该准备哪些数学预备知识?》问题下的回答。
原题目如下:
机器学习应该准备哪些数学预备知识?
数据分析师,工作中经常使用机器学习模型,但是以调库为主。自己一直也在研究算法,也裸写过一些经典的算法。最近在看PRML这类书籍,感觉有点吃劲,主要是公式推导看不懂,很多数学符号不知其意。也特地学过线性代数、微积分等,但是然并卵,还是看不懂大段的公式以及那些神奇的矩阵计算~机器学习新手,想前来问下,有没有哪些数学知识是可以弥补这一类缺陷的?能否具体的说一些知识点或者相关的文章和书籍?
2012 年之后,随着深度学习的浪潮卷来,大家逐渐认可了神经网络 / 深度学习这个东西,都知道它在很多应用场景下面表现得很好。但是,它常常被人诟病的一点就是,就算它表现很好,却没有一个很好的理论解释。
相比之下,很多算法虽然实际表现一般,但是在理论解释这一方面就远胜神经网络了。典型的例子么,自然就是我们耳熟能详的线性回归算法啦。所谓的线性回归,简单地说,就是尝试用一条直线来拟合世间万物。虽然听起来不太靠谱,实际上效果也一般,但是这并不妨碍研究人员在过去的几十年间,怀着满腔热情,发了大量的理论论文研究这个基本问题(不好意思,我也发了两篇)。这就像一个 PhD 笑话里面说的那样,Theory is when one knows everything but nothing works. Practice is when everything works but nobody knows why.
真说起来嘛,倒也不是大家觉得线性回归多么有用,我觉得主要还是直线比较好分析,而神经网络比较难,所以理论工作就少一些。这个现象叫做 Streetlight effect,如下图。
笼统地说,原理和基础都在数学这边,当然有很多偏应用和软件使用的技术,例如“深度学习调参”等,这些报个培训速成班就能学会的技术含量不那么高的东西,不在讨论范围内。
这里要讨论的,是如何系统的学习,然后自己能编出这机器学习或深度学习的程序或软件--我想,这才能称为一个合格的机器学习、数据科学家。
1.微积分(求导,极限,极值)和线性代数(矩阵表示、矩阵运算、特征根、特征向量)是基础中的基础,某篇图像分割1w+引用的神文核心思想便就求解构造矩阵的特征向量;
2.数据处理当然需要编程了,因此C/C++/Python任选一门(推荐Python,因为目前很多库和Library都是用python封装),数据结构可以学学,让你编程更顺手更高效,但是编程不是数据处理的核心。
当然了,楼主所在的图像处理界,熟练使用matlab或者Python调用opencv库是必要条件,但是again他们只是工具,业余时间自学,多练练就没问题。有同学问用R行不行,补充一点,用什么编程语言很大部分取决于你的核心算法会调用什么已有的库函数,比如楼主的科研里面核心算法往往是MIP(混合整数规划)问题需要调用Cplex或Gurobi库函数,因此C/C++/Python/Java这些和Cplex接口良好的语言都可以拿来用,这时候R就别想了。(更新:最新Gurobi版本支持R)
另外虽然图像处理界一些open-source的code都用C++写的,但是鉴于使用方便都会提供Python的接口,因此需要用到这些code的话,用Python调用比较方便;但是,如果是高阶骨灰级玩家,需要修改甚至自己写源代码,那么还是推荐C/C++,因为他们的速度最快。
通常高校都会有算法类的课程,会概述各类算法的基础和应用,其中包括:精确算法、近似算法、启发式算法、演化算法、递归算法、贪婪算法等待,还有各类优化算法。
算法非常核心,想必大家都听说过算法工程师这个职位。
关于数学模型和算法的区别、联系,参见:
【学界】整数规划精确算法/近似算法/(元)启发算法/神经网络方反向传播等算法的区别与关联(http://t.cn/RlNoJ19)
1.概率论+统计(很多数据分析建模基于统计模型)、统计推断、随机过程等
2.线性规划+凸优化(或者只学一门叫numerical optimization,统计、机器学习到最后就是求解一个优化问题)、非线性规划等
3.数值计算、数值线代等
当年我是在数学系学的这门课,主要是偏微分方程的数值解。
但我觉得其开篇讲的数值计算的一些numerical issue更为重要,会颠覆一个数学系出身小朋友的三观。(原来理论和现实差距可以这么大!)
Conditional number, ill-conditioned problem,会让你以后的编程多留个心眼。
恭喜你,到这里,你就可以无压力地学习Machine Learning这门课了(其实机器学习,通篇都是在讲用一些统计和优化来做clustering 和 classification这俩个人工智能最常见的应用)。并且你就会发现,ML课中间会穿插着很多其他课的内容。恩,知识总是相通的嘛,特别是这些跨专业的新兴学科,都是在以往学科的基础上由社会需求发展而来。
到这里,其实你已经能看懂并且自己可以编写机器学习里面很多经典案例的算法了,比如regression,clustering,outlier detection。
关于优化类课程的综述,欢迎关注我的专栏:
[运筹帷幄]大数据和人工智能时代下的运筹学 - 知乎专栏
原文链接:http://t.cn/RlNoO3P
运筹学(最优化理论)如何入门? - 知乎
原文链接:http://t.cn/RlNoHiM
学到Mid-level,就已经具备绝大部分理论基础了。然后做几个实际项目,就能上手然后就可以“吹嘘”自己是搞机器学习的,就能找到一份工作了。
但是要读Phd搞机器学习的科研,那么高阶课程必不可少,而且同一个topic你需要上好几门课,并且你博士的课题,很可能只是一本书中一个章节里面一小节里讲的算法,去改进他。
比如,楼主的博士课题就是mixed linear programming + discrete graphical models + markov random fields + regression + clustering + segmentation。
再高阶的课程,就是比较specific的课程了,可以看你做的项目或者以后的concentration再选择选修,比如:Probabilistic Graphical Models(概率图模型), Integer Programming(整数规划) ,计算机视觉,模式识别,视频追踪,医学图像处理,增强学习,深度学习, 神经网络,自然语言处理,网络信息安全,等等等等。
深度学习:目前非常火,打败了非常多几十年积累起来的经典方法。
增强学习:也很火,游戏AI、自动驾驶、机器人等等,它都是核心。
概率图模型:深度学习之前非常popular的“学习”方法,有严格的数学模型和优美的算法,虽然目前被前俩者盖过了风头,但是依然有它的立足之处。什么?你不知道最近用PGM发了篇Nature,打败了CNN?快看下面:
Robin Shen:如何评价 Vicarious 在 Science 上提出基于概率图模型(PGM)的 RCN 模型?
原文链接:http://t.cn/RlNoFhH
再比如有用偏微分方程做图像处理的(比较小众),那么这时候你肯定要去学一下偏微分方程了,大都是以科研为主导的。
科研嘛,为了发文章,就是要尝试前人没尝试过的方法,万一效果不错呢,就是一篇好paper了,对吧。
附上顶尖会议排名,共勉:
国际“顶尖”计算机视觉、机器学习会议大搜罗--附排名&接收率
原文链接:http://t.cn/RKd4jee
互联网教学资源
书目没有特别推荐的,但是建议看英文原版。
另外直接翻墙Youtube看视频课程,很多国际知名教授都很无私地把自己上课的视频放在youtube上免费学习(搜索我上面列出的科目名字)。如果确实要楼主推荐,那就推荐海德堡大学历史上最年轻的教授 Fred的机器学习视频(我基本都看过)(http://t.cn/RlNKGop)
另外一个教授给你上课的时候,开头一般是会推荐书给你的(如果你确实喜欢看书的话)。当然了,翻墙是楼主suppose你们需要拥有的基本生存技能。
(注:以下再推荐一些视频,仅受之以渔,多为graduate course)
Machine Learning by Prof. Nando de Freitas, 此视频是其在UBC时13年所录,后来跳槽去牛津计算机系了。
原文链接:http://t.cn/RlNKEyk
Deep learning at Oxford 2015
by Prof. Nando de Freitas, 跳槽到牛津所录。
原文链接:http://t.cn/RwgbKNb
Probabilistic Graphical Models by Daphne Koller, 斯坦福大学计算机系教授
原文链接:http://t.cn/RlNKgpB
-----------
等的就是你,真的超有趣!高能金融抱团群发车啦~加我拉你进群呦算法数学之美微信公众号欢迎赐稿稿件涉及数学、物理、算法、计算机、编程等相关领域。稿件一经采用,我们将奉上稿酬。投稿邮箱:math_商务合作:联系微信号hengzi5809
我要该,理由是:
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)机器学习中的数学
觉得有用的话,欢迎一起讨论相互学习~
原创文章,如需转载请保留出处
本博客为七月在线邹博老师机器学习数学课程学习笔记
对于随机变量X,X的K阶原点矩为 \[E(X^{k})\]
X的K阶中心矩为 \[E([X-E(X)]^{k})\]
期望实际上是随机变量X的1阶原点矩,方差实际上是随机变量X的2阶中心矩
变异系数(Coefficient of Variation):标准差与均值(期望)的比值称为变异系数,记为C.V
偏度Skewness(三阶)
峰度Kurtosis(四阶)
偏度与峰度
利用matplotlib模拟偏度和峰度
计算期望和方差
import matplotlib.pyplot as plt
import math
import numpy as np
def calc(data):
n=len(data) # 10000个数
niu=0.0 # niu表示平均值,即期望.
niu2=0.0 # niu2表示平方的平均值
niu3=0.0 # niu3表示三次方的平均值
for a in data:
niu2 += a**2
niu3 += a**3
sigma = math.sqrt(niu2 - niu*niu)
return [niu,sigma,niu3]
\[niu=\bar{X_{i}}即期望\]
\[niu2=\frac{\sum_{i=1}^{n}X_{i}^{2}}{n}\]
\[niu3=\frac{\sum_{i=1}^{n}X_{i}^{3}}{n}\]
sigma表示标准差公式为\[\sigma=\sqrt{E(x^{2})-E(x)^{2}}\] \[用python语言表示即为sigma = math.sqrt(niu2 - niu*niu)\]
返回值为[期望,标准差,\(E(x^{3})\)]
PS:我们知道期望E(X)的计算公式为\[E(X)=\sum_{i=1}^{n}p(i)x(i)-----(1)\]这里我们X一个事件p(i)表示事件出现的概率,x(i)表示事件所给予事件的权值.
我们直接利用\[E(x)=\bar{X_{i}}----(2)\] 表示期望应当明确
(2)公式中\(X_{i}是利用numpy中的伪随机数生成的,其均值用于表示期望\)
此时(1)公式中对事件赋予的权值默认为1,即公式的本来面目为\[E(x)=\bar{(X_{i}*1)}\]
计算偏度和峰度
def calc_stat(data):
[niu, sigma, niu3]=calc(data)
n=len(data)
niu4=0.0 # niu4计算峰度计算公式的分子
for a in data:
niu4 += a**4
skew =(niu3 -3*niu*sigma**2-niu**3)/(sigma**3) # 偏度计算公式
kurt=niu4/(sigma**4) # 峰度计算公式:下方为方差的平方即为标准差的四次方
return [niu, sigma,skew,kurt]
利用matplotlib模拟图像
if __name__ == "__main__":
list(np.random.randn(10000)) # 满足高斯分布的10000个数
data2 = list(2*np.random.randn(10000))
# 将满足好高斯分布的10000个数乘以两倍,方差变成四倍
data3 =[x for x in data if x&-0.5] # 取data中&-0.5的值
data4 = list(np.random.uniform(0,4,10000)) # 取0~4的均匀分布
[niu, sigma, skew, kurt] = calc_stat(data)
[niu_2, sigma2, skew2, kurt2] = calc_stat(data2)
[niu_3, sigma3, skew3, kurt3] = calc_stat(data3)
[niu_4, sigma4, skew4, kurt4] = calc_stat(data4)
print (niu, sigma, skew, kurt)
print (niu2, sigma2, skew2, kurt2)
print (niu3, sigma3, skew3, kurt3)
print (niu4, sigma4, skew4, kurt4)
info = r'$\mu=%.2f,\ \sigma=%.2f,\ skew=%.2f,\ kurt=%.2f$' %(niu,sigma, skew, kurt) # 标注
info2 = r'$\mu=%.2f,\ \sigma=%.2f,\ skew=%.2f,\ kurt=%.2f$' %(niu_2,sigma2, skew2, kurt2)
info3 = r'$\mu=%.2f,\ \sigma=%.2f,\ skew=%.2f,\ kurt=%.2f$' %(niu_3,sigma3, skew3, kurt3)
plt.text(1,0.38,info,bbox=dict(facecolor='red',alpha=0.25))
plt.text(1,0.35,info2,bbox=dict(facecolor='green',alpha=0.25))
plt.text(1,0.32,info3,bbox=dict(facecolor='blue',alpha=0.25))
plt.hist(data,100,normed=True,facecolor='r',alpha=0.9)
plt.hist(data2,100,normed=True,facecolor='g',alpha=0.8)
plt.hist(data4,100,normed=True,facecolor='b',alpha=0.7)
plt.grid(True)
plt.show()
图形表示的是利用numpy随机数生成函数生成的随机数的统计分布,利用matplotlib.pyplot.hist绘制的直方图.即是出现数字的分布统计,并且是归一化到0~1区间后的结果.
即横轴表示数字,纵轴表示在1000个随机数中横轴对应的数出现的百分比.若不使用归一化横轴表示数字(normed=False),纵轴表示出现的次数.
若不使用归一化--纵轴表示出现次数
关于matplotlib.pyplot.hist函数
n, bins, patches = plt.hist(arr, bins=10, normed=0, facecolor='black', edgecolor='black',alpha=1,histtype='b')
hist的参数非常多,但常用的就这六个,只有第一个是必须的,后面四个可选
arr: 需要计算直方图的一维数组
bins: 直方图的柱数,可选项,默认为10
normed: 是否将得到的直方图向量归一化。默认为0
facecolor: 直方图颜色
edgecolor: 直方图边框颜色
alpha: 透明度
histtype: 直方图类型,‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’
n: 直方图向量,是否归一化由参数normed设定
bins: 返回各个bin的区间范围
patches: 返回每个bin里面包含的数据,是一个list
阅读(...) 评论()苹果/安卓/wp
积分 711, 距离下一级还需 89 积分
权限: 自定义头衔, 签名中使用图片
道具: 涂鸦板, 彩虹炫, 雷达卡, 热点灯, 显身卡, 匿名卡, 金钱卡, 抢沙发下一级可获得
权限: 隐身
购买后可立即获得
权限: 隐身
道具: 金钱卡, 变色卡, 彩虹炫, 雷达卡, 热点灯, 涂鸦板
开心签到天数: 3 天连续签到: 1 天[LV.2]偶尔看看I
Youtube最受欢迎的python专家sentdex讲授的《利用python进行机器学习实战》课程。
强力推荐!!!
机器学习介绍:
<font color="#)机器学习解决的问题概括的讲,就是模糊的,不确定的问题;
比如说要计算机去做上千亿上万亿次四则运算,要去做一个排序或者选择,哪怕数据很大很精细,但这样的问题也是不需要用到机器学习的,因为这种问题本身是确定的,这种确定往往分两个方面:a)元方法的确定。b)计算目的的确定,或者说是算法结果的确定。
而机器学习不同,机器学习解决的问题和智慧生物解决的很多问题相似,比如说:分类、关联、归纳、总结决策,如果我们要让计算机去分辨水果的种类,去预测疾病的发病率,这些问题就需要机器学习做了,回到刚才那两个方面,对于机器学习(模糊计算问题)来说:a)元方法不确定,对于分类,有很多截然不同的思维方法,这些思维方法的不同源于对于智慧生物分类算法的模拟不同,不像诸如排序算法,其本质大多基于对于给定模型的二分决策流程。b)计算目的不确定,这里说的计算目的不确定,往往是说你基于某种机器学习算法的某种机器学习任务的模型是不确定的,比如说你要分类,但是这时候谈的不仅仅是分类这个领域了,而是基于你这个数据集上的这种机器学习分类算法上加上这样的参数的分类任务了,貌似和前面一点有点相似,但是不同的地方更多一些。
再之,机器学习任务所期望的目标(结果)往往是动态的,比如说某些机器学习任务要求你给一个预测疾病的模型(注意:其实你这个机器学习的任务是“给出模型”,通过这个模型再预测具体的疾病实例是后来的事情了,于是对于计算这个模型,往往再机器学习任务的几个阶段对其的要求是不同的,随着机器学习对于训练样例的分析和计算,可能你这个模型时时刻刻都在变,以前那个模型预测不发病的测试样例可能用现在这个模型变得要发病了);而非机器学习任务却不然,比如排序,不管你的数据怎么变,你排序的“模型”还是基于布尔或者多值的决策的,是不会变的。讨论这一点,是为了说明,有一些看来不是“模糊不确定问题”的问题为什么也要用机器学习来解决,预测疾病是模糊的,但是比如搜索引擎的搜索排名(所谓的Rank问题)其实看来应该是一个简单的“排序”问题,但是却有很多公司用机器学习做,原因是对于解决这种“网页网站排序”的模型是在变的,归根结底还是期望的目标在变得。
<font color="#)要机器学习所使用的方法;
由于上一点谈到元方法的不确定,所以,虽然机器学习要解决的任务与智慧生物解决的问题相似,但未必机器学习算法底层上所使用的计算思维和智慧生物是相似的,当然,机器学习和智慧生物在解决问题的宏观层面是一致的,比如强化学习,监督和非监督学习,这些思维是一致的。机器学习算法在底层上可能更多得用到统计学或者概率分布上的一些基本方法。比如贝叶斯,比如所谓的一些分类方法大多数是基于训练样例的概率分布来计算的。
<font color="#)机器学习和其他领域的交叉;
简单的说:机器学习可以大约的解释成数据挖掘+人工智能,数据挖掘所描述的是机器学习偏统计,偏数学的一部分;人工智能说的是机器学习偏仿生的一部分。
11:05:39 上传
11:06:18 上传
下载链接:
谢谢分享。
<font color="#2233cby 发表于
Youtube最受欢迎的python专家sentdex讲授的《利用python进行机器学习实战》课程。
强力推荐!!!
可以留个百度云?
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
如有投资本站或合作意向,请联系(010-);
邮箱:service@pinggu.org
投诉或不良信息处理:(010-)
论坛法律顾问:王进律师

我要回帖

更多关于 python与机器学习实战 的文章

 

随机推荐