机器学习(numpy/matplotlib/scipy)学习笔记

时域到频域——傅里叶变换
频域到时域——逆傅里叶变换
CNN——卷积神经网络

强分类器:Logistic回归/SVM
弱分类器:决策树

回归
连续——回归
离散——分类

最小二乘法的目标:求误差的最小平方和。

线性回归:
KNN(K邻近算法)
ridge:岭回归
lasso:

logestic回归
NLL:负对数似然
在分类或者回归问题中,通常使用损失函数(代价函数)作为其目标函数

ROC:receiver operating characteristic
AUC:area under curve

/************************/
Numpy库
/************************/
import numpy as np

//NumPy 数组的维数称为秩(rank),一维数组的秩为 1,二维数组的秩为 2,以此类推。
//在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions)。axis=0,表示沿着第 0 轴进行操作,即对每一列进行操作;axis=1,表示沿着第1轴进行操作,即对每一行进行操作。

a=np.array(数组对象,dtype=‘元素数据类型’) //形成一个数组
dt=np.dtype(元素对象) //查看元素对象的数据类型

数组对象.shape //返回数组的行列值
数组对象.shape=x //改变数组的行列值,会改变元数组
a=数组对象.reshape(m,n) //改变数组的行列值,不会改变元数组

np.fromiter(可迭代对象,dtype,count) //从可迭代对象中建立数组,count为读取的数据量,默认为-1,即读取所有数据
np.arange(start,stop,step,dtype) //生成一个列表
np.linspace(start,stop,num,endpoint=True,restep=False,dtype=None) //生成一个等差数列
/*
num为元素个数,默认为50
endpoint为true是数列中包含stop的值,反之不包含
restep为true时生成的数组中显示间距,反之不显示 //一般用不到该属性
/
np.logspace(start,stop,num,endpoint,base,dtype) //生成一个等比数列
/

base为公比,默认为10
序列的起始值为basestart,终止值为basestop
*/

a[start:stop:step] //a为数组,本语句为获取a对象中下标为从start开始到stop结束间隔为step的元素
/*
冒号也可以写一个,三个属性如果不写则为默认值
*/
y = x[[0,1,2], [0,1,0]] //取数组中(0,0),(1,1),(2,0)位置的元素
b = a[1:3, 1:3] //获取(1,1),(1,2),(2,1),(2,2)四个元素组成的数组
c = a[1:3,[1,2]] //作用同上
d = a[…,1:] //…的意思是所有的行/列
a=x[x > 5] //返回值为元素值大于5的元素形成的一个数组
x[[4,2,1,7]] //花式索引根据索引数组的值作为目标数组的某个轴的下标来取值。对于使用一维整型数组作为索引,如果目标是一维数组,那么索引的结果就是对应位置的元素;如果目标是二维数组,那么就是对应下标的行。
x[[-4,-2,-1,-7]] //倒序索引,即倒数第4,2,1,7个元素或行
x[np.ix_([1,5,7,2],[0,3,1,2])] //分别取(1,0),(1,3),(1,1),(1,2),(5,0),(5,3)……位置上的元素

c=a*b //如果a.shape==b.shape时,则该语句的作用是得到一个对应位置相乘的数组
广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式
a = np.array([[ 0, 0, 0],
[10,10,10],
[20,20,20],
[30,30,30]])
b = np.array([1,2,3]) //b为a的每一行的对应元素都分别加上1,2,3

