learning with scikit-learning 笔记
scikit-learn
[教程](http://www.shareditor.com/blogshow?blogId=59)
线性代数是机器学习和深度学习的基础
- 矩阵
- 乘法 [[1,2,3],[2,3,4]] * [[1,2],[2,3],[3,4]] = [[11+22+33, 12+23+34],[]]
- 转置 transpose
- 乘积 dot
- 逆 inv
- 方阵
- 内积:行向量*列向量,得到一个数
- 外积:列向量*行向量,得到一个矩阵
- 行列式
- 线性变换
- 特征值
- 矩阵
一元线性回归
- y=f(x)叫做一元函数,回归就是根据已知数据复原某些值,线性回归就是用线性的模型做回归复原。
- 那么一元线性回归就是:已知一批(x,y)值来复原另外未知的值。比如:告诉你(1,1),(2,2),(3,3),那么问你(4,?)是多少,很容易复原出来(4,4),这就是一元线性回归问题的求解。
1
2
3
4
5
6
7
8
9import numpy as np
from sklearn.linear_model import LinearRegression
x = [[1],[2],[3],[4],[5],[6]]
y = [[1],[2.1],[2.9],[4.2],[5.1],[5.8]]
model = LinearRegression()
model.fit(x, y)
predicted = model.predict([13])[0]
print predicted # [[ 12.82666667]]
多元线性回归
1
2
3
4
5
6
7
8
9
10from sklearn.linear_model import LinearRegression
X = [[1,1,1],[1,1,2],[1,2,1]]
y = [[6],[9],[8]]
model = LinearRegression()
model.fit(X, y)
x2 = [[1,3,5]]
y2 = model.predict(x2)
print y2 # [[22.]]多项式回归 (未必是线性的)
梯度下降法 : 也是做直线的拟合,一种确定系数的方法,需要较多样本数据
http://www.shareditor.com/blogshow?blogId=57
梯度下降就好比从一个凹凸不平的山顶快速下到山脚下,每一步都会根据当前的坡度来找一个能最快下来的方向。
特征提取
效果评估
效果评估是模型选择和算法设计的重要步骤,知道评估优劣才能选择最佳的模型和算法
- 准确率
- 精确率
- 召回率 真值被找到的比率 (被除数为真值总数)
- 误警率 假值被判断为真值的占比(被除数为假值总数)
- roc 召回率与误警率
使用网格搜索快速找到最优模型参数
任何一种机器学习模型都附带很多参数,不同场景对应不同的最佳参数,手工尝试各种参数无疑浪费很多时间,scikit-learn帮我们实现了自动化,那就是网格搜索
聚类
注意它使用了成本函数值来判断应该有几个核心笔记合适。
http://www.shareditor.com/blogshow?blogId=61神经网络
- 神经元,每个节点都是一个神经元,每层有多个神经元,上一层的输出是下一层的输入
- 激活函数
- 神经元的激活函数f是相同的,唯一不同的就是权重W,那么我们做学习训练的目标就是求解这里的W
- 反向传导算法
- 大量训练样本(x,y),未知的是参数W和b,那么我们计算W的方法是:
- 先初始化一个不靠谱的W和b,然后用输入x和W和b预估y
- 然后根据预估的y和实际的y之间的差距来通过梯度下降法更新W和b,
- 然后再继续下一轮迭代,最终逼近正确的W和b
- 使用梯度下降法需要设计一个代价函数
- 经过多伦迭代让代价函数最小
- 过拟合:太适合这些样本了,导致不适合样本之外的数据,泛化能力低
神经网络的计算过程
- 初始化W和b为小随机数
- 遍历所有样本,利用前向传导算法计算出神经网络的每一层输出a和最终的输出值hW,b(x)
- 利用hW,b(x)和真实值y计算输出层的残差δ
- 利用反向传导算法计算出所有层所有节点的残差δ
- 利用每一层每一个节点的a和δ计算代价函数关于W和b的偏导
- 用得出的偏导来更新权重
- 返回2进行下一轮迭代直到代价函数不再收敛为止
- 得到我们的神经网络
逻辑回归
tensorflow
- tensor 张量
- 0阶张量 是 标量 (就是单个值)
- 1阶张量 是 向量
- 2阶张量 是 矩阵
- flow 流
- softmax
- 柔和的最大值,也就是如果某个zj大于其他z,那么这个映射的分量就逼近于1,其他的分量就逼近于0,从而将其归为此分类,多个分量对应的就是多分类。
- sigmoid 它是神经网络二分算法的激活函数之一
- 注意它和softmax的不同,sigmoid是分布,其分布[-1,1],而softmax分布[0,1],其实它表示的是一种概率,即x属于某个分类的概率
- tensorflow会使用C语言计算复杂运算来提高效率,但是不同语言之间的切换和不同计算资源之间的数据传输耗费很多资源
- 因此它使用图来描述一系列计算操作,然后一起传给外部计算,最后结果只传回一次,这样传输代价最低,计算效率最高
- tensor 张量
卷积神经网络 CNN
卷积核
每一种卷积核生成的图像都叫做一个通道
多层卷积
利用一次卷积运算(哪怕是多个卷积核)提取的特征往往是局部的,难以提取出比较全局的特征,因此需要在一层卷积基础上继续做卷积计算 ,这也就是多层卷积池化
- 池化是一种降维的方法
- 一种方法就是把图像中局部区域的特征做一个平滑压缩处理
- 具体做法就是对卷积计算得出的特征在局部范围内算出一个平均值(或者取最大值、或者取随机采样值)作为特征值,那么这个局部范围(假如是1010),就被压缩成了11,压缩了100倍,这样虽然更“模糊”了,但是也更“泛化”了
CNN训练过程
- 卷积核中的因子(×1或×0)其实就是需要学习的参数,也就是卷积核矩阵元素的值就是参数值。一个特征如果有9个值,1000个特征就有900个值,再加上多个层,需要学习的参数还是比较多的。
熵
- 熵:物质系统的混乱状态
- 一个孤立系统总是朝着熵增加的方向变化,熵越大越稳定,到最稳定时熵达到最大
- 信息熵,随机变量的概率分布。熵越大越趋向于自然,越没有偏见
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 jaytp@qq.com