开篇前话
这篇笔记适合机器学习初学者,我是加入了一个DC算法竞赛的一个小组,故开始入门机器学习,希望能够以此正式进入机器学习领域。
在网上我也找了很多入门机器学习的教程,但都不让人满意,是因为没有一个以竞赛的形式来进行教授机器学习的课程,但我在DC学院上看到了这门课程,而课程的内容设计也是涵盖了大部分机器学习的内容,虽然不是很详细,但能够系统的学习,窥探机器学习的“真身”。
学完这个我想市面上的AI算法竞赛都知道该怎么入手了,也就进入了门槛,但要想取得不错的成绩,那还需努力,这篇仅是作为入门课已是足够。虽然带有点高数的内容,但不要害怕,都是基础内容,不要对数学产生恐慌,因为正是数学造就了今天的繁荣昌盛。
目录
1.机器学习概论
1.1机器学习案例
- 可以像高手一样玩游戏
- 可以进行艺术创作
- 无人驾驶领域的应用
- 语音交互
- 商品推荐
1.2人工智能的基本内容
- 基本技术:知识表示、推理、搜索、规划
-
主要研究方向和应用:
- 机器感知:机器视觉、听觉、翻译、自燃语言理解
- 机器思维:机器推理
- 机器学习:符号学习、连接学习
- 机器行为:智能控制
- 计算智能:神经网络、模糊系统、进化计算
- 分布智能:多个体、群体智能
- 数据挖掘:知识发现、大数据
- 情感计算:情感识别、人机交互
- 脑机借口:意念识别、控制、疾病治疗
- 智能应用:博弈、自动定理、自动程序设计、专家系统、智能决策、智能机器人、交通、电力、建筑、设计等。
1.3机器学习分类
-
监督学习(supervised learning):
1.在监督学习中,每组训练数据都有已知的特征(feature)及其对应的标记。
2.目标就是根据这些训练数据,寻找正确的特征与标记之间的对应关系。
3.在建立模型的过程中,监督学习将预测的结果与训练数据的标记结果作比较,不断的调整模型,直到准确率达到预期值。
-
非监督学习
1.在非监督学习中,每组训练数据只有都有已知的特征,并未做任何标记。
2.需要通过模型找到数据中隐藏的结构。
-
增强学习(reinforcement learning)
又称强化学习,是一种基于奖励(reward)或惩罚(punish),从而使模型不断调整自己来达到预期效果的方法。
-
其它
2.机器学习基础
2.1Numpy和Pandas的使用
这两种都是Python库
- Numpy:Numpy适用于处理基本的数值计算,其中使用最多的就是矩阵计算功能。
- Pandas:Pandas库的数据处理功能建立在Numpy库的基础之上,两者相辅相成。Pandas适用于处理包含不同变量类型(整数、浮点)的表格数据,和Matlab不同,Python的索引是从0开始的。
2.2Numpy的使用
导入Numpy的包import numpy
- 定义数组:a=numpy.array([1,2,3])
- 获取数组长度:a.shape --输出不确定的一纬序列。
- 获取数组元素:a[0] a[-1]表示最后一个元素
- 二维数组:a=numpy.array(([1,2,3],[4,5,6])) 2行3列数组
这时a.shape输出(2,3)表示2行3列。 - 全0的二维数组:a=numpy.zeros([2,3])
- 全1的二维数组:a=numpy.ones([2,3])
- 全是某个数组:a=numpy.full([2,3],7)
- 生成单位矩阵(行列相同,对角线为1,其它为0的举证):a=numpy.eye(10)
- 生成随机矩阵:a=numpy.random.random([2,3])
- 区域矩阵获取:a=a[0:2,0:2]表示从第1行到第2行,不包括第3行开始,取第1列到第2列但不包括第3列的矩阵。a[1:]冒号后面不接的话就是到最后一项。
- 跳着获取索引:a=a[::2]表示间隔2个值获取。
- 自定义索引:
b=numpy.array([1,2,4])
a[b]表示获取a中的第2,3,5位的数字。 - 查看数据类型:a.dtype
- 强制类型转换:a.dtype=int
- 幂次方:a**b 表示a的b次方。
- 开根号:numpy.sqrt(a)
- 举证乘法:
a=numpy.array([1,2])
b=numpy.array([3,4])
a.dot(b) 表示1*3+2*4=11 - 矩阵的转制:a.T
- 矩阵同行相加:numpy.sum(a,axis=0)
- 生成等差数列:numpy.arange(0,10,1,dtype=int) 不包括stop的位置
- 等比数列:numpy.logspace(1,10,10,base=2) 1开始以比为2的10个等比数列
2.3Pandas的使用
导入Pandas的包import pandas 可以说是python中的Excel。
- 创建数组:pandas.Series([1,2,3]) 第一列为索引,第二列为数值
a=pandas.DataFrame(numpy.arange(12),reshape(3,4))
a[1] 为提取第一列
a.iloc[0] 为提取第一行 - 标准DataFrame:pandas.DataFrame(numpy.arange(16),reshape(4,4),
columns=['col1','col2','col3','col4'],
index=['a','b','c','d'])
columus表示列名,index表示行名。
a['col1'] 获取第一列 - 获取头几行:a.head(2) 获取前2行
a.tail(2) 获取最后2行 - 查看df的详细信息:a.describe()
- 矩阵的转制:a.T
- 添加特征(添加列):a['col5']=[1,2,3,4]
- 删除列:del a['col5']
- 获取列名和行名:a.columns a.index
- 直接查看数据:a.values
- 索引获取数据:a.loc[['a','b'],['col1','col2']] 通过名称获取
a.iloc[0] 通过下标获取 - 读取文件:pandas.read_csv('/data.csv')
- 查看文件属性:a.info()
- 写入文件:a.to_csv('/data.csv',index=false)
- 删除特征为空的行:a.dropna()
- 删除特征为空的列:a.dropna(axis=1,how='any')
- 空值替换:a.fillna(0)
- 空值用均值替换:a.fillna(a['col4'].mean())
a.fillna(a['col4'].median()) 众数去替换
2.4线性代数和微积分基础
2.4.1向量基础
标量:表示一个单独的数。
向量:一个同时具有大小和方向的几何对象。
-
向量的模:表示向量的长度。
-
向量的范数:向量长度的不同表达
1范数:向量各个维度的绝对值求和。
2范数:向量的模
无穷范数:各个维度绝对值的最大值 -
向量加法:
-
向量数乘:
-
向量的乘积--点积:
-
机器学习中常用的公式
2.4.2矩阵基础
-
矩阵乘法--点积:要求a的n列等于b的n行,也就是a的行乘以b的列。
-
矩阵乘法--元素积:python代码为multiply(a,b)
-
矩阵的转置:矩阵中的数对角线进行交换。
2.4.3数学中的符号与运算
-
最大化参数(没看明白):
2.4.4微分
微分:在数学中,微分是对函数的局部变化率的一种线性描述。
-
导数:
-
微分的基本法则:
2.5概率基础
古典概率:实验的全部可能结果只有有限个,且两两不相容。
事件发生的概率是相等的。条件概率:在A事件发生的情况下,B事件发生的概率,表示A和B有交集。
联合分布:表示2个不相关的分布,联合组成的概率事件。例如骰子和硬币
边缘分布:在联合分布中,一个随机变量自身的概率分布叫做边缘分布,例如骰子为1的概率为1/6。
条件分布:对于二维随机变量(X,Y),可以考虑在其中一个随机变量取得(可能的)固定值的条件下,另一随机变量的概率分布,这样得到的X或Y的概率分布叫做条件概率分布,简称条件分布。
-
期望:数学期望(mean)(或均值,亦简称期望)是实验中每次可能结果的概率乘以其结果的总和,它反映随机变量平均取值的大小。
方差:一个随机变量的方差描述的是它的离散程度,也就是该变量离其期望值的距离。一个随机变量的方差也称为它的二阶矩或二阶中心动差,方差的算术平方根称为该随机变量的标准差。
2.6优化基础
-
极小值、极大值:
-
正定矩阵:
顺序主子式:设A是nXn的矩阵,它的顺序主子式是左上角矩阵的行列式。
sylvester判定:1.如果A的所有顺序主子式都大于0(大于或等于0),那么A是正定矩阵(半正定矩阵)。
2.如果A的所有奇数阶顺序主子式都小于0(小于或等于0),所有的偶数阶顺序主子式都大于0(大于或等于0),那么A是负定矩阵(半负定矩阵)。
3.计算顺序主子式是:对角线相乘后相加。-
梯度和黑塞矩阵:
稳定点:满足一阶导数=0的点为稳定点。稳定点包含两类:一类是极值点,另一类不是极值点。
鞍点:满足一阶导数=0的但又不是极值点的点叫做鞍点。
-
函数的凸凹性:
-
梯度下降法和牛顿法
2.7信息论基础
信息论的由来:信息论是应用数学的一个分支,主要研究的是对一个信号能够提供信息的多少进行量化,最初用于研究在一个含有噪声的信道上用离散的字母表来发送信息,指导最优的通信编码等。
基本想法:一个不太可能的事情竟然发生了要比一个非常可能的事件的发生能提供更多的信息,也就是说导致那些“异常”事件发生的背后拥有着我们更想知道的东西。
自信息:一个事件所包含的信息
l(x)=-logP(x)-
信息熵:
信息熵的意义:
1.熵的作用计算损失用于调整梯度递减的步长,本次熵(损失)比上次熵(损失)大,说明步长太大了。
2.用于决策树熵越大,说明特征的划分数据能力越强。联合熵:度量二维随机变量的不确定性。
条件熵:X给定条件下,Y的条件概率分布的熵对X的数学期望(平均不确定性)。
相对熵:又称为KL散度,信息散度,信息增益。主要用来衡量两个分布的相似度。假设连续随机变量x,真是的概率分布为p(x),模型得到的近似分布为q(x)。
互性信息:用来衡量两个相同的一维分布变量之间的独立性。I(X;Y)是衡量联合分布p(x,y)和p(x)p(y)分布之间的关系,即他们之间的相关系数。
信息增益:假设系统原有的熵为H(Y),后来引入了特征T,在固定特征T的情况下,系统的混乱度减小,熵减少为H(Y|T),那么特征T给系统带来的信息增益为:
IG(T)=H(Y)-H(Y|T)