a.T //得到数组的转置
np.transpose(a) //得到数组的转置
for x in np.nditer(a): //完成对数组a中元素的访问
for element in a.flat: //对数组中每个元素都进行处理,可以使用flat属性,该属性是一个数组元素迭代器
a.flat //一个数组元素迭代器
a.flatten() //返回一份数组拷贝,对拷贝所做的修改不会影响原始数组
a.ravel() //将数组展开为一维数组,修改会影响原始数组
np.rollaxis(arr, axis, start) //向后滚动特定的轴到一个特定位置,start默认为零,表示完整的滚动。
np.swapaxes(arr, axis1, axis2) //用于交换数组的两个轴
a.ndim //返回数组a的维度
np.squeeze(arr, axis) //从给定数组的形状中删除一维的条目
np.concatenate((a1, a2, …), axis) //用于沿指定轴连接相同形状的两个或多个数组
np.stack(arrays, axis) //用于沿新轴连接数组序列,要求arrays 具有相同的shape
np.hstack(arrays, axis) //是 numpy.stack 函数的变体,它通过水平堆叠来生成数组。
np.vstack(arrays, axis) //是 numpy.stack 函数的变体,它通过垂直堆叠来生成数组。
np.split(ary, indices_or_sections, axis) //沿特定的轴将数组分割为子数组
/*
indices_or_sections:果是一个整数,就用该数平均切分,如果是一个数组,为沿轴切分的位置(左开右闭)
axis:沿着哪个维度进行切向,默认为0,横向切分。为1时,纵向切分
*/
np.hsplit(ary, indices_or_sections) //用于水平分割数组,通过指定要返回的相同形状的数组数量来拆分原数组
np.vsplit(ary, indices_or_sections) //沿着垂直轴分割,其分割方式与hsplit用法相同

np.resize(arr, shape) //返回指定大小的新数组,如果新数组大小大于原始大小,则包含原始数组中的元素的副本。(行或列会重复出现)
np.append(arr, values, axis=None) //在数组的末尾添加值。 追加操作会分配整个数组,并把原来的数组复制到新数组中,其返回值始终是一个一维数组
np.insert(arr, obj, values, axis) //在给定索引之前,沿给定轴在输入数组中插入值。函数会返回一个新数组。 此外,如果未提供轴,则输入数组会被展开。
/*
obj在其之前插入值的索引
/
np.delete(arr, obj, axis) //回从输入数组中删除指定子数组的新数组。 与 insert() 函数的情况一样,如果未提供轴参数,则输入数组将展开。
/

obj:可以是切片,整数或者整数数组
/
np.unique(arr, return_index, return_inverse, return_counts) //用于去除数组中的重复元素。
/

return_index:如果为true,返回新列表元素在旧列表中的位置(下标),并以列表形式储
return_inverse:如果为true,返回旧列表元素在新列表中的位置(下标),并以列表形式储
return_counts:如果为true,返回去重数组中的元素在原数组中的出现次数
*/

np.bitwise_and(a, b) //可将两个数组中的元素分别按位与
np.bitwise_or(a, b) //可将两个数组中的元素分别按位或
np.invert(a, dtype = np.uint8) //对数组中整数进行位取反运算
np.binary_repr(a, width = 8) //返回值为一个数的二进制表示,长度为width
np.left_shift(10,2) //将10左移2位
np.right_shift(40,2) //将40左移2位

np.sin(anp.pi/180) //正弦函数
np.arcsin(sin) //反正弦函数
同理还有余弦、正切等
np.add(a,b)
np.subtract(a,b)
np.multiply(a,b)
np.divide(a,b)
/

加减乘除函数,数组必须具有相同的形状或符合数组广播规则
*/
np.reciprocal(a) //返回参数逐元素的倒数
np.power(a, b) //函数将第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的幂。
np.mod(a, b) //计算输入数组中相应元素的相除后的余数
np.amin(a, axis) //用于计算数组中的元素沿指定轴的最小值。
np.amax(a, axis) //用于计算数组中的元素沿指定轴的最大值。
np.ptp(a, axis) //计算数组中元素最大值与最小值的差(最大值 - 最小值)
np.median(a, axis) //用于计算数组 a 中元素的中位数(中值)
np.mean(a, axis) //返回数组中元素的算术平均值。 如果提供了轴,则沿其计算。
np.average(a, axis, weights=b) //根据在另一个数组中给出的各自的权重计算数组中元素的加权平均值,通过将相应元素的乘积相加,并将和除以权重的和,来计算加权平均值
np.std(a) //计算标准差
np.var(a) //计算方差

