reduce()
reduce(function, iterable)
def add(x, y) : # 两数相加return x + y
sum1 = reduce(add, [1,2,3,4,5]) # 计算列表和:1+2+3+4+5
sum2 = reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函数
print(sum1)
print(sum2)
input(),raw_input()
raw_input( ) 将所有输入作为字符串看待,返回字符串类型。
input( ) 只能接收"数字"的输入
input:123
>>>a = raw_input("input:")
input:123
np.power(x,y)
计算x 的y 次方
三维数组切片取数
对象是三维数组,则切片应当是x[::],里面有两个冒号,分割出三个间隔,三个间隔的前、中和后分别表示对象的第0、1、2个维度
python错误和异常
1.try/except
2.try/except…else
3.try/except…else/finally
1单变量线性回归
模型表示:
代价函数,平方误差函数:
梯度下降求解代价函数:
2多变量线性回归
与单变量同理
代价函数python代码:
inner=np.power(((x*theta.T)-y),2)
return np.sum(inner)/(2*len(x))
1.梯度下降法:特征缩放
实际情况:特征值之间尺度差异太大,比如:房屋的尺寸和房间的数量,尺寸的值为 0-2000平方英尺,而房间数量的值则是0-5,
方法:将所有特征尺度尽量缩放在-1到1之间。
公式:
2.特征和多项式回归
3逻辑回归
模型
def sigmoid(z):
return 1/(1+np.exp(-z))
代价函数
def cost(theta,x,y):
theta=np.matrix(theta)
x=np.matrix(x)
y=np.matrix(y)
first=np.multiply(-y,np.log(sigmoid(x*theta.T)))
second=np.multiply((1-y),np.log(1-sigmoid(x*theta.T)))
return np.sum((first-second)/len(x))
流程建立模型,找到代价函数,用梯度下降求代价函数
还有其他令代价函数最小的算法:共轭梯度,局部优化法,有限内存局部优化法。
多类别分类:一对多
原理,比如有三类,三角形,正方形,x形,先从三角形代表类别1开始,实际上我们创建一个,新的“伪”训练集,类型2和类型3定位负类,将正方形,x形看成是圆形,依次类推。
4正则化
4.1 过拟合的问题
处理方法:
1.丢弃一些不能帮助我们正确预测的特征,人工选择一些特征,或者通过一些模型PCA的算法来帮助选取
2.正则化,保留所有特征,减少参数大小。
我们可以通过对高次项的系数,接近于0的话,就能很好拟合。
5神经网络
计算代价函数偏导数方法一一一反向传播算法
6应用机器学习的建议
当我们运用训练好了的模型来预测未知数据的时候发现有较大的误差下一步做什么。
1.获取更多的训练实例,通常是有效的,但代价较大–解决高方差
2.尝试减少特征的数量–解决高方差
3.尝试获得更多的特征–解决高偏差
4.尝试增加多项式特征–解决高偏差
5.尝试减少正则化程度入–解决高偏差
6.尝试增加正则化程度入–解决高方差
6.1模型选择和交叉验证集
模型选择的方法:
情景:使用60%的数据作为训练集。使用20%的数据作为交叉验证集,使用20%的数据作为测试集
1.使用训练集训练出10个模型
2.用10个模型分别对交叉验证集计算得出交叉验证误差(代价函数的值)
3.选取代价函数最小的模型
4.用步骤3选择的模型对测试集计算得出推广误差(代价函数的值)
6.2诊断偏差和方差
原理:算法表现不理想,一般是偏差较大,或者方差较大,换句话说,出现的情况要么是欠拟合,要么是过拟合,判断是与偏差有关还是方差有关。
训练集与交叉验证集代价函数误差与多项式的次数关系:
由上图可知:训练误差和交叉验证集误差近似时:偏差/欠拟合
交叉验证集误差远大于训练误差时:方差/过拟合
通常我们使用正则化来防止过拟合,我们选择一系列测试的入值,通常是0-10之间的呈现2倍关系的值(如:0,0.01,0.02,0.04,0.08,0.015等12个),将数据分为训练集、交叉验证集、测试集
选择方法:
1.使用训练集训练出12个不同程度正则化的模型
2.用12个模型分别对交叉验证集计算出交叉验证误差
3.选择交叉验证误差最小的模型
4.运用步骤3选出模型,对测试机计算推广误差
构建一个学习算法的推荐方法
1.从一个简单的能快速实现的算法开始,实现该算法并用交叉验证集测试这个算法
2.绘制学习曲线,决定是增加更多数据,或者添加更多特征,还是其他选择
3.进行误差分析,人工检查交叉验证集中我们算法中产生预测误差的实例,看这些实例是否有系统化的趋势
分类算法误差度量评估
1.查准率
2.查全率
3.查准率与查全率之间的权衡
F1值 计算公式