np.sort(a, axis, kind, order)
/*
axis: 沿着它排序数组的轴,如果没有数组会被展开,沿着最后的轴排序, axis=0 按列排序,axis=1 按行排序
kind: 默认为’quicksort’(快速排序)
order: 如果数组包含字段,则是要排序的字段
*/
np.argsort(a) //函数返回的是数组值从小到大的索引值。
np.lexsort((a,b)) //用于对多个序列进行排序。把它想象成对电子表格进行排序,每一列代表一个序列,排序时优先照顾靠后的列。即先按b排,再按a排,参数为元组
np.partition(a, 3) //将数组 a 中所有元素(包括重复元素)比第3小的放在前面,大的放在后面
np.partition(a, (1, 3)) //小于 1 的在前面,大于 3 的在后面,1和3之间的在中间
arr[np.argpartition(arr, 2)[2]] //找到数组的第 3 小(index=2)
arr[np.argpartition(arr, -2)[-2]] //找到数组的第 2 大(index=-2)
np.argmax/min(a, axis ) //分别沿给定轴返回最大和最小元素的索引。
np.nonzero (a) //返回输入数组中非零元素的索引
np.where(条件,如数组对象>3) //返回输入数组中满足给定条件的元素的索引
np.extract(condition, x) //根据某个条件从数组中抽取元素,返回满条件的元素

np.dot(a,b) //对于两个一维的数组,计算的是这两个数组对应下标元素的乘积和(数学上称之为内积);对于二维数组,计算的是两个数组的矩阵乘积;
np.vdot(a,b) //计算两个向量的点积。 如果第一个参数是复数,那么它的共轭复数会用于计算。 如果参数是多维数组,它会被展开。
np.inner(a,b) //返回一维数组的向量内积。对于更高的维度,它返回最后一个轴上的和的乘积。
np.matmul(a,b) //函数返回两个数组的矩阵乘积。
np.linalg.det(a) //函数计算输入矩阵的行列式。
np.linalg.solve(a) //函数给出了矩阵形式的线性方程的解。
np.linalg.inv(a) //函数计算矩阵的乘法逆矩阵。

np.save(file, arr, allow_pickle=True, fix_imports=True) //将数组保存到以 .npy 为扩展名的文件中。
/*
file:要保存的文件,扩展名为 .npy,如果文件路径末尾没有扩展名 .npy,该扩展名会被自动加上。
arr: 要保存的数组
allow_pickle: 可选,布尔值,允许使用 Python pickles 保存对象数组,Python 中的 pickle 用于在保存到磁盘文件或从磁盘文件读取之前,对对象进行序列化和反序列化。
fix_imports: 可选,为了方便 Pyhton2 中读取 Python3 保存的数据。
*/
b = np.load(‘outfile.npy’) //读取npy或npz文件的内容
np.savez(file, *args, *kwds) //将多个数组保存到以 npz 为扩展名的文件中。
/

file:要保存的文件,扩展名为 .npz,如果文件路径末尾没有扩展名 .npz,该扩展名会被自动加上。
args: 要保存的数组,可以使用关键字参数为数组起一个名字,非关键字参数传递的数组会自动起名为 arr_0, arr_1, … 。
kwds: 要保存的数组使用关键字名称。
/
np.loadtxt(FILENAME, dtype=int, delimiter=’ ')
np.savetxt(FILENAME, a, fmt="%d", delimiter=",")
/

是以简单的文本文件格式存储数据,对应的使用 loadtxt() 函数来获取数据
参数 delimiter 可以指定各种分隔符、针对特定列的转换器函数、需要跳过的行数等。
fmt="%d" 表示保存为整数
*/

/************************************/
numpy.matlib库 //python的矩阵库
/***********************************/
np.matlib.empty(shape, dtype, order) //返回一个新的矩阵
np.matlib.zeros((行数,列数)) //函数创建一个以 0 填充的矩阵。
np.matlib.ones((行数,列数)) //函数创建一个以 1 填充的矩阵。
np.matlib.eye(n, M,k, dtype)
/

n: 返回矩阵的行数
M: 返回矩阵的列数,默认为 n
k: 对角线的索引,一般为0
dtype: 数据类型
*/
np.matlib.identity(5, dtype) //返回一个5行5列的单位矩阵
np.matlib.rand((行数,列数)) //函数创建一个给定大小的矩阵,数据是随机填充的。

//
matplotlib //python的绘图库
/
/
import matplotlib
from matplotlib import pyplot as plt

zhfont1 = matplotlib.font_manager.FontProperties(fname=“SimHei.ttf”) //设置字体
plt.title(“Matplotlib demo”) //函数图像的标题
plt.xlabel(“x axis caption”, fontproperties=zhfont1) //x轴的文字
plt.ylabel(“y axis caption”, fontproperties=zhfont1) //y轴的文字
plt.plot(x,y,“ob”) //函数绘制,x,y分为为x,y轴的值,ob表示蓝色的圆圈
plt.show() //显示
/*
plot中的参数的意义:
颜色: b-蓝色,g-绿色,r-红色,c-青色,m-品红色,y-黄色,k-黑色,w-白色
线条样式:‘-'实线,‘–’短横线,‘-.’点划线,‘:’虚线,‘.’点标记,‘o’圆标记,‘v’倒三角标记,‘^’正三角标记,‘*’星型标记,‘x’X标记
*/

plt.subplot(2, 1, 1) //建立第一个subplot表格,高为2,宽为1,为第一个
plt.plot(x, y_sin) //绘制第一个
plt.subplot(2, 1, 2) //建立第二个subplot表格,高为2,宽为1,为第二个
plt.plot(x, y_cos) //绘制第二个
plt.show() //将两个函数图像显示在同一个图像内

/绘制柱形图/
plt.bar(x, y, align = ‘center’)
plt.bar(x2, y2, color = ‘g’, align = ‘center’)
plt.title(‘Bar graph’)
plt.ylabel(‘Y axis’)
plt.xlabel(‘X axis’)
plt.show()

//将图片转化为二维数组后并显示
plt.imshow(img)
plt.show()

//
scipy库 python的科学计算库
/
/
scipy库中的模块:
scipy.cluster 矢量量化/K-均值 scipy.constants 物理和数学常数
scipy.fftpack 傅里叶变换 scipy…integrate 积分程序
scipy.interpolate 插值 scipy.io 数据的输入输出
scipy.linalg 线性代数程序 scipy.ndimage n维图像包
scipy.odr 正交距离回归 scipy.optimize 优化
scipy.signal 信号处理 scipy.sparse 稀疏矩阵
scipy.spatial 空间数据结构和算法 scipy.special 任何特殊数学函数
scipy.stats 统计

linalg.det(a) //计算方阵a 的行列式
linalg.inv(a) //求矩阵a 的逆
sample_freq = fftpack.fftfreq(sig.size, d=time_step) //计算sig信号的采样频率
sig_fft = fftpack.fft(sig) //计算sig的快速傅里叶变换
loc, std = stats.norm.fit(a) //计算a的均值和标准差
res, err = integrate.quad(fun, a, b) //对fun函数在[a,b]区间上积分,第一个返回值为积分结果,第二个返回值为误差值
integrate.dblquad(func,a,b,gfun,hfun):计算双重积分,参数分别为被积函数(f(y,x))、x的积分下限、x的积分上限、y的积分下限、y的积分上限
optimize.minimize(func,x0,method):计算标量函数的最小值,参数分别为标量函数、初值、寻优方法,寻优方法有:‘Nelder-Mead’,‘Powell’,‘CG’,‘BFGS’,‘Newton-CG’,‘L-BFGS-B’ ,‘TNC’,‘COBYLA’,‘SLSQP’,‘dogleg’,‘trust-ncg’
linalg.eig(a) //计算方阵a的特征向量
linalg.svd(a) //对矩阵a进行奇异值分解
linalg.qr(a) //对矩阵进行QR分解
linalg.solve(a,b) //求方程组a*x=b的解
x=np.random.normal(loc, scale, size) //形成一个正态分布,参数分别为均值,标准差,大小
x.mean() //均值
x.std() //标准差
x.var() //方差

猜你喜欢

转载自blog.csdn.net/zuzhiang/article/details/108788886